「リーダブルコード」で得た学び3選
はじめに
こんにちは!株式会社スペースマーケット バックエンドエンジニアのShotaです。
今回のテーマは書籍「リーダブルコード」です。
「リーダブルコード」は、多くの若手エンジニアや初学者におすすめされる有名な本です。
今回は初めて読んでみて得た学びをご紹介したいと思います。
1.理解しやすいコードを書くこと
「コードは理解しやすい状態でなればなけない」は当書の根底にある考え方です。
これまでチーム開発よりも個人開発に割く時間が長かったため、人に読まれることを意識したコードを書けていませんでした。
特にプロダクトの完成に追われている時は、動くコードを書くことにばかり意識が向きがちでリファクタリングが疎かになっていました。
当書では「適切な改行を入れる」「適切なコメントを記入する」などの基本的な改善ポイントを具体的に学べました。今後は動くコードやテストを書いた後に、リファクタリングに取り組んでいきます。
"コードは他の人が最短時間で理解できるように書かなければいけない。"
"理解しやすいコードというのは、優れた設計やテストのしやすさにつながることが多い。"
2.制御フローを読みやすくすること
条件やループの記述は読みやすく、自然な形で記述することが大切だと分かりました。
例えば以下の2通りの記述を考える場合
① if (length >= 10)
② if (10 <= length)
①の方が読みやすいです、これは当書で紹介された[左側:調査対象/右側:比較対象]に従っています。
この書き方であれば読んだ時に「lengthは10以上だ」とすぐ分かりますね。
また以下のようなif/elseがある場合
①
if (a == b) {
// 処理A
} else {
// 処理B
}
②
if (a != b) {
// 処理B
} else {
// 処理A
}
どちらの書き方が望ましいか迷う場面がありますが、その場合は当書で示された
・条件は否定形よりも肯定形を使う。例えば、if (!debug) ではなく、if(debug) を使う。
・単純な条件を先に書く。if とelse が同じ画面に表示されるので見やすい。
・関心を引く条件や目立つ条件を先に書く。
の3点を考えて選択するのが良いです。
この基準は条件分岐を考える際に取り入れていきたいと考えました。
分かりやすいアンチパターンでは
const isNotFlag = true
if (!isNotFlag) {
// isFlagの時の処理...
}
が挙げられます。これでは「isNotFlagがtrue?もしisNotFlagではないなら...?」と混乱します。
コードを書いている時はもちろん、書き終えた後にも見直しをして
読みづらいコードにならないようにします。
3.命名テクニック
コードを書いていると、変数や関数に対して命名をする場面が多くあります。
命名に関しては
名前には情報を詰め込む、名前は短いコメントだと思えばいい
とされています。
では、情報を詰めきれていない命名とはどのようなものでしょうか。
以下のアンチパターンを考えました
def Process001()
def ExecuteProcess093()
このように連番になっていたり、「Process」など抽象的な言い回しでは
名前を通して情報を伝えられません。
ユーザー利用料の税込価格を計算する処理なら
def calc_user_fee_including_tax()
このように命名するのが良いということです。
そのほか、言い換えでも具体例が示されていました。
find→search
make→add
のように英語命名ならではの言い換えも活用することで、意図が伝わりやすくなります。
また、引数に単位を追加することは読みやすさやバグ防止に貢献すると分かりました。
CreateCache(int size) → CreateCache(int size_mb)
サイズの単位がMBであることが明記されたことで単位の誤認によるミスも防げます。
命名の参考になる記事
ネーミングツール
最後に
今回は「リーダブルコード」で得た学びをご紹介しました。
読みやすく人から理解されやすいコードを書くことは、開発メンバーのためにも、自分のためにもなります。
今後はコードに触れるたび「この命名/コメント/ロジックで本当にいいのか?」と考えて
人に意図が伝わるコーディングをしていきます。
採用情報
株式会社スペースマーケットでは、働く仲間を募集中です!
ぜひこちらから採用情報をご覧ください💻
新卒採用
スペースを簡単に貸し借りできるサービス「スペースマーケット」のエンジニアによる公式ブログです。 弊社採用技術スタックはこちら -> whatweuse.dev/company/spacemarket
Discussion