変数などの命名方法について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
TRUE

変数などの命名方法について

#1

投稿記事 by TRUE » 15年前

こんばんは。
C言語の質問というより、アンケート又は先輩方のアドバイスをもらう形になってしまいますが…

変数などの命名方法はどのようにすれば、管理がしやすいのでしょうか?
人それぞれだと思いますが、こうしたら分かりやすいなどの情報があればお願いします。

現在、C++で自分が意識して使っているものは

・カウンタなどはi,j,kと使っていく。
・クラスの命名はCをつける。
・定数は大文字のみで命名する。
・関数や引数は、動作が分かるような命名をする。

くらいです。よろしくお願いします。

TRUE

Re:変数などの命名方法について

#2

投稿記事 by TRUE » 15年前

追記

書き忘れです。
昔、別名で別の質問をした経験があるのですが、名前を忘れてしまいまして
現在、「TRUE」で質問してます。名前の複数使用が問題になっているようですので…
管理人様、すみません

たかぎ

Re:変数などの命名方法について

#3

投稿記事 by たかぎ » 15年前

クラスのメンバの場合、既存のクラスにあわせておかないとテンプレートの中で使えなくなります。
例えば、コンテナのメンバ関数は、begin, end, rbegin, rend, sizeなどの名前にすべきですし、メタ関数のメンバはvalueやtypeにすべきですね。

Dixq (管理人)

Re:変数などの命名方法について

#4

投稿記事 by Dixq (管理人) » 15年前

> TRUEさん

こんにちは^^

カウンタの名前ですが、
何故 i,j と使う慣習があるんでしょうね。
数学的なところから来てるのかもしれませんが
for(j=0;j<10;j++){
for(i=0;i<10;i++){
if(a[j]==0){
}
}
}
とか書いてあったらフォントによっては見難くて仕方ない気がするんですよね・・。

些細なことではありますが、これが原因でバグを出してしまった経験もあるので、
二重カウンタにi,jを使わないというのもいいかもしれません。

また、命名規則についてですが、
その型が見てすぐわかるような付け方をする場合もあります。

int iValue;
double dAngle;

グローバル変数だったら

int giClockCounter;

のような感じだったりもします。

また、それが良いかどうかは別にして、「変数 命名規則」でぐぐったり
「ハンガリアン記法」でググったりして参考にしてみるのも良いかも知れません。

具体的な変数の命名規則であったり、プログラムの書き方であったるするものは
もしプログラマーになれば会社の規則がある場合があるので、
そんなに完全に自分のスタイルとして確立する必要はないと思いますが、
それを専門職としていない段階なら、人の良い所をついばむスタイルで大丈夫だと思います。


> 昔、別名で別の質問をした経験があるのですが、名前を忘れてしまいまして

ここで書いて良いのでしたら以前使われていた名前をお伝え出来ますが、
別にそこまでこだわらなくてもいいですよ。
トピ立てるたびに名前変えるとか、お礼や返事を書くのが面倒だから、と匿名性を利用する為に変えるような
悪質的な行為が問題であって、TRUEさんの場合は当てはまらないので。
今からでもお好きな名前を決めて頂いても全然大丈夫です。

常連の方でもたまに名前を変更される方もいらっしゃいますしね。

山崎

Re:変数などの命名方法について

#5

投稿記事 by 山崎 » 15年前

おはようございます。

ちょっと前、(もしかしたら今もかもしれませんが)
ハンガリアン記法というのがトレンドだったようですね。
変数名の前に、その変数の役割や型をプリフィックスとして付けておく、という記法ですね。
今は廃れてきている、とどこかで聞きました(プロの現場の状況は知りませんけれど)。
もしご存じないのであれば、ハンガリアン記法を一度お調べになってみてはいかがでしょう。

私はチームではなく個人で開発しているので、コーディング規約はありませんが、
一応変数名を決めるうえでの方針というのはありますね。

TRUEさんのあげた項目は私も守るようにしています。
他には、「変数名は必要以上に略さない」というのが私の方針です。
後でコードを見た時に、どんな役割の変数なのかわからない、
というのはやはり避けるべきですからね。
一人で開発していますが、他人に見せるコードのつもりで書くようにしています。

バグ

Re:変数などの命名方法について

