I want to bail out of a function early, if given unsuitable arguments The imperative solution in Javascript is elegant:
arg=>{
if(arg>limit) return 42;
//perform complex operations
return x+y
}
ReasonML as a functional language has no return
, thus I am stuffing everything into single expression:
arg=>{
let helper=()=>{
//complex operations here
; x+y
}
(arg>limit) ? 42 : helper()
}
Now, this works but instead of just returning 42 I want to stuff in Js.Log("!CORNER CASE!")
. How can I do that? In C, I could write (arg>limit) ? (Js_Log("..."),42) : helper()
, but in ReasonML this becomes a tuple and does not compile.
OCaml could do begin printf "msg" ; 42 end
, but semicolon does not work for me in Reason: (Js.log("TEST");42)
-- does not compile!
Alternatively, I need the K-combinator in ReasonML.
I don't see what's wrong with just using
but if you absolutely have to squeeze into a ternary conditional you can use curly braces to form a code block there too, and generally anywhere you can put an expression:
I would usually consider this a code smell though, but for quick debugging it can be handy.