トップページ⇒tech
144コメント37KB

君の変数の命名ルールを教えてくれ!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
プログラミングをしていると結構迷うのが
変数の命名。
いい命名ルールがあったら教えてくれ。
0002デフォルトの名無しさんNGNG
言語によるよ。なに使ってるの?
0003デフォルトの名無しさんNGNG
long_long_long_long_variable_name
0004デフォルトの名無しさんNGNG
Javaの命名付与基準はわりと多言語でも有効活用できる。
0005デフォルトの名無しさんNGNG
ハンガリアン記法でいいじゃん
0006デフォルトの名無しさんNGNG
C、アセンブラしか使わないがtask_function_verというように
アンダースコアで繋ぐ社内ルールになっている。不満分子が多いぞ。
0007デフォルトの名無しさんNGNG
先に釘を刺すけど、*ハンガリアン記法*の話は控えめにしましょう。
フレーム合戦にしかならないので。

old Cタイプ: this_is_a_pen this_is_a_penp
Javaタイプ: thisIsAPen _thisIsAPen
0008デフォルトの名無しさんNGNG
アンダースコアでつなげるの好き+大文字嫌いな自分は逝ってよし?
00097NGNG
クラスがある言語だと、クラス名にアンダースコアを入れるのは
間が抜けているのでJavaタイプがいいね。
0010デフォルトの名無しさんNGNG
>8
逝け
0011デフォルトの名無しさんNGNG
>>8
友よ…。

っていっても、言語によっては大文字使うなぁ。
0012デフォルトの名無しさんNGNG
まあスコープ明示してて統一されてて
開発元のサンプルに何となく準拠してれば何でもいいよ。
0013デフォルトの名無しさんNGNG
あちきも>>8派かな
あとGoF本の影響からか、メンバの先頭にアンダースコア付けるようになった
インテリセンスでゾロゾロひっかかちゃうけど。あ、C++ね
0014デフォルトの名無しさんNGNG
>>12
同意

個人的には、適切な英単語が思い浮かばないほうが辛い。
0015デフォルトの名無しさんNGNG
あんだーすこあって、メンバ変数に使うんですか?
0016デフォルトの名無しさんNGNG
>個人的には、適切な英単語が思い浮かばないほうが辛い。
同意。
0017名無しさんNGNG
長い変数名つけるとなんだかすごいことやってそうな気にさせる。
001813NGNG
>>14
ん、どゆこと?そうだけど…まずいってことかな?
よかったら助言してくれ。ちなみにメンバ関数にはさすがに使わない。
0019デフォルトの名無しさんNGNG
最近はコメント振る暇あったらコメント無しで分かるように変数名長くしちゃうよ。
コード補完マンセー。

お気に入りのエディタ使ってるご老体には思いっきり評判悪いけど:-P
0020デフォルトの名無しさんNGNG
>>13
アンスコで始まる識別子って、予約されてなかったっけ。
0021デフォルトの名無しさんNGNG
Javaの関数は何故一番最初の単語が小文字なのか?C++から入ると戸惑う。
0022デフォルトの名無しさんNGNG
>>21
クラスと被るから。
002313NGNG
>>20
ぐあ、マジで?__(二つ分)じゃなくて、_がですか?鬱
0024デフォルトの名無しさんNGNG
俺はC++でも 関数小文字。自分でかいたアホ関数が一発でわかるよ
駄目駄目〜

本当はSHIFT押すのがウザイんじゃ
0025デフォルトの名無しさんNGNG
クラスは名詞でメソッドは動詞だから被らないじゃん。
まあ意味以前に形式的に判断できるのは確かにメリットだけど。
0026デフォルトの名無しさんNGNG
STLも小文字だし、、、
0027デフォルトの名無しさんNGNG
C++でWinだけど、なによりWinAPIと区別がつきやすくて好きです、
関数小文字始まり。というかC++はデフォルト大文字なの?
0028デフォルトの名無しさんNGNG
>>27
バイブルでは、クラスの最初の文字は大文字だね。
メソッドは全部小文字。
0029デフォルトの名無しさんNGNG
openFileかfileOpenかそれが問題だ..
0030デフォルトの名無しさんNGNG
itte-yosi-omae-mona
-か_で区切る。これしかない

