私の参画しているプロジェクトにはコーディングルールが存在せず、
作成する必要を感じたため勉強をしました。
基礎中の基礎ばかりかと思いますが、自身の備忘録としてまとめることにしました。
はじめに
本記事はJavaScriptをベースに記載していきます。
変数や関数の命名について大切なことは「何が入る変数なのか」、
「何をする関数なのか」ということが「一目でわかる」ということだと思います。
ですが、会社やプロジェクトで既にルールが存在するならば、
それに則るのが最も大切です。
変数名
基本的に名詞を使う
後に記載していますが、「~かどうか」のような状態を表す場合以外は名詞を使用します。
const name = "名前";
const id = "ID";
可能な限り具体的な変数名にするのがよいです。
const loginUserName = "名前";
const loginUserId = "ID";
Bool 値の命名
「~かどうか」のような状態を表す場合はis●●やhas●●、can●●などを使って命名します。
let isEmpty = false;
let hasError = false;
このように、ある規則の元で命名される変数や関数は安易に命名される印象があります。
(とりあえずisがついただけのような)よくわからない変数や関数が大量生産されるので、
適切な名前をつけてあげる必要があります。
// NG:何が空なのかわからない
let isEmpty = false;
// OK
let isEmptyUserNameArray = false;
// NG:何のエラーなのかわからない
let hasError = false;
// OK
let hasMailFormatError = false;
否定形は避ける
以下のように否定形の変数名は避けましょう。
関数名も同様です。
let isNotEmpty = true;
let hasNotError = true;
関数名
先頭は名詞?動詞?前置詞?
何れのパターンもあり得ます。
■名詞が先頭パターン
処理というよりプロパティ系の場合に定義します。
今のところ私はこのパターンの関数は実装したことがありません。
function values() {
// 処理
}
■動詞が先頭パターン
一般的なパターンで処理を表す場合に定義します。
function createSession() {
// 処理
}
■前置詞が先頭パターン
動詞が先頭パターンで、先頭の動詞が省略可能な場合に定義します。
// convertが省略されている
function toString() {
// 処理
}
名前の長さ問題
エディタが補完してくれるので気にする必要はないです。
「何をするのか」が適切に表現されることの方が大切です。
処理内容に沿った命名
用途に応じた名前ではなく、処理に応じた名前を付けましょう。
例として数値を検索パラメータとして使用するために0埋めする必要があるとします。
// NG:用途で命名されており、単純に0埋めしたい場合に適していない名前となっている
function formatSearchParamForNumber() {
// 0埋めする処理
};
// OK
function formatZeroPadding() {
// 0埋めする処理
};
最後に
私自身これまでコーディングルールを意識することができていなかったため
記載内容の誤りやこうするべき、ということが含まれるかと思います。
おかしな点がありましたら今後のためにもご教示いただきたいです。
参考
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
真偽値を返す関数のネーミング
モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう