くまくまの業務日誌

Markdown記法で徒然に書いてみましょう。

キャメル記法について

キャメル記法はJava用だとは思うけど。

昨今の、コード補完機能を持つIDEで開発する際は、とても便利な規約となる。

問題なのは、英語が得意でない日本人が、「動詞」だの「形容詞」だのそこまで深く理解していない言語で、キャメルを考えようとするから、おかしなものばかりが増えていくことに。

■キャメル記法によるメソッド名の命名規約

キャメル記法でメソッド名を考える場合、先頭は「動詞」となり、以降は名詞、形容詞のパスカル形式になる。先頭の動詞が大切。

例)

void getCurrentDirectory(std::string& currentDirectory);
bool isValidDataPath(std::string& checkPath);

基本的には、「○○する」なので、習ってきた英語の範囲で何とかなりそう。問題なのはI/Oの方向は分かるのだが、表現が多いから結局どれが妥当なのか判断が付かない事。例えば、アウトプットする言葉で連想できるのは、export, out, output, …など。

■■対になるサンプル

  • set 設定する
  • store 格納する
  • write 書き込む
  • output 出力する

などと、なるが「そこにwriteを使う?」という過ち(というか、読む人の主観)も発生する。あくまでイメージだが、以下の言葉と対応する格納先でどうだろうか。

単語 格納先 サンプル 対向
set 変数 setValidNo() get
write ファイル writeCurrentResult() read
store データベース storeResponseData() load
output コンソール outputErrorLog() input
send ネットワーク sendCompressedPacket() recv, receive

■■単独になるサンプル

日本語英語サンプル
計算するcalccalcAverageTemperature()
追加するaddaddFilePath()
探すfindfindInvalidChar()
searchsearchInvalidChar()
置換するreplacereplaceOutputPath()
取り除くremoveremoveAbstractPath()
検証するverifyverifyInputAddress()
checkcheckInputAddress()
決定するapplyapplyUserInput()
decidedecideUserInput()
否決するrejectrejectUserInput()
denydenyUserInput()

■■データベースなどのSQLに対応するメソッド名はそのままSQLライクに作る。

動作 英語 サンプル
取得 select selectCustomer()
追加 insert insertCustomer()
更新 update updateCustomer()
削除 delete deleteCustomer()

■■true/falseを返すメソッドに関しては以下のルールが適用できるか検討する。

動作 英語 サンプル
これは○○○か? is isCurrentData()
これは○○○を持っているか? has hasOddNumber()
○○○ができるか? can canVerifyData()

■■あまりにも名前が短くて、キャメル形式になれないもの

動作 英語 サンプル
コピー copy copy()
移動 move move()
削除 delete delete()

■キャメル記法による変数名の命名規約

変数名は先頭が形容詞となり、以降は形容詞、名詞が続くことになる。先頭の形容詞が重要である。

例)

int currentTemp; // 現在の温度
int previousTemp; // 前回の温度
int averageTemp; // 平均の温度
形容詞 英語 サンプル
現在の current currentRow
前の previous previousRow
最大の max maxValue
最小の min minValue
中央の median medianValue
平均の average averageValue

データベースのフィールド名などは名詞をスネーク記法で表現しているものがあるため、キャメル記法ルールをあきらめなければならない。逆にスネーク記法に出会ったら、それはDBフィールド名であると判断することができるため、混在とも言えないと思われる。