#6

投稿記事 by バグ » 15年前

>>管理人さん
iやjがループカウンタとして使われるようになったのは、正に管理人さんが身を持って経験したように見間違えやすいからだと聞いた事があります。
C言語のように基本的に変数の寿命がスコープ内で終了する場合はまだ発見しやすいのですが、BASICのように宣言なしでどこからでも参照できてしまう場合は不具合の発見が非常に困難になります。
そういう状況を避けるべく、見分けづらい文字はカウンタに限定して使おうと思ったのかもしれませんね。
少し補足すると、BASICでは変数名の長さに比例して処理が重くなったりしていましたので、単文字変数名が珍しくありませんでした。そういう時代背景も後押ししたのかもしれません。
当時は変数対応表なんてものを手書きで用意して、それを見ながら作業なんてことも普通にありました。今ではあまり考えられませんけどね(笑)

御津凪

Re:変数などの命名方法について

#7

投稿記事 by 御津凪 » 15年前

私の場合はループ名でカウンタとして意味を持つような場合は、i, j, k, l (同時に回数を扱う場合は n, m を)
としてますが、
二次元、三次元を表すようなカウンタ変数の場合は x, y, z と意味を持たせますね。
他にもアルゴリズム等で左右の意味で l, r とすることもあります。

そのほかに、関数の引数には先頭に入出力の示す「in」「out」「io」をどれかをつけるようにしてたり、
静的変数名の先頭には s 、グローバル変数名の先頭には g を付け、ローカル変数名は何もつけずに小文字から、
クラスのメンバ変数の先頭には m を付けるが、構造体のメンバ変数には何もつけないといった変則的にしてたり、
関数、メンバ関数は語句ごとの先頭を大文字に、
内部でのみしか使用しない static 関数には小文字のみで語句ごとをアンダーバーで区切る、といった感じです。

私はこの通り我流なので、「これが良いよ」とはいえませんが、
きちんと変数の用途と所在、あと名前の区別があれば管理がしやすいでしょう。


最後に、それとは別になりますが、
グローバル変数が多くある時は一つの構造体に纏めていたりもしています。

softya

Re:変数などの命名方法について

#8

投稿記事 by softya » 15年前

そもそもi,j,kを使い出したのはFORTRANだと思います。
FORTRANの暗黙の型宣言は、変数の頭文字で型が決まってしまうのですが、I,J,K,L,M,NがINTGER(C言語でint)その他がREAL(C言語でfloat)となってしまいます。なのでループ変数で簡単に使えるi,j,kを使い出したって話です。

ただ、単純なループならiで良いですが2重や3重のループならもっと意味のある名前にした方が良いと思います。特に同じ配列の添字が場所によりiだったりjだったりするのは、間違いのもとです。

あと気を付けているのは、
(1)ローカル変数、メンバ変数、引数は区別が付けれるように命名する。
(2)長すぎる名前は可読性の害になるが、短すぎる名前は自分にしか分からないので程々の長さを目指す。
あたりですかね。

non

Re:変数などの命名方法について

#9

投稿記事 by non » 15年前

>そもそもi,j,kを使い出したのはFORTRANだと思います。
>FORTRANの暗黙の型宣言は、変数の頭文字で型が決まってしまうのですが、I,J,K,L,M,NがINTGER

私も、大学時代にFORTRANを習ったときにそう習いました。

たかぎ

Re:変数などの命名方法について

#10

投稿記事 by たかぎ » 15年前

C++では、グローバル変数を使う必然性は皆無ですね。最低限、名前空間に収めればよいので。
メンバ変数は、メンバであることを明示したければ、this->をつければよいことです。
局所オブジェクトと関数の仮引数を区別する必要は特にないと思います。
代わりに、テンプレート仮引数を区別する方法はあったほうがよいでしょうね。

TRUE

Re:変数などの命名方法について

#11

投稿記事 by TRUE » 15年前

レスが大変遅くなってすみません。

みなさん、いろいろ工夫されてたりで参考になりました。
ハンガリアン記法なども調べてみたいと思います!

カウンタの変数にi,j,kなどが使われるようになったのはFORTRANの影響など
大変勉強になりました。

また質問などありましたら投稿したいと思いますのでよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る