読者です 読者をやめる 読者になる 読者になる

カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

レビューで、その無名関数ほんと必要なの?という指摘を受けたことはありますか

「その無名関数本当に必要なの?」という指摘。

僕はこの指摘をもらって至極まっとうだと思ったのですが、みなさまはいかがでしょうか。

ざっくりですが、こんな感じで、値のうちマッチしたものだけを抽出し処理をするような array_filter()array_map()

$arr = ['key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3'];
$extracted = array_filter($arr, function($val) {
   return $val === 'val3';
});

// 更にarray_mapで複雑なことするとか
$ucfirst_extracted = array_map(function ($v) { return ucfirst($v); }, $extracted);
var_dump($extracted);

こう結果が返ってきますね。

array(1) {
  'key3' =>
  string(4) "Val3"
}

でも、以下のほうが読みやすいじゃんという話です。

$arr = ['key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3'];

$ucfirst_extracted = [];
foreach ($arr as $key => $elem) {
  if ($elem === 'val3') {
    $ucfirst_extracted[$key] = ucfirst($elem);
  }
}

そのとおりだと思ったのでした。 特に array_map() などと組み合わせると暗号文の匂いがしてきて、読みやすいとはとても言えません。

array_filter(), array_map(), 無名関数等々使いドコロによってはいいのでしょうが、読みやすさも大切かなと。 (メモリ使用量とか処理速度の差異とか出してないから、状況によっては違うのかな・・・)

読みやすいコードを書いていきたいので、書いてみました。 ご意見あれば是非!ではでは!