OCamlで擬似的に早期returnする
自分自身が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したいので!ということで備忘録です。
公開日:2020/06/15