がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

「スマートなコード」ねぇ…

元ネタ
保守性・管理性が劇的に上がる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.結合代入演算子(.=)

ん…まぁ普通。


全体的に「物凄く浅く囓った人が"俺すげぇ!"でやらかしちゃった」記事、って感じでしょうか?
ただ、下手するとこれを「信じちゃう」人がいる可能性があるので、念のために、注意喚起の意味を込めて書いておきます。


…っていうかとりあえず、コードは「動かしてから」書こうよ。
こーゆー記事は特に。


ってなわけで。

初心者の方は結構知らないものが多いのではないでしょうか。コーディング時間短縮のためにも覚えておいて損はありません。ぜひ、マスターすることをおすすめします。

他人にマスターをおすすめする前に、自らのコードとレベルを内省して、勉強し直すことを強くお勧めいたします。