変数名、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)を使います。
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# | 変数: camlCae 関数: 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 | 停止要求 |
| IsRunning | 運転中 |
| HasError | HasError |
| CurrentPosition | CurrentPosition |
| TargetPosition | TargetPosition |
| FileName | FileName |
| 変数 | 用途 |
|---|---|
| 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文字の名前はプログラムの検索(クロスリファレンス)を著しく困難にします。 |