2014.11.06 ひかる
こんにちは。ひかるです(* Ŏ∀Ŏ)
世の中はもうクリスマスです。早い。早いよ。
10月ってあったっけ?ってぐらい早かったです。10月もっとがんばれ。
そんな10月、約1月近くたっちゃいましたが、
10/11(土)に開催されたPHPカンファレンス2014についてです。
今年はLTさせていただいたので、そのLTについてお話しします。
と、まぁ、「なんで今更ブログに?」と思いますよね。
タイミング逃したのもあって、ブログはあきらめよう。。とおもってたのですが...
まぁ、まぁ、これを見てみてください。
slideshareにあげた、PHPカンファレンス2014での私のLT資料です。
24,086views (2014/11/6 15:00時点) て。
予想以上の数字に3度見してしまい、とりあえず急いで記事を書き始めてみました。
どこで晒されてるの??わたしどこで晒されてるの???震える。
親切なかた、アクセス元、どこかおしえてください。
そんな気持ちで、内容にはいっていきます( ´˂˃` )
▼LTスライド
▼当日の動画
「PHPer女子が語る!こんなコードを書くヒトはモテない~きほん編~」
というタイトルでLTしました。
タイトルで釣りあげてる感あります。
直球にいうと、『クソコード』のお話です。
個人的にいやだなぁ〜と感じたソースコードについてお話ししました。
資料の中で紹介した3つのコードについてまとめてみます。
$himoteCode = new HimoteCode(); $aList = $himoteCode->getListA(); $bCount = array(); foreach ($aList as $key => $row) { array_push($bCount, $row['b_count']); }
変数名や、関数名など、実装する人のネーミングセンスが問われるところ。
上記の例だと、ちょっとわかりにくかったかな〜って感じなっちゃいましたが。
$aList だとか、$bCount だとか、
「"a"ってなに?なんの略?なんのリストなの?"b"って???(つ﹏<)・゚。」
ってなっちゃいますよね。私はなります。
名前だけで「何のための変数なのか」、「何をする関数なのか」がわからないと、
意味を理解するまでソースコードを読み解いていく必要があるです。
よけいな手間をかけたくないプログラマさん方のためにも、
誰がみてもわかりやすい名前をつけましょう٩( 'ω' )و
今回でいうと、"a"や、"b"はきっと何かの略なのでしょうね。わかりません(;ω;`)
foreach ($list as $key => $item) { foreach ($item as $id => $row) { foreach ($row as $name => $value) { ・・・ } } }
みんな大好き foreach ちゃんです。一日に絶対1,2個書いている気がします。
指定した配列に関してループ処理をしてくれる子です(๑ơ ₃ ơ)♥
で、今回の例だと、そのforeachがいっぱい書いてありますね。
$list という配列をforeachでまわして、$item に中身が代入されます。
さらにその $item が配列だったらしく、foreach でまわします。
さらにさらに $row も配列みたいですね。foreach です。
うん、ちょっと多いです( 'д'⊂彡 ))Д´)
人の目じゃ追うのが結構つらいです。
確かにいっぱい使いたくなっちゃうのですがね。。
と、foreachについては、このスライドをおすすめしますです!
初めてPHP勉強会に言ったとき聞いたお話でした。おもしろかった٩( 'ω' )و
懇親会とかツイートとかで、「foreachつかっちゃだめなんかー!」
ってコメントをよく見かけたのですが、
つかっちゃだめってことじゃないです!むしろいっぱいつかったらいいじゃない!
ネストしすぎるのはよくないね、ってお話でした。
if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;
この例だけ、私がテキトーに考えたモノではありませぬ。そもそもPHPじゃないです。
いい例があったので、参考にさせていただきました。
このコードについては「iOS7 SSLバグ」とかでぐぐってみると、いろんな解説があるはずです。
▼AppleがiOS7.0.6で修正したSSLバグの簡単な解説
http://qiita.com/tomohisaota/items/e6995e89b843e1295c08
foreachのお次は、if文 についてです。これもいっぱい書きますね。
if文の書き方ですが、
if (true) { ... }と、中括弧で囲う書き方と、例のように中括弧ナシで一行で済ます書き方があります。
中括弧がないと、2行とかで済むし、こっちのほうがスッキリしていいんじゃない?って思っちゃうのですが。。。。
iOS7のバグが良い例で、非常にバグが生まれやすいです=≡Σ((( つ•̀ω•́)つ
また、後からの改修とかでif文の中身が1行以上になってしまった場合など、
中括弧を書き加えなきゃいけない、っていう後々の手間もあったりします。
あと、コーディング規約的にも、{}は必須となっていることのほうがほとんどです。
PHPのコーディング規約については 『PSR』とかでぐぐると日本語訳とかとかでてきます。
バグが生まれやすいコードはなるべく書かない!こわいですからね(*´∩ω・`)゚+.゚
てな感じで、個人的にピックアップして、3つほど紹介しました。
お話しした実際の会場はめっちゃめちゃヒトがいて、ど緊張。
結構雑めに解説してしまったので、もっと早めにまとめておくべきでした。
間あいてしまいましたが、以上PHPカンファレンスについての記事でした。
改めて、実行委員の皆様、当日スタッフのみなさま、準備等おつかれさまでした!!
そして、親切なかた、viewのアクセス元をおしえてください。震えてます。
以上、ではでは٩(๑′∀ ‵๑)۶•*¨*•.¸¸♪