命名規則
プログラムを作成する際に必ず必要となるのが名前を決める作業です。
変数名の場合は「変数の型 変数名」
として宣言するのが一般的で変数名はユーザーが「自由」に命名できます。
「自由」というのはとても厄介なもので明確なルールが定義されていない現場や
ルールは定義されていてもそのルールをチェックする意識が低い現場では
色々な記載が乱立しプログラムを見た時の可読性を下げてしまいます。
現場にルールがあるならばそれを順守。
ない場合は以下のルールにもとづいて命名するのがおススメです。
1.「具体的かつ限定的かつその変数を使って何をするか」をポイントとして命名する。
i,j,tempなどはNG。変数名をみて何を意味するのかわかる名前がベスト
例)商品(goods)ではなく、夏セール品(summer_sale_goods)、冬のセール品(winter_sale_goods)、在庫品(stock_goods)、発送品(delivery_goods)など
2.変数名、関数名、定数など状況に応じて命名規則を使い分ける
一般的な命名規則の一覧です。
キャメルケース(ローワーキャメルケース)
文字の先頭は小文字、2単語目以降は大文字。
関数名、関数の引数、インスタンス化されたすべての変数
例)summerSaleGoods
パスカルケース(アッパーキャメルケース)
各単語の先頭文字は大文字。
クラス
例)SummerSaleGoods
スネークケース
すべて小文字で各単語を1個のアンダースコア(_)で区切る
関数内の変数
例)summer_sale_goods
ケバブケース(チェーンケース)
各単語を1個のハイフン(-)で区切る。
htmlで主に使用されるだけなので、他では使いません。
例)summer-sale-goods
大文字アンダーバー連結
大文字のみでアンダーバーでつなぐ。
定数、グローバル変数
例)SUMMER_SALE_GOODS
先頭アンダーバー
先頭をアンダーバー(1つまたは2つ)で始める。
プライベート変数(c言語では使われるがJavaでは使われない事が一般的)
例)_summer-sale-goods
3.プログラミング由来の名前は使用しない。
例)int intGoods = 0;
intであることは業務の目的や意図とは無関係なので名前を長くしてしまうだけで可読性が落ちます。
型を明記しないとプログラミングの際にバグを作りこみやすくなるのでは?
と思う方もいるかもしれませんが、型変換に関してはコンパイラがチェックしてくれるので気にする必要はありません。
※組み込み系などの現場ではプログラミング由来の場合はあります。現場のルールに合わせましょう。
4.名前を連番で使用しない。
例)goods001、goods002、goods003
命名したタイミングでは問題ないかもしれませんが、可読性も低いうえに
連番性が崩れるような仕様変更があった際に修正量が増え、抜け漏れが発生しバグの原因となります。
5.場所にそぐわない不自然な命名をしない
例としてセール製品を扱うクラスを作成します。
public class SaleProducts
{
static int MAX_ITEM_COUNT = 99;
List<Product> products;
Prodcuts(){
products = new ArrayList();
}
SaleProduts add(Product newProduct){
if( products.size() == MAX_ITEM_COUNT ){
throw new RuntimeException("これ以上、セール製品は追加できません。");
}
final List<Product> adding = new List<>(products);
adding.add(newProduct);
return new SaleProducts(adding);
}
}
セール製品群に1件、セール製品を追加するさいにaddメソッドを呼び出しています。
なぜaddとい名前なのか?に関して「英語表現したときに違和感がないか?」を考えると良いです。
仮にaddをproductAddと命名した場合
英語で表現すると
「Products add product」=「製品が製品を追加」となります
「Products add」= 「製品追加」です
わかりやすさは一目瞭然だと思います。
クラス名からメソッド名までを英語でつなげた際に違和感がないか?
を観点に命名しましょう。