ItteYosiOmaeMona
先頭大文字&全部大文字嫌い すげー読みづらい やめてくれ!

つーかこの話題がいしゅつ。氏ね>>1
0031デフォルトの名無しさんNGNG
関数名はともかく変数名は完全にMFC方式が身についてしまった。
クラスの変数は m_
数字は n
文字列は str
ポインタは p
みたいな感じで
0032デフォルトの名無しさんNGNG
>>29
漏れは前者だなぁ

スレタイトルから外れるけど、関数もありなら
かなりのところ皆のコンセンサスが得られるかな
0033デフォルトの名無しさんNGNG
>>30
あまりに_で区切りすぎると可読性下がらない?
スペースと区切りつかないというか…
大文字に関しては激同意
>>31
オレもそうだったけど最近strとstringとの兼ね合いから宗旨変え
0034デフォルトの名無しさんNGNG
人のソースに手入れるときはそれとなくスタイル真似てみる
0035デフォルトの名無しさんNGNG
>>34
そんなの当たり前。って思ってたけど
この前手を入れたソースを関係ないとこも含めて
全部自分のスタイルに直してった厨房がいた。
diff取れねーじゃねーか!!
0036デフォルトの名無しさんNGNG
>>35
自分スタイルに直したソースのパッチを送ってくれる厨房がいたらやだな。
「ソースが読みにくいので読みやすいように直しました」とかいって。
0037デフォルトの名無しさんNGNG
関数名はともかく変数名は完全にMFC方式が身についてしまった。
クラスの変数は m_1 m2
数字は n1 n2
文字列は str1 str2
ポインタは p1 p2
みたいな感じで
0038デフォルトの名無しさんNGNG
>>30
なんていうか、 - で区切るのは無理だろ。
言語にもよるが、ほぼ間違いなく減算演算子だろ?
0039デフォルトの名無しさんNGNG
ねぇねぇタブは何タブ?

…宗教論争はよそうぜ。
0040デフォルトの名無しさんNGNG
タブは普通に8桁だけど、インデントは4桁。
0041デフォルトの名無しさんNGNG
>>38
lispはだいたい-で区切る。
004238NGNG
>>41
ごめん。ボクが無知でした。鞭でぶって下さい。
0043デフォルトの名無しさんNGNG
>>39
4かな。邪道だけど。Java使いなもんで。勘弁して。
0044デフォルトの名無しさんNGNG
39はタブ数が知りたいわけではないと思うぞ
0045デフォルトの名無しさんNGNG
2タブ…
0046デフォルトの名無しさんNGNG
>>7
Javaで先頭小文字は動詞だけだぞ
0047名無しさんNGNG
>>46
初めて聞きました。ソースは?
0048デフォルトの名無しさんNGNG
http://www.bulldog.co.jp/
0049魚チョコNGNG
>>30
>つーかこの話題がいしゅつ。氏ね>>1

? 外出? 〜が移出?

BASIC/アセンブラでプログラミングを憶えたから、いまだに
大文字の方が読みやすいねえ。フォントによるけど、aとo、
lと1などが見づらいから小文字やだ。いくら変数名を長くして
も、どうせコメント書かなきゃわからん。コメントの打込みは
つづりを間違っても大した害はないが、変数名のつづりを間違
うと翻訳できないので、変数名は極力短く、PとかXとか1文字
の変数を使い回し(笑)ポインタ変数なんか、キャスト、キャ
ストで、なにやってんだ! みたいな(^◇^;) あーあと英語
で悩むの嫌だから、独自のローマ字で日本語名ってのが多いな
あ。ファイル参照はANKEN(案件)書きだしファイルはTOUAN
(答案)チャットで鍛えたから、打込みはめんどうでないしね
そうそう、電算機用語ってば、英語をカタカナ表記しただけの
工夫のないものが多いので、日頃からこまめに訳してるよ。デ
ータは精(中国語読みでジン)とかさ。レジスタは皿、メモリ
は壺(笑)「他の人が読めないじゃないか!」と評判悪いねえ
でも動けばいいのだ(爆)他の人が決していじりたいと思わな
いように、インラインアセンブラを必ずいれとくことがコツと
いへやう(^◇^;) ・・・て、仕事としてやってたときには、
ここまでのことはできなかったけどサ。
0050デフォルトの名無しさんNGNG
>>48
おまえはサムソンだ!
0051デフォルトの名無しさんNGNG
>>49
> >つーかこの話題がいしゅつ。氏ね>>1
>
> ? 外出? 〜が移出?

