リーダブルなコードを書くための学習メモです。
クリーンコードとコメント
コメントではなく、なるべくコードで意味を伝える。Gitなどバージョン管理システムの発展によって、変更履歴などコメントを残す必要がなくなったため。また、コメントはプログラミングではないので、冗長に見えたり、日本語の曖昧さによって読み手に負荷を与えかねない。
クリーンコードが優先されないケース
- パフォーマンス優先のケース
- 速度重視の場合(開発速度のこと)
命名規則
- 変数がどのようなデータを保持しているのかがわかりやすい、かつ、長過ぎないことに注意して命名する。
- 識別子とケース(※識別子とは関数名や変数名、クラス名などを識別するためのもの)
- ケバブケースはHTMLのname属性やid、URLのパス名などに使用されることが多い。
name="user-email"
、id="user-name"
など。 - スネークケースは関数名やDBのテーブル、カラム名、定数名に用いられることが多い。
time_calculation
など。-
API_KEY
など大文字をスネークケースで繋ぐことをアッパースネークケース(コンスタントケース)と呼ぶ。
-
- パスカルケース(アッパーキャメルケース)はクラスやインターフェース名に使用されることが多い。
Users
、MyClass
など。 - キャメルケース(ローワーキャメルケース)は、変数名でよく用いる。
userId
、novelName
など。
- ケバブケースはHTMLのname属性やid、URLのパス名などに使用されることが多い。
変数の命名規則
審議値は必ずtrue
またはfalse
になるので、それを正しく表現する。また、基本的には肯定的な命名をする。is~や、英語の過去分詞系を用いると良い(done、completedなど)。
定数の命名規則
参照として用いる値を格納する際には、アッパースネークケースを用いると良い。
関数の命名規則
処理内容がわかるように、なるべく(長くならない程度に)具体性を持たせる。
同じ意味合いの単語は統一する
類似単語例:
start, begin
stop, end
modify, update, change
create, new, factory
find, search
done, finish, complete
deliver, dispatch, send
select, choose
show, display
反対の意味を持つ値は対比のある名前をつける
対比の例:
first <-> last
next <-> previous
create <-> delete
source <-> destination
add <-> remove
show <-> hide
min <-> max
public <-> private
success <-> failure
コメント
最近だとコメントで処理の意図を伝えることは少ない。
Gitなどバージョン管理システムの発展もそうだが、そもそも、「わかりやすいコード」を心がけることに重きをおいた方がいい。
関数名に加えて、中の処理にも気を遣うことが大事。しかし、パフォーマンスに大きく関わる処理の場合、コードの読みやすさよりも、パフォーマンスを重視した方がいい。
- 悪いコメント
- 付加情報のない無意味なコメント
- 冗長なコメント
- 形式的なコメント
メンバ変数1つ1つに対するコメントは基本的には不要。 - 改修履歴コメント
Git lensなど拡張機能で補える。 - バージョン管理のためのコメント
バージョン管理のためのコメントはGitで行うようにする。
- 良いコメント
- 良いコメントというのは、コメントでしか表すことが困難なことを記していること
- TODOコメント
- 使用上の注意
- 使用上の警告
- 公開するライブラリのためのAPIコメント
- コピーライトコメント
- パフォーマンスなどに関わるコメント
for文の方が速いからforeachに書き直して欲しくないときなど。 - 書き方としてややこしくなるのが避けられない処理へのコメント
正規表現の意図を表すコメントなど
マジックナンバー(数値)、マジックキャラクター(文字列)を避ける
Console.log(1200 * 1.1);
上記の1.1
は税率なのですが、このように数値ベタ書きだと、消費税の計算だということに気づけないことがある。なので、以下のように修正する。
const TAX_RATE = 1.1;
console.log(1200 * TAX_RATE);