PHPにはif文がある。しかし、おしきせのものに頼るのは癪だ。自分で実装しよう。
つまり、理想はこうだ。
echo $if($true, 'foo', 'bar');
// => 'foo'
echo $if($false, 'foo', 'bar');
// => 'bar'
函数にはパワーがある。そのパワーを駆使して、自分で利用するための$true
も$false
も、あなたには実装できるはずだ。
$true = function (...) { return ...; };
$false = function (...) { return ...; };
$if = function ($cond, $then, $else) {
return ...;
};
$if
はオペランドに $cond, $then, $else
をとる。
実用的には、さらに次のような函数を定義しておくと、極めてべんりだ。
$eq = function ($a, $b) use ($true, $false) {
return ($a === $b) ? $true : $false;
};
echo $if($eq(10, 20), 'equals!', 'not equals');
さらには次のような論理演算も容易に実装することができる。
$not = function ($v) use ($true, $false) {
return $v($false, $true);
};
$and = function ($x, $y) use ($false) {
return $x($y, $false);
};
$or = function ($x, $y) use ($true) {
return $x($true, $y);
};
var_dump(
$if($and($eq(10, 10),
$eq(10, 20)),
'TruE',
'FalsE'));
なに? このままでは相互運用性がないと不便だ? 仕方ない。オレオレBooleanからPHPのbool型に戻す函数も用意しようじゃないか。
$PHPBool = function ($bool) use ($if) {
return $if($bool, true, false);
};
if ($PHPBool($eq(10, 99))) {
var_dump("foo");
} else {
var_dump("bar");
}
あとがき
内容は以下の記事とほとんどおんなじ。ねたは被るまいと思って書きかけのまま一週間寝かせてたら先を越されてぐぬぬ。
- Re: if文も三項演算子も書かないで条件分岐をスッキリさせる - Qiita by @irxground
- PHP - if文も三項演算子も書かないで条件分岐をスッキリさせる - Qiita by @t_ishida
すこし詳しく書いておくと、これは 型無しラムダ計算 の初歩に相当する。その件については過去に書いた。どちらも短い記事なので、興味があれば参照されたい。
おいこれどうなってんだよ、といふ型がいらっしゃれば代々木.もくもくなどで詰問するべし。