命名規則|変数名・Function・FBの付け方
変数名の悩み
変数名、POU、ファンクション、ファンクションブロックの名前は非常に悩ましい課題です
名前を決めるまでに数分悩むこともたびたびあり、悩んだ挙句にプログラムを作っているうちに同じような名前を付けなきゃならなくなって変更を迫られたりと、悩ましいことこの上ないです
変数名の付け方
パソコンのプログラムを作っている人たちがどのような付け方をしているかを見てみるとハンガリアン記法というのが目に付きます
ハンガリアン記法にはシステムハンガリアン記法とアプリケーションハンガリアン記法の2種類があり近年はシステムハンガリアン記法よりも、変数の意味を表現する命名が好まれる傾向があります。
どんな名前を付けてもいいのですが、先人の人々のサンプルをいっぱい見てそれっぽい変数名を真似したほうがよさそうです
システムハンガリアン記法
先頭にデータ型などを付けて変数名とします
例えば、intValue, strName, dPiなど
アプリケーションハンガリアン記法
バグをバグっぽく見せる方法なので、変数名に分かりやすい意味を付けるのを心がけます
例: Row, Col, MathPi, FileWrite, CurrentPositionなど
例えば、三角形の面積 底辺×高さ/2 を求める時に(1)とするところを(2)としてしまった場合に間違いを気づきやすくなります
Area=BaseLength*height/2 ...(1)
Area=BaseLength*Angle/2 ...(2)
よく使われるルール
単数形と複数形
配列などには複数形(例: users)、単体のデータには単数形(例: user)を使います。
真偽値(Boolean)
true/false を持つ変数は、is、has、can などを先頭に付けます(例: isActive, hasPermission)。
省略形
switch を sw、SolenoidValve を sol、count を cnt のように広く認知された省略形にするのは一般的ですが、極端な省略(u_n など)は避けます。
こんなサイトもあります:
変数名の書き方
キャメルケース
ラクダのコブのようにCamelCase, RowCount, ColIndexのように名称の先頭の一文字を大文字で複数の文字を繋ぎ合わせる書き方をします
近年は変数は小文字、クラスは大文字から始まる書き方が多いです
スネークケース
蛇のようにSNAKE_CASE, MAX_ROW, LIMIT_HIGH_VALUEのように名称を大文字で書いてアンダーバー(_)で複数の文字を繋ぎ合わせる書き方をします
定数にはこの書き方をする人が多いようです
高級言語で使われる言語別の推奨スタイル一覧
| 言語 | 変数/関数 | クラス名 | 定数 | 公式・標準規約 |
|---|---|---|---|---|
| JavaScript/TypeScript | CamelCase | PascalCase | UPPER_CASE | MDN / Standard |
| Python | snake_case | PascalCase | UPPER_CASE | PEP 8 |
| Java | camelCase | PascalCase | UPPER_CASE | Oracle Code Conventions |
| C# | 変数: camelCae 関数: PascalCase | PascalCase | PascalCase | Microsoft 命名ガイドライン |
| C++ | snake_caseまたはcamelCase | PascalCaseまたはsnake_case | UPPER_CASE | 組織(Google等)による |
| Go | camelCseまたはPascalCase | (クラスなし) | camelCaseまたはPascalCase | Effective Go |
変数名の例
| 変数 | 用途 |
|---|---|
| cnt | FOR文のカウンタとか |
| index | 配列の要素番号を指定するときなど |
| offset | 配列のデータのオフセット位置からの要素番号を指定するとか |
| request | 何かの要求を受けたときのフラグ |
| run | 実行中とか実行指示とか |
| FileName | ファイル名 |
| 変数 | 用途 |
|---|---|
| startRequest | 起動要求 |
| stopRequest | 停止要求 |
| emergencyStop | 非常停止 |
| swEmergencyStop | 非常停止ボタン |
| isRunning | 運転中 |
| currentPosition | 現在位置 |
| targetPosition | 移動指示位置 |
| 変数 | 用途 |
|---|---|
| connection | 接続要求 |
| connected | 接続中 |
| sendMessage | メッセージ送信 |
| sendData | 送信データ |
| responceData | 受信データ |
| sndDat | 送信データ(BYTE配列) |
| rcvDat | 受信データ(BYTE配列) |
| sndSize | 送信サイズ |
| rcvSize | 受信サイズ |
避けたい変数名
| 変数 | 改善案 | 理由 |
|---|---|---|
| flag1 | MotionStartFlag | 後から見たときに何のフラグか分からない |
| W0_00, D100 | 物理アドレスではなく、機能名で命名 | 物理アドレス(WやD)を意識した命名は変数プログラミングのメリット(メモリの自動割り付け)を台無しにします。 |
| input, output, error | EmargencyStopSw または E-stop | システム変数や命令語と混同し、コンパイルエラーやバグの元になります。 |
| 単語1文字のみ f, d, tなど | Is_Filled | ループカウンタ(i や j)を除き、グローバル変数で1文字の名前はプログラムの検索(クロスリファレンス)を著しく困難にします。 |
