変数名の悩み

変数名、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/TypeScriptCamelCasePascalCaseUPPER_CASEMDN / Standard
Pythonsnake_casePascalCaseUPPER_CASEPEP 8
JavacamelCasePascalCaseUPPER_CASEOracle Code Conventions
C#変数: camlCae
関数: PascalCase
PascalCasePascalCaseMicrosoft 命名ガイドライン
C++snake_caseまたはcamelCasePascalCaseまたはsnake_caseUPPER_CASE組織(Google等)による
GocamelCseまたはPascalCase(クラスなし)camelCaseまたはPascalCaseEffective Go

変数名の例

一般的
変数用途
cntFOR文のカウンタとか
Index配列の要素番号を指定するときなど
Offset配列のデータのオフセット位置からの要素番号を指定するとか
Request何かの要求を受けたときのフラグ
run実行中とか実行指示とか
FileNameファイル名
モーション系なら
変数用途
StartRequest起動要求
StopRequest停止要求
IsRunning運転中
HasErrorHasError
CurrentPositionCurrentPosition
TargetPositionTargetPosition
FileNameFileName
通信系なら
変数用途
connection接続要求
connected接続中
sendMessageメッセージ送信
sendData送信データ
responceData受信データ
sndDat送信データ(BYTE配列)
rcvDat受信データ(BYTE配列)
sndSize送信サイズ
rcvSize受信サイズ

避けたい変数名

やめたい変数名
変数改善案理由
flag1MotionStartFlag後から見たときに何のフラグか分からない
W0_00, D100物理アドレスではなく、機能名で命名 物理アドレス(WやD)を意識した命名は変数プログラミングのメリット(メモリの自動割り付け)を台無しにします。
input, output, errorEmargencyStopSw または E-stopシステム変数や命令語と混同し、コンパイルエラーやバグの元になります。
単語1文字のみ f, d, tなどIs_Filledループカウンタ(i や j)を除き、グローバル変数で1文字の名前はプログラムの検索(クロスリファレンス)を著しく困難にします。

関連ページ:

この記事へのコメント