- 締切済み
変数名や関数名の命名方法
どうも初めて質問させていただきます。 私はプログラマの2年生で、現在C++で作業しています。 最近になってようやくプログラミングに自信を持てるようになり、 だいぶコーディングも早くなった気がしています。 ですが、いつも変数名や関数名またはクラス名といった名前を付ける際に 非常に時間がかかってしまいます。 和英辞典を使って調べたりするのですが、 そのまま名付けても、他の人が見て意味が理解できなさそうなことが多いです。 みなさんは変数名など考えるときに、どのようにしていますか? 何かプログラミング専門の和英辞典みたいな書籍など出ているのでしょうか? お役立ち情報ありましたら、どうぞよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- likipon
- ベストアンサー率38% (44/114)
最近は比較的長い名前を使いますから, a. 変な省略をすることなく (standard → std とか) b. 英語として正しい 事が大事ですよね. 細かいコーディング規約はたくさんあるでしょうが, 基本は上記の2点となる気がします. 特にメソッド名でbがきちんとしていれば, 何かを自分でするのか, あるいは外からされるのか, そういうのがよく記述できて コメントレスのコーディングに一歩近づきます. ただ, bをきちんとやるのは日本人には厳しすぎて (あるいは, きちんとやっても読む側が理解できないと意味ない) 今日的な命名法の実践はなかなかできないかもしれません. その点, それこそローマ字や日本語(2バイト文字)なんかの変数命名も 処理系が許すのであれば悪くないと (半ば本気で) 思ったりもします.
- jacta
- ベストアンサー率26% (845/3158)
一番重要なのは、同じ意味の語に対して異なる呼称を用いないことです。 仕様書を日本語で書いて、コーディング時に英語にしようとすると、元の用語に対して複数の訳語が発生してしまい混乱の元になります。 次に大事なのは、コメントがなければ分からないような名前にしないことです。 これは命名とは異なりますが、変数の有効範囲を必要最小限にすることも大切です。有効範囲が十分短ければ(for文の中だけなど)、一文字名でも十分です。 そして、具体的すぎず、抽象的過ぎない名前にします。 具体的過ぎる名前というのは、例えばシステムハンガリアンのように型名を識別子に含めるようなやり方です。 抽象的過ぎる名前というのは、flagのように何のフラグか分からないような名前です。ただし、有効範囲が十分狭ければ、これでも問題ありません。
- S117
- ベストアンサー率40% (18/45)
英語の意味などはあまり深く考えないで書きます。あいまいな部分は宣言時にコメントで補足します。また、少なくとも同じ関数・クラス内では名前の付け方を統一します。 良い例) FILE *outfp; /*出力用ファイル*/ FILE *infp; /*入力用ファイル*/ char *outpath; /*出力ファイルパス*/ char *inpath; /*入力ファイルパス*/ 悪い例) FILE *file; FILE *fin; char *outfile; char *fout; 悪い例では、コメントがないですし、名前の付け方に統一性もありません。仮にコメントが付いていてもわかりづらいです。こんなソースを意図的に書く人がいたら、その人には悪意があります。ただ、ほかの変数の宣言にまぎれたり、後から変数を追加したりした場合に、こうなることはあります。実際上記のようなソースは見たことがあります。 ローカル変数ならこれで十分ですが、クラスのメンバとなるともう少し考慮することが増えます。例えば似たような物がほかのクラスにあれば、それにあわせます。新しく付けるなら、無理に省略せずに書くことが重要です。自分なりの命名基準があればいいのですが、とりあえず適当なライブラリのマニュアル(MSDNとか)を眺めるといいかもしれません。 ちなみに私が英単語を調べるときはエキサイト辞書を使ってます。
お礼
回答ありがとうございます。 ライブラリのマニュアルは参考になりそうですね。 やはり日本人よりもアメリカ人の命名の方がかなり信頼できそうです。 私も英単語を調べるときはエキサイト辞書を使用していましたが、 No.2の方に教えていただいた http://veryname.ddo.jp/に切り替えようと思います。 S117さんも試してみては。。。
- hiro19834
- ベストアンサー率0% (0/0)
下記サイトを利用しています。 Ajaxになっていて素早く調べることができます。
- 参考URL:
- http://veryname.ddo.jp/
お礼
とても便利ですね。 今まではエキサイト辞書を利用していましたが、 それよりも素早く調べられそうです。 プログラミング時に常に起動しておきたいと思います。 ありがとうございました。
- hostsmania
- ベストアンサー率22% (2/9)
書籍は分かりませんが、 ・先頭大文字 ・大まかになにやるか(例:入出力ならIO~、XML扱うなら Xmlなど、で) 例:データの総合管理システムがあるとして、大きく ・DB系 ・送受信系 ・ツール系 更にそれぞれ、 DB系((1)XMLファイル管理、(2)テキストファイル管理、(3)バイナリファイル管理) 送受信系((4)他システム送受信、(5)専用データ入力受信) ツール系((6)メンテナンス機能、(7)簡易統計出力)等があるとして。 (1)Db_XmlFile() (2)Db_TextFile() (3)Db_BinFile() (4)SndRcv_Other() (5)SndRcv_InputOnly() (6)Tool_Mainte() (7)Tool_Toukei() というクラス名称の工夫だけでも問題ないのでは? 上記気持ち悪いならプロジェクト内で文字数を統一するとか。 2文字なら、SndRcv→SR、Tool→Tl ソースファイルなら Tool_Mainteの下に付加して Tool_Mainte_Main.c(メイン) Tool_Mainte_Init.c(初期処理) などなど。 地道に丁寧にで。地味で良い。
お礼
回答ありがとうございます。 英語も日本語同様、ひとつの単語でいろいろな意味を持っていますね。 和英辞典で引いていると、よくこの問題にぶち当たってしまいます。 変数の有効範囲が狭ければ名前の抽象度が高くてもいいというのは とても興味深いですね。 その辺も考えながら実装していきたいとおもいます。