目指せ(略)シリーズ第5弾は、リーダブルコードという本の紹介です。結構有名な本なので、ある程度プログラミングやってる人なら知ってる人も多いと思います。
実際、ウチの会社でもこの本をテーマに勉強会をやったことがありました。ソースコードというものは個人の趣味とかで作るならともかく、仕事とかでは作ったものは長い間使われるのが普通だし、また将来自分以外の人が改修することも考えられるので、それらを踏まえて読みやすくする必要があるわけです。
とりあえず重要なところを15分で抜粋してみます。
2章と3章では主に命名の仕方についてです。
関数や変数の名前は適当につければいいのではなく、ちゃんと意味のある名前を付ける必要があります。
流石にaとかbとか論外な名前を付ける人は今ではそんなにいないとは思いますが、get()とかset()とかでもまだ不十分。例えばgetStringLength()とかsetFilterRules()とか、何をgetするのかとか何をsetするのかがわかりやすくなる名前が望ましいです。
ただ、for文の中のループカウンタとか一時的に使われるものについてはiとかjのような変数名で問題ないです。
4章は改行の位置とかソースの見やすさについてです。
例えば、変な位置に改行が入っていたりいくつもいろんなところでいくつも改行が入っていたりすると違和感を感じる人は多いと思うけど、逆に全く改行がないのも読んでいて疲れます。ちゃんと意味のある区切りで適切に改行を入れるのがいいです。
後はいくつかの変数を並べて書く場合は、ランダムに並べるのでなく重要なものから順番にとかアルファベット順とか意味のある並びにするほうがわかりやすいです。
後、この本では触れられていないけど、インデントも適切に入れるべきです。インデントといえば、あるところでスペース4つなのにあるところでタブだったりすると何かと不便です。どちらかに統一しましょう。最近はスペース4つが主流ですね。
5章、6章はコメントについて。適切なコメントはコードを読むうえで助けになるけど、意味のないコメントやコメントのためのコメントならないほうがいいです。
例えばこんなの。
// $priceを引数として、引数に1.08倍した値を返す function get_price($price) { $price = $price * 1.08; return $price; }
中身見ればわかるっつーの。
// 消費税込み価格計算用関数 function get_price($price) { $price = $price * 1.08; return $price; }
こっちのほうがよっぽどいいです。
7~9章は制御フローとか変数のスコープとかロジック的な話。例えば、if/else文のブロックは肯定的な意味のあるほうを先に処理するとか、式が巨大になったらうまく分割するとか、変数のスコープはなるべく小さくするとか。
ただ、3項演算子は使わないほうがいいとあったけど、うまく使うと便利な場合もあるので、ケースバイケースだと思います。
10~13章は下位問題を抽出して汎用化するとか、1度に1つのことをやるとかコードを小さく保つとか、全体の構成的な話。以前4000行くらいある関数を見たことがあったけど、さすがに読んでいて疲れましたね。
この本に書いてあることはなかなかうなずけるものも多いけど、結局はケースバイケースなところもありますね。一番大事なのは一貫性を持たせることですね。
プロジェクト内でコーディングについての規約があるときはそれは絶対守りましょう。一から作る場合だとどういう風にするか悩むこともあると思いますが、「コーディング規約」でググると結構いろんなものが見つかりますね。