No.6ベストアンサー
- 回答日時:
私の場合、data_index のように index のスペルは省略しないですね。
変数名で大事なのは、長くても後でメンテナンスするときにわかりやすい名前にすることが大事だと思います。
# それは、誰が見てもわかりやすいことに通じるわけですけどね。
課題で作るプログラムは、一度作ってしまえばその後見直すことはないかもしれません。
しかし、ソフトとして公開する場合デバッグ等のメンテナンスが必要になります。
# 個人でフリーソフトを公開する場合や、会社で複数人数でプロジェクトを作って
# 商用ソフトを作る場合等がそれにあたります。
後になって「この変数って何だっけ?」といったことになったら、一度コードを見直さなくてはならなく、効率が悪くなります。
特に、仕事の場合、将来にわたってひとつのファイルを1人で担当することは皆無に近く、大抵途中で引継ぎが行われます。
場合によっては複数の人がひとつのファイルをいじることもあります。
その場合に「これは何だ?」ということにならないためにも、わかりやすい変数名をつける習慣はとても大事です。
理想としては、コメントなしでコードだけで何をやっているのかがわかるようなコーディングをすべきだと思います。
たとえば、データについても何のデータなのかがわかるような名前をつければ、もっとわかりやすくなりますよね。
そういう意味で、私は英文字一文字の変数 (i, j, x, y 等) を使用すべきではないと思っています。
たとえ数行の簡単な使い捨てプログラムであっても、変数名はその実態をあらわすべきです。
思いつくとか思いつかないとか、また一貫性云々というのは、また別の話です。
回答ありがとうございます。
>変数名で大事なのは、長くても後でメンテナンスするとき
>にわかりやすい名前
とにかくわかりやすい名前をつけることを優先するべきということですね。
自分は変数名のわかりやすさより、1処理1行を優先していたので、そのことよりも長くてもわかりやすい名前を付けることを優先したほうがいいみたいですね。
>理想としては、コメントなしでコードだけで何をやって
>いるのかがわかるようなコーディング
提出する課題はコメントなしです。まさに先生が同じ考えをしているので。なので、コメントなしでもわかるようなコーディングを心がけてはいるんですが・・
課題はTA5人と先生に添削され、ダメだしがかなり激しいので、コメントなしで誰が見てもわかりやすいコードを書く訓練をするには、いい環境かもしれません・・。
まずは変数名のダメ出しがなくなるように、書き換えてみます。
No.12
- 回答日時:
ナレッジマネジメントを推奨する者として、以下に過去ログとお勧めサイトを載せておきます。
ご参考までに。命名規約(C/C++)
http://live.under.jp/todashou/tips/code_writting …
命名規約(VB)
http://www.cpnet.co.jp/gfan/techdoc/dev/dev01/
命名規約(プログラミング全般)
http://homepage1.nifty.com/~takaot/prprpr/varnam …
命名規約(GNU)
http://oshiete1.goo.ne.jp/kotaeru.php3?q=810699
命名規約(Java)
http://www.alles.or.jp/~torutk/oojava/codingStan …
命名規約(Perl)
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1624559
命名規約(Web系)
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1611062
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;
が良いかを論議するのは不毛ですね。
No.10
- 回答日時:
ほとんど余談に近いですが...
わかりやすい識別子(変数名、型名、関数名など)という観点からすれば、日本語で、しかもローマ字ではなく漢字仮名交じりで命名するのが一番ですね。
現状では日本語の識別子が使える環境はほとんどありませんが、近々そうした環境も整備されていくことでしょう。
かつて、コメントを日本語で書くことに対する抵抗も結構ありましたが、今では日本語でコメントを書くのが当たり前になったように、やがては日本語で命名するようになることは十分考えられます。
特に、.NET Frameworkのような異言語との互換性を考慮しないといけない環境であれば、大文字小文字の違いによる区別も許されないので、英数字だけでは表現力が乏しいですし、迂闊に英語で命名すると、異言語の予約語や予約済み識別子を使ってしまう可能性もあります。
それに、日本語識別子の最大の問題は(標準規格の範囲であるにも関わらず)移植性ですが、.NET Frameworkを使う時点で既に移植性はないので、その問題は考慮の必要もなさそうです(doxygenなどのツールが対応していないのが、難ですが)。
No.9
- 回答日時:
あくまで「理想はコメントなし」ということです。
何でもかんでも「コメントをつけろ」というと、次のような無意味なコメントをつけてしまう場合があります。
# 冗談ではなく、実際にこんなコメントを見たことがあります。
/* hoge に 5 を代入する。 */
hoge = 5;
また、一行ごとに上記のようなコメントがついているものもあり、いくらエディタの色分け機能を使ったとしても見にくいことこの上ありません。
本当に必要なのは、上記のような一行一行の処理にたいする説明ではなく、「この部分はどのような機能を実現したいのか」という抽象的なレベルでの説明だと思います。
そして、このようなひとまとまりの処理は関数として分割すべきです。
そこで、関数名も変数名と同様に「何をやる関数なのか」がわかるような工夫が必要になります。
そうすればコメントなしのコーディングもそれほど大変ではありません。
また、やたらめったらコメントをつけるコーディングよりもよっぽど信頼できます。
コメントなんてメンテナンスが重なると、更新が後回しにされて気がつけば嘘になってしまっていることが多いものです。
ま、変数や関数を使用する上での注意事項や前提条件等、コードだけではどうしても表せないものもありますので、そういう場合にはコメントで説明するしかないでしょう。
そういう意味で「理想」と言ったつもりです。
もちろん、職業プログラマは、そのプロジェクトの「コーディング規約」という縛りの中でコーディングをしなければなりません。
そうすると自分一人でコーディングをしている場合に比べて自由度がなくなるため、コメントで補足しなければいけない場合も多くなると思います。
しかし、その場合でも普段から「コメントなし」のコーディングの訓練をしている人なら、コメントをつけるべき場所を必要最小限にすることができますよね。
No.8
- 回答日時:
この類の質問は、回答者それぞれが違うことを主張するので大変ですね。
というわけで、私も違うことを書きます。私は基本的には、#6のencyさんや先生と同じで、コメントなしでコードだけで意味が理解できるようにかくべきだと考えています。ただ、それは詳しい命名をすべきということと同義ではありません。
本来であれば、配列のインデックスというのは、その場しのぎのループカウンタなどの場合が多いので、それほど重要な変数ではないことが多いと思います。
このような場合、むしろiのような短い名前を付けるのも悪くないでしょう。他の重要な変数と差別化する意味で、変数名に重みを付けるのは、むしろよいことです。ただし、その有効範囲をせいぜい10行程度までにおさめるべきです。ごく短い範囲であれば、何のための変数かは見た瞬間にわかります。
もし、配列のインデックスで複雑な操作を行うのであれば、構造体にするとか、インデックスを列挙子にするなどの工夫が別途必要で、変数名だけで何とかすべき問題ではありません。
余談ですが、"idx"というのは、私の場合、(特定用途の)ID番号を連想してしまいます。
No.7
- 回答日時:
って言うか、コメントを書かないのはなぜですか?
説明可能な意味付けがなされているなら、それをコメントで書きましょう。
適切なコメントがあれば、i_dataでもdata_iでもdataidxでかまわないと思います。
プロになると変数名、関数名の命名法すら客先から指定されることがあります。
「いい命名法」を考えることは無駄ではありませんが、コメントを書く癖をつけましょう。
回答ありがとうございます。
>プロになると変数名、関数名の命名法すら客先から指定さ
>れることがあります。
プロになるとそんなことまで指定されるんですね・・
そうなると、確かにコメントを付ける癖をつけてないとまずいですね。
以前自宅でソースにコメントを付けて、わかりしやくしようと思ったときに、なかなか良いコメントを書けなかった。という経験もあったので、適切なコメントの付け方も練習しないとだめそうですね。
No.5
- 回答日時:
intのi、indexのi、iteratorのiなどは頭に浮かびやすいですが、語彙の多い人ほど想像力が働いてしまうので、先生にはわかりにくいかもしれません。
一貫性があればわかりにくという事はありませんが、特に重要な意味を持たないインデックスであれば、i, j, k, x, y, zなどの1文字の名前の方が読みやすい事もあります。それもまた一貫性を必要とします。
回答ありがとうございます。
>特に重要な意味を持たないインデックスであれば
単に10回処理を繰り返したい時のカウンター代わり、という場合等でしょうか。単純すぎな処理ですけど・・
一貫性の必要性は変数の付け方だけなく、すべてにおいて言えることなんでしょうね。
No.3
- 回答日時:
その変数名だけを見て「これは配列のインデクスか」と分かる人はいないかと思います。
変数名から用途が分かるべきか否かはまた別の問題ですが、仮に「分かりやすい変数名」を「変数名から用途が推定できること」と仮定すると、その変数名は「分かりやすい変数名」ではありません。
変数が「配列のインデクス」なのであれば、変数名に「配列のインデクス」を意味する言葉を入れることで、その用途であろうことが推定できるようになります。
回答ありがとうございます。
>変数名から用途が分かるべきか否かはまた別の問題ですが
そうなんですか・・変数名の付け方はほんとに難しいです。
データという配列のインデックスに名前をつけるとしたら、どういうのが良いのかな。
そもそも個々の配列に専用のインデックス変数はつくるものなんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Excel(エクセル) Excel マクロで For 文のインデックスを先に宣言する理由 7 2022/08/27 00:26
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
c言語
-
配列の要素数に変数を入れたい...
-
C言語において、 配列要素をひ...
-
define で 配列
-
c言語 構造体
-
MFCのCArrayを使った二次元配列
-
C言語の課題が出たのですが自力...
-
コンボボックスでデフォルト値...
-
C言語についてです 5人のテスト...
-
MFC - ダイアログボックスのPic...
-
要素数・要素の値が未定の配列...
-
配列のアドレス部
-
C言語 ファイルの指定された行...
-
[C++]const int と配列
-
const で宣言してるのに、値が...
-
c言語の自分で数字を入力してサ...
-
辞書式順序
-
C#で配列が空かを判定するには?
-
C言語の配列のコピーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
C言語において、 配列要素をひ...
-
配列の要素数に変数を入れたい...
-
構造体のextern方法
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
C言語の2次元配列 容量が大き...
-
c言語 構造体
-
C言語 ファイルの指定された行...
-
C言語についてです 5人のテスト...
-
int i, int i[1];
-
fclose()でセグメンテーション違反
-
char型配列をint型に代入するには
-
C言語から質問です。
-
Cのエラー
-
コンボボックスでデフォルト値...
-
C言語の課題が出たのですが自力...
-
MFCのCArrayを使った二次元配列
-
[C++]const int と配列
おすすめ情報