「その無名関数本当に必要なの?」という指摘。
僕はこの指摘をもらって至極まっとうだと思ったのですが、みなさまはいかがでしょうか。
ざっくりですが、こんな感じで、値のうちマッチしたものだけを抽出し処理をするような 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()
, 無名関数等々使いドコロによってはいいのでしょうが、読みやすさも大切かなと。
(メモリ使用量とか処理速度の差異とか出してないから、状況によっては違うのかな・・・)
読みやすいコードを書いていきたいので、書いてみました。 ご意見あれば是非!ではでは!
Dustin Boswell,Trevor Foucher オライリージャパン 2012-06-23
NECラーニング株式会社 内山 祥恵,NECラーニング株式会社 棚橋 英之,株式会社マルチメディアスクール・ウェーヴ インプレスジャパン 2012-09-14