お疲れさまです、みやもとです。
今年はちょくちょくLINEBOTを作ったりしていたのですが、記事を書くたびに間違えては直ししていたことがありました。
変数やメソッドの命名です。
なんとなくで覚えて混同
みやもとは普段仕事でJavaを使っています。
LINEBOTをいじるときはPythonを使います。
この状態のせいなのか、LINEBOTを動かすために書いたコードのメソッド名とか変数名がうっかりJavaっぽくなる。
'''
Pythonのメソッドってキャメルケースだっけ?
'''
def generateAiMessage(message: str, response_mime_type: str, system_prompt: Optional[str]) -> str:
# Gemini AIモデルを生成
genai.configure(api_key=gemini_api_key)
# チャットの応答を生成
model = genai.GenerativeModel(
"gemini-1.5-flash",
system_instruction=system_prompt,
)
# チャットの応答を生成
response = model.generate_content(
message,
generation_config={"response_mime_type": response_mime_type})
return response.text
中途半端に覚えているせいなのか、全部が同じ方式で統一されているならまだしもメソッド名はJavaっぽい、変数名はPythonっぽいみたいにごっちゃになることも多い。
アドベントカレンダーのネタに困ってきたこともあり、ざっくりでも自分で調べてみることにしました。
今回はがんばってオフィシャルのドキュメントにあたってみていますが、かなりかいつまんで解釈しているので不正確なところもあると思います。
あまりにもあかん解釈があればそっとご指摘いただけると幸いです。
Pythonのスタイルガイド:PEP8
Pythonの勉強を始めた際、コーディング標準があるのを見た記憶があります。
おぼろげな記憶ではありましたがどうにかPEP8にたどり着きました。さっそく命名に関するあたりの記述を見てみましょう。
実際に命名に関して定義されているのは「Prescriptive: Naming Conventions」あたりからですかね。
- 小文字のl(エル)、大文字のO(オー)、大文字のI(アイ)を1文字で変数に使うのは紛らわしいからやめよう
- パッケージの名前は小文字を使おう
- クラス名はCapWards式(単語の頭文字のみ大文字)にすること
- 例外もクラスにするのでクラスと同じルール
- メソッド名と変数名は小文字、単語区切りはアンダースコア
- 定数は全部大文字、単語区切りはアンダースコア
ほかにもこまごまありましたが、現時点で私がコードを書く上で必要なのは上記かなと思ったので割愛します。
Javaのスタイルガイド
じゃあ次はJavaだ。
スタイルガイドを探したところ、大きく出てきたのは2つありました。
ひとつはGoogleのGoogle Java Style Guide。
もうひとつはOracleのCode Conventions for the Java TM Programming Language。
どちらも広く使われているようなので、両方見比べながらいこうと思います。
前者は5 Naming、後者は9 - Naming Conventionsを見てざくっとまとめました。
- パッケージ名は小文字とピリオド
- クラスは名詞で、単語の始まりのみ大文字
- メソッドは動詞、単語区切りは最初の文字を大文字にして区別
- 定数は名詞で大文字、単語区切りはアンダースコア
- パラメータ含む変数は名詞で小文字、単語区切りは最初の文字を大文字にして区別
比較と雑なまとめ
ざっと調べたところで表にしてみました。
命名規則はこちらを参考に書いてます。
対象 | Python | Java |
---|---|---|
パッケージ | ドットケース1 | ドットケース |
クラス | パスカルケース | パスカルケース |
例外 | パスカルケース | パスカルケース2 |
メソッド | スネークケース | キャメルケース |
定数 | アッパースネークケース | アッパースネークケース |
変数 | スネークケース | キャメルケース |
並べてみた感じ、とりあえずは変数とメソッド名だけ気を付ければ良さそうですかね。
今後間違えないように気を付けたいと思います。