書籍「リーダブルコード」を読もう (読みやすいコードについて考える) (1)
- リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- Dustin Boswell Trevor Foucher 須藤 功平
- オライリージャパン 2012-06-23
by G-Tools , 2012/08/22
PhpStorm(Php, JavaScriptなど用のIDE) のEAP版(正式リリースではありませんが、最新機能が使える)を使い始めました。メソッド補完が前より強力になってる気がします。
最近、リーダブルコード を読んでいます。読みやすいコードとは何か、日々考えていることとはいえ、「あなたは読みやすいコードが書けていますか?」と聞かれるとあまり自信がない私です。この書籍は読みやすいコード書くための指針を提供してくれます。今日は、この本の中から、気になる部分を紹介していきます。
1章 理解しやすいコード
書籍全体の序章となる1章では、読みやすいコードを作るための詳細には入らず、読みやすいコードがなぜ必要なのかを説明する章になっています。4ページの短い章なので、書籍を買うか迷った方はとりあえずここを立ち読みしてみるのがいいと思います。
2章 名前に情報を詰め込む
変数名、メソッド名、定数名など、プログラマーがつけるあらゆる名前について考える章です。
2.2 tmp や retval などの汎用的な名前を避ける
これを読んで、いままでの書き方を改めた方がいいな、と思いました。さすがに tmp や foo はまず使いませんが、関数の戻り値を代入する変数に result/res は使ったことがあります。でも、中身が何か、変数名でわからないのが問題です。
次のループイテレータはやったことがないテクニックでした。ループの入れ子があるときのインデックス変数にはi, j, k.... を習慣として使いますが、間違えやすいので、何のインデックス変数かわかるようにしましょう、という話です。以下の2つのサンプルコードの違いです。
$groups_count = count($groups);
for ($i = 0; $i < $groups_count; $i++) {
$users_count = count($groups[$i]);
for ($j = 0; $j < $users_count; $j++) {
// 何か $groups[$i][$j] に対して処理する
}
}
$groups_count = count($groups);
for ($gi = 0; $gi < $groups_count; $gi++) {
$users_count = count($groups[$gi]);
for ($ui = 0; $ui < $users_count; $ui++) {
// 何か $groups[$gi][$ui] に対して処理する
}
}
後者のコードは、$gi, $uiみたいに、どの配列のインデックスか分かるようになっています。 ユーザー配列のインデックスならuser_id または ui グループなら group_i または gi という話です。そうしておけば、gi と ui が入れ替わっていたときにバグの存在に気づきやすいというわけですね。
3章 誤解されない名前
3.1 例: filter()
filter($condition) というメソッドがあるオブジェクトにあり、条件を引数として受け取るとする。このメソッドは、条件に当てはまるものを抽出するのか、条件に当てはまるものを除外して取り出すのか、名前からは判別できない、という話。改めて考えさせられると、いつも自分が使っている意味はどちらか一方だと思いますが、別の人は違うかもしれない、と気づかされます。代替案も書いてありますが、知りたい場合は本をお読み下さい
まとめ
まだほんの序章ではありますが、読んでいて、初めて知ったことや、考えさせられた部分を紹介しました。 技術系書籍の中では比較的サクサク読める本だと思いますので、是非手にとっていただけたらと、思います。