定期的に見かけるんだけど、今日もふと見かけたので、割と本気で疑問なので一度書いておこうかなぁ、と。
おいちゃん的には「foreachでくるんだらほんの少しだけ楽ぢゃない?」って思うようなコードが割とコピペで書かれているのを散見するので、「なんか理由があるのか」「とくに理由がないのか」興味もありまして、的な。
ん……典型的にわかりやすいのは、例えば、以下。
$data['hoge'] = $awk['hoge']; $data['foo'] = $awk['foo']; $data['bar'] = $awk['bar'];
面倒だから3行しか書いてないけど、これが10行以上とか、わりとざらに拝見。
おいちゃんなら
$params = ['hoge', 'foo', 'bar']; foreach($params as $p) { $data[$p] = $awk[$p]; }
って書くかなぁ。
各項目ごとにちゃんとコメントが入ってるんなら
$params = [ 'hoge', // コメント 'foo', // コメント 'bar', // コメント ];
こげな感じで。
例えば「入れる側にprefixとかsuffixとか入れたい」なんてケースもあると思うのよ。
foreach($params as $p) { $data[$p . $suffix] = $awk[$p]; }
で終了
「いやいやそうじゃなくて配列じゃなくて変数名として使いたい」ってケースも、時々。
コード的にはこげな感じ。
$hoge = $awk['hoge']; $foo = $awk['foo']; $bar = $awk['bar'];
これは
foreach($params as $p) { $$p = $awk[$p]; }
で片付く。$paramsの中身が「ちゃんと変数名としてvalidである必要」はあるんだけどね。
これらの利点って。
単純に「項目が増えたり減ったり」、あと「個々の要素になにかひと手間加えたりしたくなった」時に、地味に便利なんじゃないかなぁ、って思うの。
typoの可能性が「原理的に0になる」し、わずかとはいえ「手間が省ける」のは、その手法を選択する「デメリット」がないのであれば、そっちのほうが楽なんじゃないかなぁ? と。
あと、個人的には「先頭に"処理対象を宣言"しておく」のが、可読性の観点から、読みやすいんじゃないかなぁ、と。まぁ単純に「おいちゃん好み」って言い方にしてもよいのだけど。
なので、この辺やらずにえっちらおっちらコピペしてるコードをみると、「……なんでだろ?」って疑問に思うのですだよ。
ってなわけで、興味があったのでメモり。
「いや実はこーゆー理由があってね」的な話があったら、きっと、コメントに書いてくれる人がいると、おいちゃんは信じてるw