プロが教えるわが家の防犯対策術!

int data_i, buf_i, mem_i, i;
int etc...

と宣言したら、先生にdata_iのiってなんやねんって言われました。
自分は初心者で命名規則等はわからないのですが、このまとまりで宣言してるので、data_iのiの意味はとりあえずわかるとおもったんですが・・
iを先頭にもってきても、わかりにくいでしょうか・・


配列のインデックスのいい命名の仕方があれば教えてほしいです。

A 回答 (12件中1~10件)

i、j、k、lなどは、昔からループ変数に使われたりしてたようです。


その名残で、試験でも、ループ変数はiなどとめちゃくちゃ分かり辛い事がされています。

インデックスという言葉をそのまま使うのはダメなのですか?data_idxなどと。
またはdata_numなど。

上記ですと、型がint型という解釈が出来ますね^^
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>その名残で、試験でも、ループ変数はiなどとめちゃく
>ちゃ分かり辛い事がされています。

ループ変数にも具体的な名前をつけるべきなんですね。

>上記ですと、型がint型という解釈が出来ますね^^

そういう解釈も出来るんですね。iという名前はそれだけでループ変数という意味になると思い込んでました・・
data_idxにして再提出します。

お礼日時:2005/11/10 18:14

iはintegerのiかと思いますが、、、


idata,ibuf,imemというふうにするとか?

趣味のものなので、よいと思いますが。

会社に入れば、その会社のルールがあると思いますし。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> iはintegerのiかと思いますが、、、

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

お礼日時:2005/11/10 18:18

その変数名だけを見て「これは配列のインデクスか」と分かる人はいないかと思います。



変数名から用途が分かるべきか否かはまた別の問題ですが、仮に「分かりやすい変数名」を「変数名から用途が推定できること」と仮定すると、その変数名は「分かりやすい変数名」ではありません。

変数が「配列のインデクス」なのであれば、変数名に「配列のインデクス」を意味する言葉を入れることで、その用途であろうことが推定できるようになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>変数名から用途が分かるべきか否かはまた別の問題ですが

そうなんですか・・変数名の付け方はほんとに難しいです。

データという配列のインデックスに名前をつけるとしたら、どういうのが良いのかな。
そもそも個々の配列に専用のインデックス変数はつくるものなんでしょうか。

お礼日時:2005/11/10 18:34

勘違しておりました。

C言語ですので、int型であるというのを明示されようとしているのかと思いました。

それでしたら、No1様がおっしゃられているように"idx"というのを使われるのをお奨めします。
    • good
    • 0
この回答へのお礼

再回答ありがとうございます。

>No1様がおっしゃられているように"idx"というのを使われ
>るのをお奨めします。

では、arrayname_idxで統一します。配列名をそのまま入れるっていうとこに問題はありそうですが・・

お礼日時:2005/11/10 18:56

intのi、indexのi、iteratorのiなどは頭に浮かびやすいですが、語彙の多い人ほど想像力が働いてしまうので、先生にはわかりにくいかもしれません。



一貫性があればわかりにくという事はありませんが、特に重要な意味を持たないインデックスであれば、i, j, k, x, y, zなどの1文字の名前の方が読みやすい事もあります。それもまた一貫性を必要とします。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>特に重要な意味を持たないインデックスであれば

単に10回処理を繰り返したい時のカウンター代わり、という場合等でしょうか。単純すぎな処理ですけど・・

一貫性の必要性は変数の付け方だけなく、すべてにおいて言えることなんでしょうね。

お礼日時:2005/11/10 19:31

私の場合、data_index のように index のスペルは省略しないですね。


変数名で大事なのは、長くても後でメンテナンスするときにわかりやすい名前にすることが大事だと思います。
# それは、誰が見てもわかりやすいことに通じるわけですけどね。

課題で作るプログラムは、一度作ってしまえばその後見直すことはないかもしれません。
しかし、ソフトとして公開する場合デバッグ等のメンテナンスが必要になります。
# 個人でフリーソフトを公開する場合や、会社で複数人数でプロジェクトを作って
# 商用ソフトを作る場合等がそれにあたります。

後になって「この変数って何だっけ?」といったことになったら、一度コードを見直さなくてはならなく、効率が悪くなります。
特に、仕事の場合、将来にわたってひとつのファイルを1人で担当することは皆無に近く、大抵途中で引継ぎが行われます。
場合によっては複数の人がひとつのファイルをいじることもあります。
その場合に「これは何だ?」ということにならないためにも、わかりやすい変数名をつける習慣はとても大事です。

理想としては、コメントなしでコードだけで何をやっているのかがわかるようなコーディングをすべきだと思います。

たとえば、データについても何のデータなのかがわかるような名前をつければ、もっとわかりやすくなりますよね。

そういう意味で、私は英文字一文字の変数 (i, j, x, y 等) を使用すべきではないと思っています。
たとえ数行の簡単な使い捨てプログラムであっても、変数名はその実態をあらわすべきです。

思いつくとか思いつかないとか、また一貫性云々というのは、また別の話です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>変数名で大事なのは、長くても後でメンテナンスするとき
>にわかりやすい名前

