• ベストアンサー

この変数名はわかりにくいですか?

int data_i, buf_i, mem_i, i; int etc... と宣言したら、先生にdata_iのiってなんやねんって言われました。 自分は初心者で命名規則等はわからないのですが、このまとまりで宣言してるので、data_iのiの意味はとりあえずわかるとおもったんですが・・ iを先頭にもってきても、わかりにくいでしょうか・・ 配列のインデックスのいい命名の仕方があれば教えてほしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • ency
  • ベストアンサー率39% (93/238)
回答No.6

私の場合、data_index のように index のスペルは省略しないですね。 変数名で大事なのは、長くても後でメンテナンスするときにわかりやすい名前にすることが大事だと思います。 # それは、誰が見てもわかりやすいことに通じるわけですけどね。 課題で作るプログラムは、一度作ってしまえばその後見直すことはないかもしれません。 しかし、ソフトとして公開する場合デバッグ等のメンテナンスが必要になります。 # 個人でフリーソフトを公開する場合や、会社で複数人数でプロジェクトを作って # 商用ソフトを作る場合等がそれにあたります。 後になって「この変数って何だっけ?」といったことになったら、一度コードを見直さなくてはならなく、効率が悪くなります。 特に、仕事の場合、将来にわたってひとつのファイルを1人で担当することは皆無に近く、大抵途中で引継ぎが行われます。 場合によっては複数の人がひとつのファイルをいじることもあります。 その場合に「これは何だ?」ということにならないためにも、わかりやすい変数名をつける習慣はとても大事です。 理想としては、コメントなしでコードだけで何をやっているのかがわかるようなコーディングをすべきだと思います。 たとえば、データについても何のデータなのかがわかるような名前をつければ、もっとわかりやすくなりますよね。 そういう意味で、私は英文字一文字の変数 (i, j, x, y 等) を使用すべきではないと思っています。 たとえ数行の簡単な使い捨てプログラムであっても、変数名はその実態をあらわすべきです。 思いつくとか思いつかないとか、また一貫性云々というのは、また別の話です。

snailramer
質問者

お礼

回答ありがとうございます。 >変数名で大事なのは、長くても後でメンテナンスするとき >にわかりやすい名前 とにかくわかりやすい名前をつけることを優先するべきということですね。 自分は変数名のわかりやすさより、1処理1行を優先していたので、そのことよりも長くてもわかりやすい名前を付けることを優先したほうがいいみたいですね。 >理想としては、コメントなしでコードだけで何をやって >いるのかがわかるようなコーディング 提出する課題はコメントなしです。まさに先生が同じ考えをしているので。なので、コメントなしでもわかるようなコーディングを心がけてはいるんですが・・ 課題はTA5人と先生に添削され、ダメだしがかなり激しいので、コメントなしで誰が見てもわかりやすいコードを書く訓練をするには、いい環境かもしれません・・。 まずは変数名のダメ出しがなくなるように、書き換えてみます。

その他の回答 (11)

回答No.12

ナレッジマネジメントを推奨する者として、以下に過去ログとお勧めサイトを載せておきます。ご参考までに。 命名規約(C/C++) http://live.under.jp/todashou/tips/code_writting/notation.html 命名規約(VB) http://www.cpnet.co.jp/gfan/techdoc/dev/dev01/ 命名規約(プログラミング全般) http://homepage1.nifty.com/~takaot/prprpr/varname.html 命名規約(GNU) http://oshiete1.goo.ne.jp/kotaeru.php3?q=810699 命名規約(Java) http://www.alles.or.jp/~torutk/oojava/codingStandard/writingrobustjavacode.html 命名規約(Perl) http://oshiete1.goo.ne.jp/kotaeru.php3?q=1624559 命名規約(Web系) http://oshiete1.goo.ne.jp/kotaeru.php3?q=1611062

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.11

