自分自身がOCamlで関数の途中である条件(良く有るのがエラーとか)の場合にその時点でreturnする処理を書きたくて調べていたのですが、どうやらOCamlでは早期returnを直接実現する方法は無いようです。

そこで、例外を使うことで擬似的に早期returnを実現できたのでメモです。

まずは適当な例外を宣言します。

utop # exception Hoge of string;;
exception Hoge of string

偶数の場合は処理をして、奇数の場合はエラーとしてreturnする、と言う処理は、例外を使って以下のように書けます。

utop # let f v = try
let _ = if v mod 2 = 0 then v else raise (Hoge "偶数でおなしゃす") in
(*あとは普通に何か色々処理書く*)
Some v
with | Hoge s -> print_endline s; None;;

val f : int -> int option = <fun>

これで、擬似的に早期returnする関数が書けました。

utop # f 2;;
- : int option = Some 2

utop # f 3;;
偶数でおなしゃす
- : int option = None

Webアプリケーションを書いていると、IDをもらってそのIDでデータベースを検索して結果をJSONにして返す、という処理が頻出します。
そういった処理では、そもそもIDがURLに指定されていなかった場合はもうその時点で404などを返すことができます。
そういった場合でも、本来有るべき姿としては、Option.mapなどで処理をチェインしてスマートに記述するべきだと思います。
が、早期returnしたいものは早期returnしたいので!ということで備忘録です。