とにかくわかりやすい名前をつけることを優先するべきということですね。
自分は変数名のわかりやすさより、1処理1行を優先していたので、そのことよりも長くてもわかりやすい名前を付けることを優先したほうがいいみたいですね。

>理想としては、コメントなしでコードだけで何をやって
>いるのかがわかるようなコーディング

提出する課題はコメントなしです。まさに先生が同じ考えをしているので。なので、コメントなしでもわかるようなコーディングを心がけてはいるんですが・・
課題はTA5人と先生に添削され、ダメだしがかなり激しいので、コメントなしで誰が見てもわかりやすいコードを書く訓練をするには、いい環境かもしれません・・。

まずは変数名のダメ出しがなくなるように、書き換えてみます。

お礼日時:2005/11/11 02:28

って言うか、コメントを書かないのはなぜですか?



説明可能な意味付けがなされているなら、それをコメントで書きましょう。
適切なコメントがあれば、i_dataでもdata_iでもdataidxでかまわないと思います。

プロになると変数名、関数名の命名法すら客先から指定されることがあります。
「いい命名法」を考えることは無駄ではありませんが、コメントを書く癖をつけましょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>プロになると変数名、関数名の命名法すら客先から指定さ
>れることがあります。

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

お礼日時:2005/11/11 19:05

この類の質問は、回答者それぞれが違うことを主張するので大変ですね。

というわけで、私も違うことを書きます。

私は基本的には、#6のencyさんや先生と同じで、コメントなしでコードだけで意味が理解できるようにかくべきだと考えています。ただ、それは詳しい命名をすべきということと同義ではありません。

本来であれば、配列のインデックスというのは、その場しのぎのループカウンタなどの場合が多いので、それほど重要な変数ではないことが多いと思います。
このような場合、むしろiのような短い名前を付けるのも悪くないでしょう。他の重要な変数と差別化する意味で、変数名に重みを付けるのは、むしろよいことです。ただし、その有効範囲をせいぜい10行程度までにおさめるべきです。ごく短い範囲であれば、何のための変数かは見た瞬間にわかります。

もし、配列のインデックスで複雑な操作を行うのであれば、構造体にするとか、インデックスを列挙子にするなどの工夫が別途必要で、変数名だけで何とかすべき問題ではありません。

余談ですが、"idx"というのは、私の場合、(特定用途の)ID番号を連想してしまいます。
    • good
    • 0

あくまで「理想はコメントなし」ということです。


何でもかんでも「コメントをつけろ」というと、次のような無意味なコメントをつけてしまう場合があります。
# 冗談ではなく、実際にこんなコメントを見たことがあります。

/* hoge に 5 を代入する。 */
hoge = 5;

また、一行ごとに上記のようなコメントがついているものもあり、いくらエディタの色分け機能を使ったとしても見にくいことこの上ありません。

本当に必要なのは、上記のような一行一行の処理にたいする説明ではなく、「この部分はどのような機能を実現したいのか」という抽象的なレベルでの説明だと思います。
そして、このようなひとまとまりの処理は関数として分割すべきです。
そこで、関数名も変数名と同様に「何をやる関数なのか」がわかるような工夫が必要になります。

そうすればコメントなしのコーディングもそれほど大変ではありません。
また、やたらめったらコメントをつけるコーディングよりもよっぽど信頼できます。

コメントなんてメンテナンスが重なると、更新が後回しにされて気がつけば嘘になってしまっていることが多いものです。

ま、変数や関数を使用する上での注意事項や前提条件等、コードだけではどうしても表せないものもありますので、そういう場合にはコメントで説明するしかないでしょう。

そういう意味で「理想」と言ったつもりです。

もちろん、職業プログラマは、そのプロジェクトの「コーディング規約」という縛りの中でコーディングをしなければなりません。
そうすると自分一人でコーディングをしている場合に比べて自由度がなくなるため、コメントで補足しなければいけない場合も多くなると思います。

しかし、その場合でも普段から「コメントなし」のコーディングの訓練をしている人なら、コメントをつけるべき場所を必要最小限にすることができますよね。
    • good
    • 0

ほとんど余談に近いですが...



わかりやすい識別子(変数名、型名、関数名など)という観点からすれば、日本語で、しかもローマ字ではなく漢字仮名交じりで命名するのが一番ですね。

現状では日本語の識別子が使える環境はほとんどありませんが、近々そうした環境も整備されていくことでしょう。
かつて、コメントを日本語で書くことに対する抵抗も結構ありましたが、今では日本語でコメントを書くのが当たり前になったように、やがては日本語で命名するようになることは十分考えられます。

特に、.NET Frameworkのような異言語との互換性を考慮しないといけない環境であれば、大文字小文字の違いによる区別も許されないので、英数字だけでは表現力が乏しいですし、迂闊に英語で命名すると、異言語の予約語や予約済み識別子を使ってしまう可能性もあります。
それに、日本語識別子の最大の問題は(標準規格の範囲であるにも関わらず)移植性ですが、.NET Frameworkを使う時点で既に移植性はないので、その問題は考慮の必要もなさそうです(doxygenなどのツールが対応していないのが、難ですが)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!