「スマートなコード」ねぇ…
元ネタ
保守性・管理性が劇的に上がるPHPのスマートなコードの書き方12選
http://bulkserver.jp/blog/2014/08/07/php-code/
http://megalodon.jp/2014-0812-1255-23/bulkserver.jp/blog/2014/08/07/php-code/
※えぇなんとなく魚拓を取ってみましたなんとなく。
とりあえず
なるべく手短でスマートなコードの書き方をマスターしたいものです。
ってあたりで、一時期Perlで散見されていたような「大惨事」が想起されるのですが、とりあえず眺めていきましょう。
1.括弧の省略
事故るからするな。
以上。
2.三項演算子
賛否両論ネタ。
個人的には「ネストしなきゃいいじゃん」なんだけど、場所によっては「三項演算子はNG」って規約の所もあって、なんとも難しいところ。
3.switch文
微妙な上に「実際問題として、switch文には糞設計がまとわりつきやすい」ので、これも微妙。
そも「else ifが連打されている」時点で、根本的なミスの可能性、を疑うべきか、と。
4.for文
そもそも例題のような状況でwhileは使わない。
5.変数宣言のみで配列への要素追加
array_pushとかしばらく見かけないのだけど…どうなの?
あと
「この方法ならばキーの有無にかかわらずスマートに書くことができる」この論調はとても危険を感じる。
6.引数のデフォルト値
んと…とりあえず
これは以下のようにできます。
function test ($a = デフォルト値 , $b = デフォルト値 , $c) {
処理
}
できません。デフォルト値を持つ引数は、全部右に寄せる必要があります。
文法エラーをさらりと書くってのも、大分と如何なものか、と。
7.関数でのglobal宣言
関数の中で外部の変数を使う時は引数を設定しますが、それを記述するのは結構面倒です。そこでglobal属性というものを使うことができます。
滅びろ。ぴね。埋まれ。二度と出てくんな。
「global変数をお勧めする」全ての愚者に、最大級の呪いあれ。
8.条件式での変数定義
使うときゃ使うが、中途半端に使うと事故の元。
ちなみに例題の
if($num=strpos($str , 'abc')){
echo '「abc」はこの変数の'.$num.'番目にあります。';
}
これは、とても顕著に事故る例なので注意。
マジでやめろ。
せめてこれを書くんなら
if(false !== ($num = strpos($str , 'abc'))){
echo '「abc」はこの変数の'.$num.'番目にあります。';
}
こっち。
9.文字列への変数挿入
「シングルクオーテーションだとエラーになります」嘘吐きだきつつきだ。
まぁ「文字列内での変数展開」自体は使うが。
10.empty
癖があるから要注意。
11.関数の中で同じ関数の呼び出し
とりあえず「インクリメントの前置と後置の違い」くらい理解してからコードを書け。
っつかむしろ「インクリメントは単体で使え」特に理解していないんならなおのこと。
function test($num){
if($num<10){
$a=$num++;
test($a);
}else{
return false;
}
}
無限ループします以上終了。
12.結合代入演算子(.=)
ん…まぁ普通。
全体的に「物凄く浅く囓った人が"俺すげぇ!"でやらかしちゃった」記事、って感じでしょうか?
ただ、下手するとこれを「信じちゃう」人がいる可能性があるので、念のために、注意喚起の意味を込めて書いておきます。
…っていうかとりあえず、コードは「動かしてから」書こうよ。
こーゆー記事は特に。
ってなわけで。
初心者の方は結構知らないものが多いのではないでしょうか。コーディング時間短縮のためにも覚えておいて損はありません。ぜひ、マスターすることをおすすめします。
他人にマスターをおすすめする前に、自らのコードとレベルを内省して、勉強し直すことを強くお勧めいたします。