条件分岐の処理を書くときに気をつけること

if文の処理を下のように3ステップで考えていく。

  1. if文によって処理自体を条件分岐させる。これで意図した動きにはなっている。
$response['name'] = 'default' . $extention;
if( !is_null( $request->file_name ) ) {
    $response['file_name'] = $request->file_name . $extention;
}
  1. if文によって変数の場合分けをする。行数は増えている。
$file_name = 'default';
if( !is_null( $request->file_name ) ) {
    $file_name = $request->file_name;
}
$response['file_name'] = $file_name . $extention;
  1. 三項演算子を使う。
$file_name = is_null( $request->file_name ) ? 'default': $request->file_name;
$response['file_name'] = $file_name . $extention;

それぞれの変更理由

  • 1から2に修正する理由
    • 1だとif文の条件が真の場合に文字列結合の処理が二回実行されることになる。
    • 次の処理に渡すための最も重要な変数が$response['file_name']なのでその変数を操作する処理は最後に一回だけ行うようにしてif文によって処理が分散するのを防ぎたい。
  • 2から3から修正する理由
    • 三項演算子を使うことで行数が減っている
    • 三項演算子を使うことで変数の定義し忘れがなくなる。
    • 条件式がシンプルになった。

特に重要だと思うこと

1から2の修正がポイントだと思っている。

今回は条件分岐も一つだけでかつ変数に値を格納するだけの処理なので大した違いにはならず行数が増えた分返って冗長になっているような気もする。

ただし条件分岐のパターンが多く複雑になる場合にはこのように最後に処理を一度だけ行うようにした方がわかりやすくなる。

またもしsaveの対象を条件分岐したい場合などはこのような考え方がより重要になる。saveは最後に一度だけ走らせるようにするべきで直接条件分岐のなかに入れるべきではない。