天然か?2chに来てまだ長くないのか?
がいしゅつってのは既出(きしゅつ)ってことね。

それと君の文読みにくいよ。
0052デフォルトの名無しさんNGNG
>>51
読めたの?俺はコンパイルエラーでたよ。
49: parse error : an unacceptable radio wave.
0053デフォルトの名無しさんNGNG
gtk_check_button_new_with_label

読む。
0054デフォルトの名無しさんNGNG
なんか、すごい電波が出てるね。
0055デフォルトの名無しさんNGNG
全部大文字はかっこいい!
アンダースコアでつなげるのダサい。
0056デフォルトの名無しさんNGNG
>>55
SINEBAKAYAROU
0057デフォルトの名無しさんNGNG
http://piza.2ch.net/test/read.cgi?bbs=jisaku&key=977945208
参照せよ!
0058デフォルトの名無しさんNGNG
>>54
同意。精子生産量が減った気がする。

>>55
#defineやtypedefなんかはそーしてる。変数じゃないけど。
逆を言えば変数と混乱する。そんなソース作ったら
56がダスレ作ってしまう〜〜。。。
005956NGNG
>>58
マクロが大文字なのはともかくtypedef大文字はどうかと思うぞ。
_tつけるとかのほうが普通では?
#俺は何もつけないけど
0060デフォルトの名無しさんNGNG
>>46
おれは変数名もメソッド名と同じように書いてたぞ。
なんか変だとは思っていたけど。うぅはずかしい。
0061デフォルトの名無しさんNGNG
メソッドと普通の関数の違いはどうしてますか?
0062デフォルトの名無しさんNGNG
>>61
つけてないけど、だめ?
0063デフォルトの名無しさんNGNG
>>59
_tをつけるのは構造体の時だけだァ
とかいってみたり(大爆笑)
0064(・Θ・)ノチーNGNG
クラスの先頭が小文字で変数の先頭が大文字って少数派ですか。
0065デフォルトの名無しさんNGNG
>>64
むしろ規約違反(大爆笑)
0066デフォルトの名無しさんNGNG
ループ変数の場合,

iBlock, iWord

という風に iXxxxx 形式で書いてます.
iはindexです.

