letcompute=Option.fold(fun_x->sprintf"The value is: %d"x)"No value"letfull=Some42letempty=Nonecomputefull|>printfn"compute full -> %s"computeempty|>printfn"compute empty -> %s"
実行結果
compute full -> The value is: 42compute empty -> No value
Haskell
コード例
compute::MaybeInt->Stringcompute=foldl(\_x->"The value is: "++showx)"No value"main::IO()main=doletfull=Just42letempty=NothingputStrLn$"compute full -> "++computefullputStrLn$"compute empty -> "++computeempty
実行結果
compute full -> The value is: 42compute empty -> No value
Nim
コード例
importstd/optionsproccompute(opt:Option[int]):string=opt.map(proc(x:int):string="The value is: "&$x).get("No value")letfull=some(42)empty=none(int)echo"compute(full) -> ",compute(full)echo"compute(empty) -> ",compute(empty)
実行結果
compute(full) -> The Value is: 42compute(empty) -> No value
letcompute=Option.fold~none:"No value"~some:(funx->"The value is: "^string_of_intx)let()=letfull=Some42inletempty=Noneinprint_endline("compute full -> "^computefull);print_endline("compute empty -> "^computeempty)
実行結果
compute full -> The value is: 42compute empty -> No value
Rust
コード例
fncompute(opt: Option<i32>)-> String{opt.map_or("No value".to_owned(),|x|format!("The value is: {}",x))}fnmain(){letfull=Some(42);letempty=None;println!("compute(full) -> {}",compute(full));println!("compute(empty) -> {}",compute(empty));}
実行結果
compute(full) -> The value is: 42compute(empty) -> No value
objectMain{defcompute(opt:Option[Int]):String=opt.fold("No value")(x=>s"The value is: $x")defmain(args:Array[String]):Unit={valfull=Some(42)valempty=Noneprintln(s"compute(full) -> ${compute(full)}")println(s"compute(empty) -> ${compute(empty)}")}}
実行結果
compute(full) -> The value is: 42compute(empty) -> No value
funccompute(_opt:Int?)->String{returnopt.map{"The value is: \($0)"}??"No value"}letfull=42letempty:Int?=nilprint("compute(full) -> \(compute(full))")print("compute(empty) -> \(compute(empty))")
実行結果
compute(full) -> The value is: 42compute(empty) -> No value
Zig
コード例
conststd=@import("std");constprint=std.io.getStdOut().writer().print;constCompute=struct{value:?i32,pubfninit(value:?i32)Compute{returnCompute{.value=value};}pubfnformat(self:@This(),comptimefmt:[]constu8,options:std.fmt.FormatOptions,out_stream:anytype,)!void{_=fmt;_=options;if(self.value)|n|{returnout_stream.print("The value is: {}",.{n});}else{returnout_stream.print("No value",.{});}}};pubfnmain()!void{constfull=Compute.init(42);constempty=Compute.init(null);tryprint("full -> {}\n",.{full});tryprint("empty -> {}\n",.{empty});}
実行結果
full -> The value is: 42 empty -> No value
Zigでは、?i32 の様に型名の前に ? を追加するとOptional型となる。
if (opt) |n| { の様に if 文、あるいは while文でペイロード n をキャプチャーすることができ、null の場合 else 節が評価される。