わかりやすいコード

たとえば、「20 歳以上かどうか」を判定する次の関数があります。

1<?php
2function (int $age): bool
3{
4    if ($age >= 20) {
5        return true;
6    } else {
7        return false;
8    }
9}

if 条件が真であれば true を返却し、そうでなければ false を返却します。

とてもわかりやすい素直なコードですね。

3 つのパターン

この短い関数でも、コーディングの方法は 3 種類あると思います。

A. しっかり if で書き分けるバージョン

既出のコードです。

1<?php
2function (int $age): bool
3{
4    if ($age >= 20) {
5        return true;
6    } else {
7        return false;
8    }
9}

B. 三項演算子でかっこつけてみたバージョン

A の if 文を三項演算子で書き直してみたバージョンです。

1<?php
2function (int $age): bool
3{
4    return ($age >= 20) ? true : false;
5}

三項演算子は次の形です。

1<条件式> ? <真式> : <偽式>

これって単に if else を短縮してかけるだけのもので、この 2 つはほぼおなじですよね。

C. 式だけで十分に自明だよねバージョン

式の結果をそのまま返却するバージョンです。

1<?php
2function (int $age): bool
3{
4    return ($age >= 20);
5}

どうして A バージョン -> C バージョンが同じなのか ?

A バージョンの

1<?php
2function (int $age): bool
3{
4    if ($age >= 20) {
5        return true;
6    } else {
7        return false;
8    }
9}

を読み解いていくと、

  • ($age >= 20)true なら true を返却
  • ($age >= 20)false なら false を返却

しています。

($age >= 20) の結果と、返り値が等しいですね。

ならば、 ($age >= 20) をそのまま返却しても同じ、というわけで

1<?php
2function (int $age): bool
3{
4    return ($age >= 20);
5}

の C バージョンのように書くことができます。

もっと簡潔なコードがあるのに if を書くかどうか

C バージョンの

1<?php
2function (int $age): bool
3{
4    return ($age >= 20);
5}

というコードのほうがシンプルで把握しやすいと思いますが、いかがでしょうか ?

これがスッと「自明である」と認識できるならば、 iftrue false と書き分けてあることが認知不可となり、その分余計に脳リソースを消耗して負担だと感じるわけです。

けれども、このコードをいつも書いて良いかどうか、を考えると、「本当はこう書きたいけれども、チームの平均スキルレベルを考慮する必要があるかもね」という結論になるのでした。