オブジェクト指向言語の場合,
わかりやすい変数名にしようとして
単語数が多い変数名が出てくるようだと
クラスの設計を再検討したくなりまする.
0067デフォルトの名無しさんNGNG
iMac
0068デフォルトの名無しさんNGNG
>>66
i,j < ループ変数
0069デフォルトの名無しさんNGNG
>>45
同士発見!!!!
2タブが一番きれいだと思うんだけどなぁ
0070デフォルトの名無しさんNGNG
>>69
4タブ。2タブはcaseにつかう
0071デフォルトの名無しさんNGNG
変数名には数字を使わないっていうのはどう?
数字の混じった変数名って、直観的に「汚い!」って思っちゃうんだけど。
0072変数iNGNG
i
ii
iii
iiii
iiiii
iiiiii
iiiiiii
iiiiiiii..............
0073デフォルトの名無しさんNGNG
>>72
それ実在するからもうやめてくれ
0074変数iそのTowNGNG
i_one
i_tow
i_three
i_fore
i_five...
0075デフォルトの名無しさんNGNG
strManco
strTinco
iManco
iTinco
bManco
bTinco
0076VB厨NGNG
MSDNライブラリ推奨の命名規則によると、
Integer型:intHoge
Long型:lngHoge
String型:strHoge
ってな感じで頭に型の識別名をつけるべし、だそうです。
インテリセンスマンセー
0077デフォルトの名無しさんNGNG
関数は大文字区切りにしたくなるが、変数はアンダースコア区切りにしたくなる…変?
0078デフォルトの名無しさんNGNG
CHoge chogeHoge
0079デフォルトの名無しさんNGNG
>>77
徹底してればよし。
中途半端はだめ。
0080名無しさんNGNG
aPointer
aString
anArray
0081デフォルトの名無しさんNGNG
>>76
ハンガーストライキ記法ってやつか。
0082デフォルトの名無しさんNGNG
>>80
正しい不定冠詞な識別名?(w

ところでauto変数だけ小文字でアンダースコア区切り…ってのはダメですか?
0083デフォルトの名無しさんNGNG
2 タブにすると、読みやすさ以前についついネストを深くしてしまいそうで
こわいです。
0084デフォルトの名無しさんNGNG
int tekitou[100];
int tekitou_i;

tekitou[tekitou_i]

配列のインデックスに使う変数には、
その配列名_i という名前をつけます。
0085Java厨房NGNG
>>49,>>65
私も2タブです。
0086デフォルトの名無しさんNGNG
どうでもいいので、
char *p1,*p2;
0087(・Θ・)ノチーNGNG
>65

大爆笑されてしまいましたが規約とは?
0088デフォルトの名無しさんNGNG
>>87
65のセリフで大爆笑するということでは、とおせっかい
0089(・Θ・)ノチーNGNG
そうなんですか^^;

class hogehoge
{
private:
int Hoge;

public:
int GetHoge(void) const { return Hoge; }
};

と書くと、

int Hoogee;
hogehoge Hooogeee;

とデフォルトの型指定子と同様の書式で書けるので
統合性があっていいと勝手に思っていたのですが
逆に区別がつかなくてまずいのでしょうか。
0090デフォルトの名無しさんNGNG
>>89
デフォルト型って...

intとかcharとかじかに使ってるコードやばいだろ。
そろそろ64bitコンパイラも珍しくなくなってきたろ?
0091デフォルトの名無しさんNGNG
どこかにリファレンスになるめいめい規則のWebぺーじありますか?
0092デフォルトの名無しさんNGNG
>>91
Javaでよければ知ってる
Cのは知らない
0093厨房NGNG
>>90
64bitコンパイラだとcharのサイズって変わるの?
脱線ですまそ
0094デフォルトの名無しさんNGNG
charはかわらんと思う
0095デフォルトの名無しさんNGNG
>>83
Linux kernel 付属のドキュメントでも
「インデント幅は大きく、それで見づらくなったら関数分割を考えろ」
みたいなことが書いてあった。
0096デフォルトの名無しさんNGNG
>>94
変わると思うよ。
ほら、Javaなんて2バイトだし。
0097デフォルトの名無しさんNGNG
タブは4タブがデフォだと思ってた・・・
2も8も気持ち悪くてカンベン<2&8タブの奴スマソ
0098(・Θ・)ノチーNGNG
> 91
WINAPI関連が主ですが。
http://www.arcpit.co.jp/winapi/api_01/ap0102.htm

>90
short char とか指定するんですか?
初心者でスンマセソ、勘違いだったら笑ってやってください。

4タブ派に一票。
0099デフォルトの名無しさんNGNG
M-x c-set-style BSD
0100デフォルトの名無しさんNGNG
>>96
Javaはマルチバイトっつーかユニコードっつーか
そういうの意識してるからなんじゃ?
010190NGNG
>>94
他の人が書いてるように、Javaでなくても文字コード(として扱うデータ)のサイズ
は変わるよ。
charのサイズは変わらないはずだけど、
そのとき標準となるライブラリ関数やOSの文字コードのサイズが
変わったとして、char で書きまくったコードを手直しするわけにいかないでしょ?

Javaの文字コードは無知だから知らないけど
実際、WinCEとかは、文字コードが二バイトコードになってるよ。
0102デフォルトの名無しさんNGNG
言語によって最適なタブ幅は変わると思うがいかに?

4:VB, C/C++
2:Pascal

と言った具合に。
0103(・Θ・)ノチーNGNG
スレ違いっぽいのですが便乗質問

while(...){
...
}
と
while(...)
{
...
}
は、どちらにしていますか?
私はwhileやforのときは前者にして、関数定義のときは後者にしてるのですが
一貫性を持たせたほうがいいのでしょうか。
宗教戦争のような気もしますけどご意見ありましたらお願いします。
0104デフォルトの名無しさんNGNG
おれ、Pascalだけど4だなー。確かに記述量が多いから2でもいいかもな。
0105HONGNG
VB使ってるけど全角漢字かなまじり使ってた・・・。俺は馬鹿だ。氏のう。
0106デフォルトの名無しさんNGNG
>>103
while,forは前者。
Cの関数定義は後者。
Javaのメソッド定義は両方ごちゃまぜでどうしようか迷っている所。

while,forで後者なのはド素人ぐらいでしょ。
0107デフォルトの名無しさんNGNG
コボラ上がりの上司は、DBテーブルのカラム名も変数名もやたら
DATA001, DATA002, DATA003, DATA004,.....
FLAG001, FLAG002, FLAG003, FLAG004...... というのを連発する。

大文字/小文字とかハイフン/アンダースコアとか贅沢な好みは言わんから
意味のある名前にしてくれ。(-o-)
0108デフォルトの名無しさんNGNG
>>103
バークレー君(死語?)以外でも関数宣言は後者を使うのが多いんでわ?
0109(・Θ・)ノチーNGNG
>> 106
>> 108

レスありがとうございました。
while,forは前者。
Cの関数定義は後者。
でいいんですね。
0110デフォルトの名無しさんNGNG
なぜだろう、みんな>>106と同じ方法を使っている。
0111デフォルトの名無しさんNGNG
while();
{
}
とかを避けるのにも有効かもしれん。
関数定義だとエラーになるっしょ。
0112デフォルトの名無しさんNGNG
while() の後にいきなり ; 書く奴なんていねーだろ
0113デフォルトの名無しさんNGNG
中カッコ位置は対応してたほうが
スコープが分かりやすいがな。
右に持っていったところで行数がわずかに減る程度で、
あまり利点があるとは思えん。
0114デフォルトの名無しさんNGNG
>>113
同意。

>>103の後者のスタイルで100行の関数はまだ読む気がするが、前者のスタイルで100行の
関数は全く読む気がしない。制御構造が追いきれなくなる。
0115デフォルトの名無しさんNGNG
どのみちインデントでわからへん?
0116デフォルトの名無しさんNGNG
>>115
確かによく見ればインデントでわかるけど、よく見ないといけないことに
そもそもの問題がある。
0117デフォルトの名無しさんNGNG
良く見なくても自明だろう。所詮は慣れの問題だと思うが……。
0118さとうNGNG
なぜ変数は小文字なんでしょうか?
0119デフォルトの名無しさんNGNG
>>118
小文字でもなんでも統一してあればいい。
グローバルスタンダードをつくろー
0120デフォルトの名無しさんNGNG
>>117
そんなことはない。

while(...) {
  /* 処理 */
 }

のような書き方をする奴もいるから、どちらを使っているかを見極める
のはかなり疲れる。しかも、同じプログラムの中で、両派が混在してい
たりする。
0121デフォルトの名無しさんNGNG
>>120
>のはかなり疲れる。しかも、同じプログラムの中で、両派が混在してい
>たりする。

それは単に、スタイルが統一されてないから混乱してるだけでは?
統一されてればどのスタイルでも大差ないと思う。
0122(・Θ・)ノチーNGNG
if文も分かれそうですね

if (...) hogehoge <- 1行で済む場合のみ
else hogehoge2

if (...) {
hogehoge
} else {
hogehoge2
}

if (...) {
hogehoge
}
else {
hogehoge2
}

hogehoge部分の長さによって見やすいのが変わるような。
0123デフォルトの名無しさんNGNG
>if (...) hogehoge <- 1行で済む場合のみ
>else hogehoge2

これはやめろ。。。

if (...)
  hogehoge;
else
  hogehoge2;

にしろ。
0124デフォルトの名無しさんNGNG
>>102
> 言語によって最適なタブ幅は変わると思うがいかに?

タブ幅なんて言語じゃなくてエディタとかターミナルエミュレータ
とかの問題だが

> 4:VB, C/C++
> 2:Pascal

インデント幅とタブ幅を混同してる厨房は逝ってよし。
0125デフォルトの名無しさんNGNG
emacsやvimはタブとインデントは区別されてるけど、
普通のエディタ使ってる人はインデント幅=タブ幅って感覚だよ
0126デフォルトの名無しさんNGNG
>>123
why?
0127デフォルトの名無しさんNGNG
>if (...)
>  hogehoge;

馬路でこれだけはやめてください。
  hogehoge;
のあとになにか一行加えると死ねます。

>if (...) hogehoge <- 1行で済む場合のみ
のほうがマシです。
0128デフォルトの名無しさんNGNG
>>126
わかりにくいからにきまっとるだろ。
0129デフォルトの名無しさんNGNG
>>127
じゃあ、そもそも必ず{}を入れるようにすればいいだろ。
つうか、そうしろ。
0130デフォルトの名無しさんNGNG
補足:
短い時は3項演算子使えばいいんだし。
0131デフォルトの名無しさんNGNG
おれ、どっちでもいいよ。
0132デフォルトの名無しさんNGNG
>>129
あほか…
>>123に対しての反論なんだからさ。{}使ったほうがいいのは当然。
0133デフォルトの名無しさんNGNG
100万行は作ったようなきもするが、
変数命名規則一切無し。
コンフリクトしたこと無し。
まぐれ?
0134デフォルトの名無しさんNGNG
>>125
それは「タブを使ってインデントしてる」だけ。
混同するのはやっぱ厨房。
0135デフォルトの名無しさんNGNG
Javaに関しては
Code Conventions for the JavaTM Programming Language
を見れでスレ終了なのだが(藁

http://java.sun.com/docs/codeconv/index.html
JDKドキュメントのindex.htmlにもリンクがあるのに、見てないのか?
0136デフォルトの名無しさんNGNG
Java厨が来ると雰囲気が悪くなるね
0137デフォルトの名無しさんNGNG
> if (...) hogehoge <- 1行で済む場合のみ
> else hogehoge2

がダメなのはデバグしづらいの一言につきると思うのだが…
0138(・Θ・)ノチーNGNG
> 135
見てませんでした、参考になりました。

if (...) {
  hogehoge
} else {
  hogehoge2
}
一行でもこれで書くのが良いようですね。ただ、仮に

if (hogeA) hogehoge1
if (hogeB) hogehoge2
if (hogeC) hogehoge3

とする場合

if (hogeA) {
  hogehoge1
}
if (hogeB) {
  hogehoge2
}
if (hogeC) {
  hogehoge3
}

となって、ちょっとクドい気もしますが。
0139デフォルトの名無しさんNGNG
if (hogeA) { hogehoge1 }
if (hogeB) { hogehoge2 }
if (hogeC) { hogehoge3 }

こう書いたら?
0140デフォルトの名無しさんNGNG
>>137
ステップ実行したときに、実行されているかどうかわからないってこと?
0141デフォルトの名無しさんNGNG
俺は1文だけのときは
if(...) hogehoge
とします。
elseをつけるときはたとえ1行だけでも{}をつけます。
0142デフォルトの名無しさんNGNG
C++ の場合、

http://www.possibility.com/Cpp/CppCodingStandard.html#methodsnames

これが綺麗だと思う。
0143(・Θ・)ノチーNGNG
>> 142

サフィックスの解説もあっていいですね
Cnt - the current count of a running count variable.

細かいとこ見ると、
if (condition)
{
}
にちょっと戸惑いを感じました。

あと、メソッドの定義では型とメソッド名をタブで揃えるのは
一般的なのでしょうか?

K&Rだと揃えませんが、あれは古いですか?
0144デフォルトの名無しさんNGNG
>>140
そんなところです。さらにいうならブレークポイントで止めづらいから。

if文ごとに止めていちいち条件判断見るより
if文でひっかからないなら止まらない、…の方がやりやすいからね。
■ このスレッドは過去ログ倉庫に格納されています