リーダブルコードの基本原則 - チーム開発で役立つ理解しやすいコードの書き方
未来の自分や他人が理解しやすいコードを書くためのポイントをまとめる。
簡潔と冗長
次の2つのコードは、同じ動作をする。
// 簡潔
for (const value of arrayList)
print(value);
// 冗長
var i = 0;
while (i < arrayList.length) {
print(arrayList[i]);
i++;
}
1つ目の例では、1-1.js
のほうが簡潔かつ読みやすいと感じられるかもしれない。
また、次の二つのソースコードもそれぞれ同じ動作をする。
// 簡潔
return (value >= 1) ? value * value : ( ( value === 0) ? 'Zero' : ( ( value === null || value === undefined ) ? 'Invalid Value' : value ));
// 冗長
if (value >= 1) {
return value * value;
} else if (value === 0) {
return 'Zero';
} else if (value === null || value === undefined) {
return 'Invalid Value';
} else {
return value;
}
2つ目の例では三項演算子を使った 2-1.js
は確かに「短い」ですが、人によっては
2-2.js
のほうが条件がわかりやすいと感じる場合がある。
つまり、簡潔であることが常に読みやすさに直結するわけでも、
冗長であれば必ず読みやすいわけでもない。
読みやすいコードとは
理解しやすいコードを書くには、まず読みやすさを意識することが重要。
ここで、リーダブルコードの考え方を1つ紹介します。
鍵となる考え
コードは他の人が短時間で理解できるように書かなければいけない。
『リーダブルコード』(Boswell, Foucher, 2012, p.3)
未来の自分、例えば半年や1年後、3年後に自分で書いた身に覚えがないコードを見て理解ができるか。他の人にコードを見せたときに、より短時間で理解できるようなコードかが重要になると思う。
処理が早くなれば確かにいいことがあるかもしれないが、メンテナンス性が低下する場合が多い。簡潔しながらも適度に冗長にする能力が必要となる。
コードは短い方が良いが。
Aクラス(100行のコード)とBクラス(1000行のコード)では、Aクラスの方がコードを理解するまでにかかる時間は短い。
だが、例外も多く存在する。例えば、以下のコード。
// 1行で書く
const isSelfAttack = (game?.player?.id && game?.attacker?.id) ? (game.player.id === game.attacker.id) : (game.player ?? game.attacker ?? null);
以下のように複数行で書く方よりも理解する時間がかかることが多い。
// 複数行で書く
const player = game.player;
const attacker = game.attacker;
const isSelfAttack = player && attacker && player.id === attacker.id;
また、コメントをつけることで、コードが長くなるがより理解しやすくなることもある。
function sumFast(n) {
// 1からNまでの合計を求める
return ( n * (n + 1) ) >> 1;
}
コードは短くするより、理解するまでの時間の方を短くすることが大切。
参考文献
- 『リーダブルコード』(Dustin Boswell, Trevor Foucher 著、角征典 訳、オライリー・ジャパン、2012年)