リーダブルコード
書籍:https://www.amazon.co.jp/リーダブルコード-―より良いコードを書くためのシンプルで実践的なテクニック-Theory-practice-Boswell/dp/4873115655
本書籍は読みやすいコードの書き方について書かれている。
読みやすい変数名の付け方や関数の書き方等、迷われたことがある方は読んだ方が良い。
どこかの記事ではリーダブルコードを読んだことが無いエンジニアはエンジニアでは無いと
書かれていたので、エンジニアであれば一度は読んでおきたい書籍である。
優れたコードとは
優れたコードとは、理解しやすいコードである。
本書では、読みやすさを「他の人が最短時間で理解できる」と定義している。
ここでの「他の人」は半年後の自分も含まれている。
名前に情報を詰め込む
名前は短いコメントである。
良い名前を付けることができれば短時間で多くの情報を伝えることができる。
理想は、名前を見ただけで情報を読み取れるようにすることである。
明確な単語を選ぶ
多くの情報を伝えることができる単語を選ぶ必要がある。
例えば、getは明確な単語ではない。getPage()という関数があったとしても、ページをどこから取ってくるのかが明確ではない。
インターネットからページを取ってくるのであればFetchPage()やDownloadPage()の方が明確である。
このように、より多くの情報を伝えることができる単語を選ぶべきである。
汎用的な名前は避ける
tmp,retval,fooのような名前を付けるのは良くない。
「明確な単語を選ぶ」でも書いたように、tmpからは明確な情報がほとんど伝わってこない。
コードを読む人が短時間で理解できるように、エンティティの値や目的を表した名前を付けるべきである。
しかし、tmp,retval,fooに関してそれ相応の理由があれば使用しても良い。
例えば、「生存期間が短くて一時的な補完が最も大切な変数」であればtmpを使用しても良い。
名前に情報を追加する
名前は出来るだけ具体的に付けた方が良い。
そのため、絶対に伝えたい情報があれば単語を変数名に追加する。
例えば、16進数の文字列を持つ変数には"hex"を名前に追加する。
名前の長さを決める
変数名の長さを決めるのはスコープの大きさである。
スコープが小さければ、変数は短い名前でも良い。
理由は、コードを理解するのに必要な情報がそばにあるからである。
スコープが大きければ、長い名前を付けて多くの情報を読み手に伝えた方が良い。
コメント
コメントの目的は書き手の意図を読み手に知らせることである。
コメントは簡潔かつ正確に書く。
コメントするべきではないこと
コメントを読むとその分だけコードを読む時間が無くなる。
つまり、コメントにはそれだけの価値を持たせるべきである。
価値のないコメントとは
コードからすぐに分かることをコメントに書かない。
ひどい名前の変数はコメントを付けるのではなく、名前を変えるべきである。
自分の考えを記録する
コードを理解するためのコメントだけでなく、大切な考えも記述する
コードに欠陥があるときにコメントを書いておく。
TODO:あとで手を付ける
FIXME:既知の不具合がある
HACK:あまりきれいじゃない解決策
といったものがある。
読み手の立場になる
プロジェクトを知らない人に、コードがどのように見えるかを想像することが重要である。
質問されそうなことを想像する
コードを客観的に見て、疑問に思うところがあればコメントを付ける。
ハマりそうな罠を告知する
コードを客観的に見て、「どんな風に間違えて使う可能性があるか」を自問自答する。
コードを使うときに直面する問題を前もって予測しコメントを付ける。
全体像が把握できるコメントを付ける
新しくチームに入った人が全体像を把握するために、
「このファイル、クラスはアプリケーションの○○機能である」とコメントを付ける。
コードが読みやすくなるように変数を使う
変数を適当に使うと、コードは読みにくくなってしまう。
適当に使うとは、例えば以下の三点である
変数が多いと変数を追跡するのが難しくなる
変数のスコープが大きいとスコープを把握する時間が長くなる
変数が頻繁に変更されると現在の値を把握するのが難しくなる
不要な変数を削除する
now = datetime.datetime.now()
root_message.last_view_time = now
このnowを使う意味は無い。理由は以下である。
・ 複雑な式を分割していない
・ より明確になっていない。datetime.datetime.now()のままでも理解できる
・ 一度しか使ってないので重複コードの削除になっていない
つまり、nowという変数がなくてもコードは理解できる。
変数のスコープを縮める
変数のことが見えるコード行数をできるだけ減らすことが大切である。
たくさんの変数が見えてしまうと、一度に考えなければならない変数の量が増えてしまう。
変数のスコープを1/2に縮めることができれば、スコープに存在する変数の数は平均して1/2になる。
変数は一度だけ書き込む
変数を操作する場所が増えると、現在値の判断が難しくなる。
そのため、「変数は一度だけ書き込む」ことを意識した方が良い。
永久的に変更されない変数は扱いやすい。
constやfinalなどのイミュータブルにする方法を使えばコードを理解しやすくなる。
感想
本記事はリーダブルコードの一部しか紹介していない。
優れたコードを書きたいのであれば、リーダブルコードを読むことをお勧めする。
私はまだまだ知識不足なので、コードを書くことで手一杯である。
少しずつ本書に書かれていたことを意識していき、優れたコードを書けるように成長していきたい。
まずは、本記事に書いたことを意識してコードを書こうと考えている。
名前の付け方に関しては、英語の知識が無さすぎるので英単語も勉強していこうと思う。