読んだ書籍
「リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)」
この書籍の対象読者
自分は、エンジニア歴2年弱のアプリエンジニアです。
この本を読む前までは、正直なんとなくコードを書いていて、コードレビューも指摘をされることも少なくは無かったです。
ですが、ふとしたきっかけでこの本を知り、何度も読み返すうちにコードを書く上でも
心構えというか、自分の中に芯みたいなのが徐々にできていった気がします。
ですので自分と同じように経験年数が浅いエンジニアや、年数に関係なく、なんとなくコードを書いている時間のある方や、レビュー指摘を頻繁に受けてしまう方などは一読する価値はあるかもしれません。
また上記のような自覚のない方でもこの書籍はかなり有名なので、この本をバイブルのように扱っているエンジニアも多く、他のエンジニアの方の思考を理解するためにも参考になるかもしれません。
個人的に参考になったこと。
命名法について
関数名や変数名の命名っ地味にめんどくさいですよね、人や、プロジェクトによって志向が変わったりもしますし、、
以下にこの書籍で参考になった部分を記載していきます。
1,より明確な単語を選択する
getより、Downloadやfetchの方が具体的だよねって話です。
またよくあるのが、名前にsizeなどを使いがちですが、具体的にどんな単位のサイズなのか例えば、***:_msのように具体的な単位を使った方がわかりやすことが多々ある。
//悪い例
void getData() {
//////
}
//良い例
void fetchData() {
//こっちの方が具体的
}
2,長い名前が悪いというわけではない
冷静に考えてみれば今のエディタには単語の補完機能がついているので名前が長いこと自体は意外とそんなに問題じゃない。
この指摘を受けて確かに。。とハッとしてしまいました。
名前を変に短くするのにこだわるより、わかりやすいことに執着すべきというのが勉強になりました。
逆にいうと、限定的なスコープでしか使われない部分的な変数などは、短い簡易的な名前でも構わないということ。
要は使い分けが大事ということですね。
ここら辺がとても勉強になりました。
コメントについて
1.読み手の立場となって考える。
コードを書いているときはもちろん自分で書いているので、
なぜそのコードを書いたのか鮮明に理解することができるが、
他人がそうとは限らないし、半年後の自分も例外ではない。
ですので、読み手が質問してきそうなことを想定してコメントを残しておくことが大事。
2.自覚しているコードの欠陥や改善点がある場合はコメントを残しておく。
プロジェクトの都合や、工数などの問題で改善できる点がありながら追加で実装する余裕がない場合などがあると思います。
そんなときはtodo:で未来の自分のためにコメントをしておく。
3.定数に関してコメントを残す。
もちろんなぜその定数を採用しているか自明な場合は必要ないと思う。
しかし、なぜその値を採用しているのかわからない場合は、コメントを残しておくといい。
const tableNumber = 8; ///tableNumber > 2であれば問題ない。
const image_quality = 0.72; ///この値であればファイルサイズや品質の面で妥協できる。
上記の場合など一見必要ないコメントに見えるが、他人からするとなぜこの定数が8や0.72であるべきなのか一瞬考える必要が出てくる。
このコメントがあると確かに親切になる!
関数の書き方について。
1.巨大な関数はできるだけ分割する。
何か複雑なロジックを実装する際にある一つの関数に依存し、何かと関数が肥大しがちでした。(新米エンジニあるある?)
一つの関数は一つのタスクを消費するためにあるべきという原則は言われてみれば当たり前ですが、改めて言われると、ぎっくとしてしまうこともあります。
気をつけねば。
ただし、上記の原則を常に厳守していると無闇に関数の数が増え続けてしまいます。。
2.空行を使って大きなブロックを段落に分ける。
そこで関数の中にも段落を使って大きなブロックごとで分けることで、
責務をブロックごとに分け、可読性を高めるのが有効です。
当たり前ですが、大事なことですね。
void hogeHogeMethod() {
//責務A
print('A');
//責務B
print('B');
//責務C
print('C');
//責務D
print('D');
}
void hogeHogeMethod() {
print('A');
print('B');
print('C');
print('D');
}
3.グローバル変数はなるべく書かない、スコープを縮める。
グローバル変数を多用すると、意図せぬ変更が行われたり、多くのバグの温床になります。
普段からグローバル変数を多用しないように気をつけてはいますが、使用する変数はその変数を使用するスコープ内で宣言するようにし、なるべく他のクラスや関数から呼び出せないような書き方を心がける。
void hogeHoge() {
final hogeNumber = 1;
print(hogeNumber);
}
final hogeNumber = 1;
void hogeHoge() {
print(hogeNumber);
}
まとめ
正直この書籍に書かれていることは基礎的なことが多く、
エンジニアなら一度は聞いたことがあるような内容だと思います。
ただ、本当に大事なことは書籍に書かれていることを当たり前に実行できるかどうかだと思います。
そういう意味では、この書籍を繰り返し読んで習慣にしていくことに意味があるんだと思います。
つまりこの本おすすめってことですね。(回しものではない)