業務でネストの深いIF文を見ると、追うのが大変でうんざりすることがあります。
大体の場合、ちょっとした修正のために付け加えていって肥大化したパターンです。
これを予め防ぐ、簡単な工夫を一例として示します。
ちなみに、未経験でエンジニア求人に応募するときも、
実際にこのような記法を知っていれば、保守性について話せてポイントが高いと思います。
早期リターン&ガード節
以下は与えられた値の型を判断するだけのコードです。
$value = [1,2,3];
function judgeType($value) :string //タイプヒンティング;この関数がstringを返すことを明示
{
if (is_string($value)) {
$result = $value . ' is string.';
} else if (is_int($value)) {
$result = $value . ' is integer.';
} else {
$result = $value . ' is neither string nor integer.';
}
return $result;
}
echo judgeType($value); // Given value is neither string nor integer.
この程度の量なら読めなくはないですが、無駄があります。
これを下記のように書き換えることが出来ます、
$value = [1,2,3];
function judgeType($value) :string //タイプヒンティング;この関数がstringを返すことを明示
{
if (is_string($value)) {
return $value . ' is string.';
}
if (is_int($value)) {
return $value . ' is integer.';
}
return $value . ' is neither string nor integer.';
}
echo judgeType($value); // Given value is neither string nor integer.
スッキリしましたね。
ポイントを整理すると
-
$result
というローカル変数が不要。 - 各IF句に
return
があるので、条件に当てはまった場合関数は戻り値を返して終了する。 -
else
がなくても2つのIF句がスキップされ最終行のreturn
が実行される。
このようにローカル変数を置かず即時にreturn
を置くことを早期リターンと呼びます。
また、else句を使わず早期リターンする方法をガード節といいます。
やっていることは単純なので、ぜひガード節を用いて保守性の高いコードを書くことを意識してみてください。
追記:2020年10月26日
コメントより、括弧を取る書き方もあるので追記します。
ただし、フレームワークやプロジェクトでPSR準拠させている場合は、
この書き方は避けたほうが良いとのことです。
確かに、メソッド書き足したりしにくそうですね。
他にも推奨されない理由があればぜひ教えていただきたいです。
近頃のPHPのフレームワークはPSR準拠なんで
中括弧を省く構造文は勧めたくないですね。
https://qiita.com/hshimo/items/04be1f432240c58300f4
function judgeType($value) :string //タイプヒンティング;この関数がstringを返すことを明示
{
if (is_string($value)) return $value . 'is string.';
if (is_int($value)) return $value . 'is integer.';
return $value . 'is neither string nor integer.';
}