ワテの場合、暇な時にたまに某大型匿名掲示板のプログラミング関連のスレッドを見る事がある。
下らない話題も多いが中には役立つ情報も有るからだ。
先日、
クラス名・変数名に迷ったら書き込むスレ。Part27 [無断転載禁止]©2ch.net
を見ていて、こんな話題で盛り上がっていた。
position, start, end を組み合わせて変数を作る場合にどっちが良いかという議論だ。
// Start, Endを先に持ってくる派 int startPosition = 10; int endPosition = 20; // Positionを先に持ってくる派 int positionStart = 10; int positionEnd = 20;
要するにStart, Endを先に持ってくるかあるいは、Positionを先に持ってくるか、と言う議論だ。
ある人の意見では、日本語の「開始位置」「終了位置」の英訳として考えれば、
int startPosition = 10; int endPosition = 20;
とすべきだと言う事だった。
まあ確かに英語なら start position となる。
当記事では、プログラミングにおける変数のネーミングの仕方に関して、ワテのスタイルを紹介したい。
まあ、そんなものに興味ある人は、相当な変人だろう。
では、本題に入ろう。
変数のネーミングスタイルに関する議論
さて、その掲示板での議論はまだ続く。
別の意見では、positionの中に開始位置、終了位置があると捉えれば、
int positionStart = 10; int positionEnd = 20;
とするのが分かり易いと言う意見だった。
つまりまあオブジェクト指向的に考えれば、
class Position { public int Start; public int End; }
と言うクラスが有って、StartとEndと言うメンバ変数を持っている。
newでpositionインスタンスを実体化して、
var position = new Position(); position.Start = 20; position.End = 10;
そのパブリックメンバ変数Start, Endに値をセットする。
と言う感じだ。ちなみにこれらのコードはC#の文法で書いている。
まあ、その後この議論はどっちが良いかは結論は出ずに侃侃諤諤(カンカンガクガク)の議論が続き、途中からは日本語の変数を使うべきなどと言う意見も出てきた。
int 開始位置 = 10; int 終了位置 = 20;
こんな感じか。
この意見に対しては、外人が見たら意味が分からないから英語を使うべきだろうなどと言う意見も出てきてもう収集が付かない状態だ。
ワテ流の変数ネーミング手法(異端児の手法)
さて、皆さんには興味は無いかもしれないが、この質問に対してワテの場合にはどうするか?と言うテーマで当記事を書いてみたい。
まず、結論から言うと、ワテの場合には、
int posSta = 10; int posEnd = 20;
と書く。
その理由は以下の通り。
ワテがpositionをposに短縮する理由
まず position は長いので pos に短縮する。
count なら cnt
average なら ave
よく出てくる単語を毎回このように短縮しているので、自分で見る限りは混乱する事は無い。
何故短縮するかと言うと、長い変数がコード中に頻繁に登場するとコードが読み辛く感じるからだ。
同様の理由で、Start は Sta とする。さらにStaと短縮するのには別の理由もある。
それを説明する。
関連する変数名は長さを揃える
posSta とする理由であるが、今の様な状況では往々にしてStartやEnd以外にも類似の変数を定義する可能性が高い。
その時には、ワテの場合には、以下の様にする。
int posSta = 10; int posEnd = 20; int posMid = 20; // Middle int posCen = 20; // Center int posTop = 20; // Top int posBot = 20; // Bottom int posLef = 20; // Left int posRig = 20; // Right
これを逆にして、かつ、単語の長さがバラバラの場合には以下の様になる。
int startPos = 10; int endPos = 20; int middlePos = 20; // Middle int centerPos = 20; // Center int topPos = 20; // Top int botttomPos = 20; // Bottom int leftPos = 20; // Left int rightPos = 20; // Right
この様に何らかの位置情報を保持するpositionと言う名前を持つ変数グループにおいて各変数の長さがバラバラだとコードの見た目もバラバラになるのだ。
ワテはこの点が嫌いなのだ。
同じ様な別の例であるが、何らかのウインドウの左上の座標(x, y) とその 幅width, 高さheightを変数で保持する場合には、邪道なワテ流では以下の様にする。
// ワテならこうする int xWin = 10; int yWin = 10; int wWin = 10; int hWin = 10; // あるいは最近のワテならこうするかな。 int x_win = 10; int y_win = 10; int w_win = 10; int h_win = 10; // これは嫌い int xWindow = 10; int yWindow = 10; int widthWindow = 10; int heightWindow = 10; // これも嫌い int windowX = 10; int windowY = 10; int windowWidth = 10; int windowHeight = 10;
でも、posSta, posEndの流れから言うと、ワテ流では
int winX = 10; int winY = 10; int winW = 10; int winH = 10;
こうすべきじゃないの?と言う疑問を持つ人もいるだろう。
確かにそうなのだが、X, Y, W, Hのような一文字が後に来ると、例えば
winXと書いた場合には本来は「ウインドウのX位置」と言う意味で使っているのに、「ウインドウのXと言う名前のもの」と言う雰囲気になるので、そう言う場合には、逆転して xWin としている。これなら 「x 座標(Winの)」と言う意味だと分かり易いから本来の意味を取り違える可能性が低い。
まさに規則性も何にも無いワテ流の勝手な変数ネーミングだ。
スネークケースとキャメルケースに付いてのワテの意見
どっちが良いと言う議論は良く見る。
int position_start = 10; // スネークケース int position_end = 20; int positionStart = 10; // キャメルケース int positionEnd = 20;
ワテの意見では、そんなものはどっちでも良い。
気にすんな‼
と言う事だ。
世の中には数多くのプログラミング言語があり、それを使う人も多種多様な人がいる。
自分と他人は違って当然なのだ。
ちなみに現在のワテは、その時の気分でスネークケースとキャメルケースを使い分けている。
基本的にはキャメルケースが70%、スネークケースが30%くらいの割合で使っているかな。
例えば今回の例で言うと、最近のワテは前者のキャメルケースを使うだろう。
int posSta = 10; int posEnd = 20; int pos_sta = 10; int pos_end = 20;
でも昔は後者のスネークケースを用いる比率が高かった。
何故キャメルケースを多用するようになったかと言うと、アンダースコアが無いので各単語が密着するから一体感が有って見易く感じるからだ。パット見て一つの変数と分る。一方、スネークケースでアンダースコアが三つも四つもあるとパット見てマイナス記号のような感じがして引き算をやっているように見えてしまう(ワテの場合)。
と言う事で、出来るだけスッキリとコードを書きたいので、ワテの場合には、
冒頭で結論を書いたが、もう一回書くと、共通部分posが先頭に来て、キャメルケースで
int posSta = 10; int posEnd = 20;
と書くのがワテ流の記述方法となる。
両者に共通するposを先に持ってくるメリットとして、Visual Studioのような統合開発環境(IDE = Integrated Development Environment)では、posまで入力すると
posStaやposEndが入力候補として自動的に表示される(インテリセンス)機能がある。そう言う点でも、posを先に持って来るのがワテ好みだ。
しかしながら、一文字の x, y, w, h を組み合わせる場合にはスネークケースになり、共通部分winが末尾に来る。
int x_win = 10; int y_win = 10; int w_win = 10; int h_win = 10;
まあ、節操が無いと言うか、支離滅裂と言うか、その日の気分で決めるような感じだ。
良い子の皆さんは決して真似をしてはいけない。
異端のネーミングセンスかもしれない。
まとめ
以上、ワテ流の勝手なネーミング手法なので、業界の標準的な手法などとは全く関係無い。
まあ、そんな誤解をする人もいないと思うが。
ちゃんとした本を読んで正しい手法を身に着けたい人にお勧めの本
アマゾンで人気の本らしい。ワテは読んでいない事は言うまでもない。
コメント