多値
値が複数あること
特に戻り値に複数の値を返すことついて言及されることが多い 冷静になると、これは対称性がない
そこで、配列に値を詰めて返すことで、戻り値を複数返すことに相当する記述ができる
code:php
code:php
list($price, $stock) = drink_vendor($name); // PHP 5
蛇足
これらの言語は、引数に1個の値を、戻り値にも1個の値を必ず返すことで対称性がある
ほかの言語では複数引数で実現するようなコードはOCamlでは関数のネストで表現できる
code:ocaml
let f a b c = a + b + c;;
f 1 2 3;; (* 6 *)
これはPHPで書くとこうなる
code:php
$f = function ($a) {
return function ($b) use ($a) {
return function ($c) use ($a, $b) {
return $a + $b + $c;
}
}
};
$f(1)(2)(3); //=> 6
OCamlでも省略せずに書くともうちょっと長くなるけど、それでもPHPよりずっとすっきりしてる
code:ocaml
let f = fun a -> fun b -> fun c -> a + b + c ;;
最初のOCamlコードとPHPコードが同じ意味であることはわかりやすくなった
引数や戻り値にタプルを利用することで、複数の値をとることができる code:ocaml
let g (a, b, c) = a + b + c ;;
g (1, 2, 3);; (* 6 *)
これをPHPで書くとこう
code:php
$g = function ($a, $b, $c) { return $a + $b + $c; };
$g(1, 2, 3); //=> 6
話の落ちは特にないんだけど、カリー関数がよいか非カリー関数がよいかは言語設計によるよね、みたいな感じ
参考