なかなか不毛な論議になってきてますね(^^ 論議するくらいならコメント付けりゃいいのでは?って思わないことも無いですが… 略語や表記法に対して「わかりやすい」と感じるのは同じ文化を共有できる場合に限ります。 逆にいうと、「このプログラムを読む人は俺と同じ文化と知識レベルを持て!」と要求するのは傲慢ですね。 もちろん、意味不明なコメントは帰って邪魔です。 int index ; //インデックス これは不要です。 そうではなく、deta_iにするべきか。i_dataにするべきか、dataidxにするべきかなんて考えてるならコメントを書くべきです。 int i ; よりは int index ; のほうがいいのは当然です。 しかし、質問者はそのレベルの答えを求めていないでしょう。 int index ; か良いか int counter ; が良いか、というレベルの場合は文化の違いですからまた別の話。 (開発グループ内のコンセンサスに合わせるが正解) int data_i; がよいか int i_data; がよいか int dataidx; が良いかを論議するのは不毛ですね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.10

ほとんど余談に近いですが... わかりやすい識別子(変数名、型名、関数名など)という観点からすれば、日本語で、しかもローマ字ではなく漢字仮名交じりで命名するのが一番ですね。 現状では日本語の識別子が使える環境はほとんどありませんが、近々そうした環境も整備されていくことでしょう。 かつて、コメントを日本語で書くことに対する抵抗も結構ありましたが、今では日本語でコメントを書くのが当たり前になったように、やがては日本語で命名するようになることは十分考えられます。 特に、.NET Frameworkのような異言語との互換性を考慮しないといけない環境であれば、大文字小文字の違いによる区別も許されないので、英数字だけでは表現力が乏しいですし、迂闊に英語で命名すると、異言語の予約語や予約済み識別子を使ってしまう可能性もあります。 それに、日本語識別子の最大の問題は(標準規格の範囲であるにも関わらず)移植性ですが、.NET Frameworkを使う時点で既に移植性はないので、その問題は考慮の必要もなさそうです(doxygenなどのツールが対応していないのが、難ですが)。

  • ency
  • ベストアンサー率39% (93/238)
回答No.9

あくまで「理想はコメントなし」ということです。 何でもかんでも「コメントをつけろ」というと、次のような無意味なコメントをつけてしまう場合があります。 # 冗談ではなく、実際にこんなコメントを見たことがあります。 /* hoge に 5 を代入する。 */ hoge = 5; また、一行ごとに上記のようなコメントがついているものもあり、いくらエディタの色分け機能を使ったとしても見にくいことこの上ありません。 本当に必要なのは、上記のような一行一行の処理にたいする説明ではなく、「この部分はどのような機能を実現したいのか」という抽象的なレベルでの説明だと思います。 そして、このようなひとまとまりの処理は関数として分割すべきです。 そこで、関数名も変数名と同様に「何をやる関数なのか」がわかるような工夫が必要になります。 そうすればコメントなしのコーディングもそれほど大変ではありません。 また、やたらめったらコメントをつけるコーディングよりもよっぽど信頼できます。 コメントなんてメンテナンスが重なると、更新が後回しにされて気がつけば嘘になってしまっていることが多いものです。 ま、変数や関数を使用する上での注意事項や前提条件等、コードだけではどうしても表せないものもありますので、そういう場合にはコメントで説明するしかないでしょう。 そういう意味で「理想」と言ったつもりです。 もちろん、職業プログラマは、そのプロジェクトの「コーディング規約」という縛りの中でコーディングをしなければなりません。 そうすると自分一人でコーディングをしている場合に比べて自由度がなくなるため、コメントで補足しなければいけない場合も多くなると思います。 しかし、その場合でも普段から「コメントなし」のコーディングの訓練をしている人なら、コメントをつけるべき場所を必要最小限にすることができますよね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.8

この類の質問は、回答者それぞれが違うことを主張するので大変ですね。というわけで、私も違うことを書きます。 私は基本的には、#6のencyさんや先生と同じで、コメントなしでコードだけで意味が理解できるようにかくべきだと考えています。ただ、それは詳しい命名をすべきということと同義ではありません。 本来であれば、配列のインデックスというのは、その場しのぎのループカウンタなどの場合が多いので、それほど重要な変数ではないことが多いと思います。 このような場合、むしろiのような短い名前を付けるのも悪くないでしょう。他の重要な変数と差別化する意味で、変数名に重みを付けるのは、むしろよいことです。ただし、その有効範囲をせいぜい10行程度までにおさめるべきです。ごく短い範囲であれば、何のための変数かは見た瞬間にわかります。 もし、配列のインデックスで複雑な操作を行うのであれば、構造体にするとか、インデックスを列挙子にするなどの工夫が別途必要で、変数名だけで何とかすべき問題ではありません。 余談ですが、"idx"というのは、私の場合、(特定用途の)ID番号を連想してしまいます。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.7

って言うか、コメントを書かないのはなぜですか? 説明可能な意味付けがなされているなら、それをコメントで書きましょう。 適切なコメントがあれば、i_dataでもdata_iでもdataidxでかまわないと思います。 プロになると変数名、関数名の命名法すら客先から指定されることがあります。 「いい命名法」を考えることは無駄ではありませんが、コメントを書く癖をつけましょう。

snailramer
質問者

お礼

回答ありがとうございます。 >プロになると変数名、関数名の命名法すら客先から指定さ >れることがあります。 プロになるとそんなことまで指定されるんですね・・ そうなると、確かにコメントを付ける癖をつけてないとまずいですね。 以前自宅でソースにコメントを付けて、わかりしやくしようと思ったときに、なかなか良いコメントを書けなかった。という経験もあったので、適切なコメントの付け方も練習しないとだめそうですね。

noname#30727
noname#30727
回答No.5

intのi、indexのi、iteratorのiなどは頭に浮かびやすいですが、語彙の多い人ほど想像力が働いてしまうので、先生にはわかりにくいかもしれません。 一貫性があればわかりにくという事はありませんが、特に重要な意味を持たないインデックスであれば、i, j, k, x, y, zなどの1文字の名前の方が読みやすい事もあります。それもまた一貫性を必要とします。

snailramer
質問者

お礼

回答ありがとうございます。 >特に重要な意味を持たないインデックスであれば 単に10回処理を繰り返したい時のカウンター代わり、という場合等でしょうか。単純すぎな処理ですけど・・ 一貫性の必要性は変数の付け方だけなく、すべてにおいて言えることなんでしょうね。

  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.4

勘違しておりました。C言語ですので、int型であるというのを明示されようとしているのかと思いました。 それでしたら、No1様がおっしゃられているように"idx"というのを使われるのをお奨めします。

snailramer
質問者

お礼

再回答ありがとうございます。 >No1様がおっしゃられているように"idx"というのを使われ >るのをお奨めします。 では、arrayname_idxで統一します。配列名をそのまま入れるっていうとこに問題はありそうですが・・

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

その変数名だけを見て「これは配列のインデクスか」と分かる人はいないかと思います。 変数名から用途が分かるべきか否かはまた別の問題ですが、仮に「分かりやすい変数名」を「変数名から用途が推定できること」と仮定すると、その変数名は「分かりやすい変数名」ではありません。 変数が「配列のインデクス」なのであれば、変数名に「配列のインデクス」を意味する言葉を入れることで、その用途であろうことが推定できるようになります。

snailramer
質問者

お礼

回答ありがとうございます。 >変数名から用途が分かるべきか否かはまた別の問題ですが そうなんですか・・変数名の付け方はほんとに難しいです。 データという配列のインデックスに名前をつけるとしたら、どういうのが良いのかな。 そもそも個々の配列に専用のインデックス変数はつくるものなんでしょうか。

  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.2

iはintegerのiかと思いますが、、、 idata,ibuf,imemというふうにするとか? 趣味のものなので、よいと思いますが。 会社に入れば、その会社のルールがあると思いますし。

snailramer
質問者

お礼

回答ありがとうございます。 > iはintegerのiかと思いますが、、、 やっぱりそういう解釈になるんですね・・・ iはループ変数用の名前、という思い込みが間違っていたみたいですね。

関連するQ&A