トップページ⇒tech
1001コメント255KB

クラス名・変数名に迷ったら書き込むスレ。Part16

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/11/21(土) 13:28:06
クラス名、変数名のつけ方に悩んだら書き込むスレです。

質問する人は、その変数に何を格納するのか(クラスだったらその役割)
プログラミング言語は何なのかを、それぞれ書いて、
いい変数名を思いついた人は、それに答えてあげましょう。

命名規則や設計の善し悪しについて議論するのは基本的に禁止。

>>2 英和・和英・英英など各国語辞書と翻訳サイト。
>>3 類義語(シソーラス)辞書、図形・数式・数学用語の英単語。
>>4 関連スレと、いろいろな言語規約。
>>2-10 諸事情によりリンクがずれた場合。

前スレ。
◆ネーミング倶楽部◆: http://pc3.2ch.net/tech/kako/1035/10353/1035362308.html
Part1: http://pc5.2ch.net/tech/kako/1046/10465/1046541730.html
Part2: http://pc5.2ch.net/tech/kako/1058/10582/1058213523.html
Part3: http://pc5.2ch.net/test/read.cgi/tech/1067171530/
Part4: http://pc5.2ch.net/test/read.cgi/tech/1087209526/
Part5: http://pc8.2ch.net/test/read.cgi/tech/1109330204/
Part6: http://pc8.2ch.net/test/read.cgi/tech/1128266018/
Part7: http://pc8.2ch.net/test/read.cgi/tech/1144978008/
Part8: http://pc10.2ch.net/test/read.cgi/tech/1154448184/
Part9: http://pc11.2ch.net/test/read.cgi/tech/1168356029/
Part10: http://pc11.2ch.net/test/read.cgi/tech/1180146315/
Part11: http://pc11.2ch.net/test/read.cgi/tech/1191250784/
Part12: http://pc11.2ch.net/test/read.cgi/tech/1206118762/
Part13: http://pc11.2ch.net/test/read.cgi/tech/1222661623/
Part14: http://pc12.2ch.net/test/read.cgi/tech/1230477632/
Part15: http://pc12.2ch.net/test/read.cgi/tech/1244797870/
01531422009/11/29(日) 17:32:00
ありがとうございます。
関数名はAttractかApproachにしようと思います。引数はbegin,target,stepあたりで。


>>145
確かに、ゲームではよく使いそうな処理ですね。

>>148-149
GUIに例えるなら、ゆっくり動いて吸着する……という感じでしょうか。
そのままではどんな距離でも反応しちゃうので、あらかじめ最も近いグリッドを求める必要があるでしょうが。

増減と吸着をまとめたいというのは正しいですが、
複雑な計算式で数値を求めるわけでもなく、if〜else if〜elseだけで終わる処理なんですよね。

>>150
終了点を0にすると、結構使う場面はありそうです。絶対値に対してデクリメントするような感じで。
まあ、そのまま書いても数行ですけれど。

>>152
実に良いセンス
0154デフォルトの名無しさん2009/11/29(日) 19:31:30
そうでもない
0155デフォルトの名無しさん2009/11/30(月) 17:23:55
同じような物を示す変数で、単位だけが違うような場合ってどうしてる? 変数の型も同じとして。
minHoge secHoge msecHogeとか?
0156デフォルトの名無しさん2009/11/30(月) 17:32:41
>>155
同類のバージョン違いのような物?は末尾を変えてる。
xxxYyyMin
xxxYyySec
xxxYyyMsec
0157デフォルトの名無しさん2009/11/30(月) 18:24:39
>>155 だとアプリケーションハンガリアンってやつだな。
0158デフォルトの名無しさん2009/11/30(月) 19:47:40
>>155
二重管理を避けるのはプログラミングでも仕事でも基本中の基本だよ。
0159デフォルトの名無しさん2009/11/30(月) 20:01:22
二重管理とは別だと思うんだが・・・
0160デフォルトの名無しさん2009/11/30(月) 20:27:23
>>159
そう?よく考えてみた方がいいと思うよ。
01611552009/11/30(月) 20:42:40
>156
なるほど、後ろもアリか。
>157
アプリケーションハンガリアンって悪者扱いされてない方のハンガリアンだっけ。
>158-160
単位変換のコストが重い場合、もしくは同列に扱われるけど別の値の場合っていうパターンも。
0162デフォルトの名無しさん2009/11/30(月) 21:22:53
>>161
「同列に扱われるけど別の値」は何が言いたいのかよく理解できないけど、
(別の値なら名前を統一する必要ないのでは?)確かに変換コストが高い場合は
キャッシュしとく必要がある場合もあるね。

>アプリケーションハンガリアンって悪者扱いされてない方のハンガリアンだっけ。
そうは思わない。例のシステムハンガリアンよりはマシ、ってだけ。
アセンブラならともかく、まともな言語ならそういうのは構造体なりクラスなりで
表現すべきだと思う。
0163デフォルトの名無しさん2009/11/30(月) 21:38:58
>>161
一々型作ってられない時にアプリケーションハンガリアンが出てくると思うんだけどねえ。
別にプリフィックスじゃなくても下みたいなことやってるでしょ?

// 以下は同一スコープ
int onwerAge, userAge;
int updateInterval;

そりゃなんでもかんでも型作った方がコンパイラチェック入るからいいだろうけど
普通はそこまでしないよね。
0164デフォルトの名無しさん2009/11/30(月) 21:44:09
アプリケーションハンガリアンって別にそんな特別なことじゃないよな。
みんな無意識にやってると思う。
0165デフォルトの名無しさん2009/11/30(月) 22:35:58
やらないってw

いや俺は組み込みアセンブラもやってるから、そっちでは仕方なくその種の
プリフィクスだのタグだのくっつける命名をするけど。
0166デフォルトの名無しさん2009/11/30(月) 22:50:21
へ?
一々何するにもパブリックフィールド一つだけのクラス書いたり
typedefしたりしちゃってるわけ?

・・・それはそれは失礼しました

アプリケーションハンガリアンが何なのかわかってない人って結構多いのかねぇ・・・
0167デフォルトの名無しさん2009/11/30(月) 22:59:20
Joelさんのとこに書いてあるアレでしょ?
やらないよあんなこと。

というか、型を定義することを過剰に重荷に感じるメンタルの方を疑問に思った方がいいと思う。
それはただの習い性というか、思い込みでしょ。
0168デフォルトの名無しさん2009/11/30(月) 23:07:06
いやいやいや

>>163 みたいな例でも
class Age とか class Interval 作るの??
int とかどこで使うんだいったい
0169デフォルトの名無しさん2009/11/30(月) 23:08:46
>>163はごく普通の明示的な命名であって、ハンガリアンなんてラベリングされるような
代物じゃないような気がするんだけど、俺の目が節穴なのかな。
0170デフォルトの名無しさん2009/11/30(月) 23:13:04
>>169
だからそれがハンガリアン記法がやりたかったことなんだってば。
で>>164なわけ。

0171デフォルトの名無しさん2009/11/30(月) 23:17:16
なんかもうどうでもいいよ君ら。
ハンガリアン嫌いな人はハンガリアンじゃないっていってりゃいいし
好きな人はハンガリアンだっていってりゃいいし
0172デフォルトの名無しさん2009/11/30(月) 23:35:54
いやそういう感情論じゃなくてねえ。
>>163みたいのがハンガリアンなら、今時の世の中のコードの命名の大半は
ハンガリアンってことになっちまうよ。

そんなのありかよw
0173デフォルトの名無しさん2009/11/30(月) 23:40:09
それが恐ろしいことに
int owner, user, update;
なんて命名するようなのがまだ現存してるんだよな・・・

省くなら型作れ、型作るの嫌なら論理的に区別付く名前付けろボケ新人

あとハンガリアンかどうかなんて関係なくね?
>>>163みたいのがハンガリアンなら、今時の世の中のコードの命名の大半は
>ハンガリアンってことになっちまうよ。
だと何かまずいのか?
0174デフォルトの名無しさん2009/11/30(月) 23:47:18
いやまずくないんだけど、普通はそれをハンガリアンとは言わんでしょ。
0175デフォルトの名無しさん2009/11/30(月) 23:51:44
>>171
0176デフォルトの名無しさん2009/12/01(火) 00:03:44
>>155
class hoge{
puclic:
  int msec;
  int sec;
  int min;
};
0177デフォルトの名無しさん2009/12/01(火) 02:37:39
>>176
そういう質問じゃないのよ。
01781552009/12/01(火) 03:17:04
>177
えっ? 違うの?
0179デフォルトの名無しさん2009/12/01(火) 03:34:00
関数()
{
  struct hoge {
    int msec;
    int sec;
  } hoge_;
}

ローカルクラスにして使うとか?
うん、それはないね
0180デフォルトの名無しさん2009/12/01(火) 07:11:40
いやだからなんで一つの変数にまとめるのよ・・・
そういう質問じゃないよ
0181デフォルトの名無しさん2009/12/01(火) 08:28:18
int _msec;

int sec()const throw()
{
return _msec / 1000;
}

しょ?
0182デフォルトの名無しさん2009/12/01(火) 08:36:44
そもそも実態が一つなのかどうかすら怪しいからなあ
>もしくは同列に扱われるけど別の値の場合っていうパターンも。
これがよくわからんし
0183デフォルトの名無しさん2009/12/01(火) 09:10:47
priceInDollar = rate(JPY, USD) * priceInYen
みたいな感じの?

0184デフォルトの名無しさん2009/12/01(火) 18:18:58
reserveのできるListクラス
あらかじめListNodeをオブジェクトプールで生成しておき、Listに対し要素が追加されたときはオブジェクトプールからListNodeを借りる。

いい名前が思いつかない。

0185デフォルトの名無しさん2009/12/01(火) 19:00:16
C++のvectorみたいな実装かな

PreallocatedList とかかねぇ・・・
いいの思い付かないなあ

0186デフォルトの名無しさん2009/12/01(火) 19:10:40
>>182
>もしくは同列に扱われるけど別の値の場合っていうパターンも。

これは単に、別の値ってことでしょ。
元の質問を見ると、実体が1つの場合、そうでない場合の両方を想定してるように読める。

同列って言うのは、たぶん単位は違うけど次元が同じってことかと。
東京から大阪までの距離を保持する変数(km)と、目から鼻先までの距離の示す変数(cm)みたいな。
0187デフォルトの名無しさん2009/12/01(火) 19:20:08
PreparedList
PooledList
0188デフォルトの名無しさん2009/12/01(火) 19:47:25
>>184
CachedList
0189デフォルトの名無しさん2009/12/01(火) 19:54:45
Cacheは違うだろ
0190デフォルトの名無しさん2009/12/01(火) 20:05:22
識別子の一文字目に数値を許してない処理系で
2ch みたいな数字が最初にくる固有名詞を変数化するときってどうしてます?

0191デフォルトの名無しさん2009/12/01(火) 21:01:03
reservableList
storageList
0192デフォルトの名無しさん2009/12/01(火) 21:04:15
storageListって・・・Listがそもそもstorageやんけ
0193デフォルトの名無しさん2009/12/01(火) 21:12:40
1-> l
2-> z
3-> E
4-> A
5-> s
6-> q
7-> T
8-> g
9-> q
0194デフォルトの名無しさん2009/12/01(火) 21:33:37
>>190
語順を工夫して無理やり2語目以降に持ってくのが基本だと思う。
またはone, two, three, .....とちゃんとスペルアウトしちゃうか。

アンダースコアで始まる名前が禁止じゃないルールならその手もあるのかも知れないけど、
見難いから個人的には嫌い。
0195デフォルトの名無しさん2009/12/01(火) 23:19:09
bbs2ch
0196デフォルトの名無しさん2009/12/01(火) 23:51:07
Hoge www2ch;
Hoge web2ch;
Hoge _2ch;
Hoge nichan;
Hoge obj2ch;
0197デフォルトの名無しさん2009/12/02(水) 00:05:35
Map<string, Hoge> var;
var["2ch"] = 入れたいもの
0198デフォルトの名無しさん2009/12/02(水) 08:40:52
NiChan はありかなーって気もするな。
BBS2ch とか Web2ch あたりが妥当な気がするけど。
0199デフォルトの名無しさん2009/12/02(水) 13:13:58
例示された物に限定される答えを出してる奴は馬鹿なの?
0200デフォルトの名無しさん2009/12/02(水) 15:03:02
iHoge
iiHoe
iiiHoge
ivHoge
vHoge
0201デフォルトの名無しさん2009/12/02(水) 16:06:14
>>193
0→O が抜けてる。
0202デフォルトの名無しさん2009/12/02(水) 17:51:25
>>199
・何らかの単語を先頭に付けて誤魔化す
・数字部分を英字に置き換える

の2パターンに分類されると思うが?
0203デフォルトの名無しさん2009/12/02(水) 18:01:16
IICh を見て 2ch と判断できるエスパーはあんまりいなそうだ
0204デフォルトの名無しさん2009/12/02(水) 21:37:11
siteInfo_2ch
0205デフォルトの名無しさん2009/12/03(木) 00:20:09
割り込み禁止区間をコード中で簡潔に表現したいのですが、
何か適当な言葉はありませんか?
割り込み禁止と、禁止解除をそれぞれマクロ名に使います。

{
handle h = int_disable();

〜 // 割り込み禁止中

int_enable(h);
}

このようなコードを

XXXX_begin
〜
YYYY_end
のようにしたい
0206デフォルトの名無しさん2009/12/03(木) 00:24:30
mutex
critical section
0207デフォルトの名無しさん2009/12/03(木) 00:41:13
>>205
本当にそれやる必要ある?
別に変に別名つけたり抽象化しようとしたりする必要ないんじゃない?

そのままで十分分かりやすいし、別の表現で言い換えたからって
より分かりやすくなるとも思えないけど・・・
0208デフォルトの名無しさん2009/12/03(木) 00:43:16
INT_OBSTRUCT_BEGIN
INT_OBSTRUCT_END
0209デフォルトの名無しさん2009/12/03(木) 01:18:28
uninterruptible_begin
uninterruptible_end
0210デフォルトの名無しさん2009/12/03(木) 10:32:38
#define CS_BEGIN() EnterCriticalSection(&g_cs)
#define CS_END() LeaveCriticalSection(&g_cs)
0211デフォルトの名無しさん2009/12/06(日) 14:58:32
タイルベースのゲームでマップデータを格納する配列Map[rows][cols]が今あるんだけど
データ構造としてのmap(c++のstd::map)とかぶるのでほかの呼び方にしたい
どんなのがいいかな?
0212デフォルトの名無しさん2009/12/06(日) 15:18:13
自分でマップデータって言ってるんだからmapDataでいいのでは?

さもなくばlandMap, tileMap, tiles, tileMatrixとか
0213デフォルトの名無しさん2009/12/06(日) 15:21:39
>>211
board
field
game_map
0214デフォルトの名無しさん2009/12/06(日) 15:57:01
マップの1タイルを Cell とか Tile って名前にして
MapCells とか MapTiles みたいな名前にしたなぁ。
0215デフォルトの名無しさん2009/12/06(日) 18:06:00
grid
0216デフォルトの名無しさん2009/12/06(日) 21:46:43
>>212-215
thx.
Boardが気に入ったんで使わせてもらいやす
0217デフォルトの名無しさん2009/12/07(月) 01:24:57
センスねえの
0218デフォルトの名無しさん2009/12/07(月) 02:23:33
採用されなかったからって僻むなよ
0219デフォルトの名無しさん2009/12/07(月) 03:01:33
俺は提案してないけどね
0220デフォルトの名無しさん2009/12/07(月) 08:05:36
>>218
あるある
0221デフォルトの名無しさん2009/12/07(月) 10:53:11
あるのかよw
0222デフォルトの名無しさん2009/12/07(月) 16:54:44
単位ベクトルを求める関数と、法線ベクトルを求める関数がどちらも normal ぽいんですが、
明確に区別できるように、どうにかなりませんか?
0223デフォルトの名無しさん2009/12/07(月) 17:33:34
>>222
引数が違うから自ずと区別できそうだけど。

[オブジェクト指向版]
void Vector3d::normalize();
Vector3d Surface::get_normal(const Point3d& at);

[対象を引数で与える場合]
void normalize_vector(struct vector3d* v);
struct vector3d get_normal_vector(const struct surface* s, const struct point3d* p);
0224デフォルトの名無しさん2009/12/07(月) 18:00:42
Vector GetNormalizedVector(Vector *a); // Aの単位ベクトルを返す
Vector GetNormalVector(Vector *a, Vectir *b); // A,Bで構成された平面に対する法線ベクトルを返す
0225デフォルトの名無しさん2009/12/07(月) 20:03:57
そっち方面の文化知らないんで言い掛かりになるかもしれんけど、
Normalizeって要するに正規化するってことであって必ずしも単位ベクトルにするとは
限らないんじゃないのかね。

長さ100に揃えるのだって正規化だよね。
はっきりunitとかunityって言葉を使った方がいいんじゃないか。

というわけで、
GetUnitVector

OOPなら
Vector.NormalizeToUnity()
Vector.ToUnity()
0226デフォルトの名無しさん2009/12/07(月) 20:27:58
単位ベクトルは普通にUnitVectorで翻訳はあってるみたいだね
数学的に単位ベクトルを求めることをNormalizeするっていうのかな?
0227デフォルトの名無しさん2009/12/07(月) 22:11:59
知らないなら黙ってればいいのに
0228デフォルトの名無しさん2009/12/08(火) 02:04:20
知らないなら調べてから出直せばいいのに
0229デフォルトの名無しさん2009/12/08(火) 02:09:51
知らないから黙ってるのに
0230デフォルトの名無しさん2009/12/10(木) 19:27:46
あるオブジェクトを一定時間後に自動削除するためのカウントダウンタイマー変数なんだけど
m_KillTimer って名前つけてるんだ。
でもなんかこれだと「タイマーを無効化する」メソッドみたいな名前だ。
どうすればいいかな


0231デフォルトの名無しさん2009/12/10(木) 19:31:36
m_autoDeletionTimer
0232デフォルトの名無しさん2009/12/10(木) 20:15:23
>>230
別にそのままでもいいじゃん。
メンバ変数を表すプリフィクスがついてるものをメソッドだと思う奴ないないよ。

どうしても明示的にするなら
mKillerTimer, mTimerToKill, mKillingTimer, mDisposingTimer
とか

っていうか、どうせそんなオブジェクト他にタイマ持ってないんだろうから
単にmTimerでもいいんじゃないの。
クラス名さえ十分適切ならそれでわかるし。
0233デフォルトの名無しさん2009/12/10(木) 20:51:46
TimerToKill 派だなあ
KillerTimer とかも物騒でいいな
0234デフォルトの名無しさん2009/12/10(木) 22:17:59
>>230
文面を見る限りでは、そのオブジェクトには生存可能な期間(Time To Live)があって、
TTLが0になったらオブジェクトが死ぬイメージに見えたよ。

ってことで、m_ObjectTTL を提案してみる。
0235デフォルトの名無しさん2009/12/10(木) 22:18:13
m_deleteTimer
0236デフォルトの名無しさん2009/12/10(木) 22:22:51
TTLは知ってる人だとどんぴしゃだね。
でもどっちかっていうと削除されるべきオブジェクトの方に持たせたいところではある。
0237デフォルトの名無しさん2009/12/11(金) 00:07:56
質問者が欲しいのは、そのTTL値をデクリメントするタイミングを生成する
オブジェクトの名前だと思うから、ちょっと違う気がする。

ちなみにTTLってネットワーク以外でも一般的に使うんだろうか。
普通TTLって聞いたら(今時あまり使われないとはいえ)半導体の方を想像しそう
0238デフォルトの名無しさん2009/12/11(金) 00:20:59
life-timer
0239デフォルトの名無しさん2009/12/11(金) 00:40:25
timedReaper

これじゃ分からんな。
0240デフォルトの名無しさん2009/12/11(金) 01:25:17
変数名とかじゃないんですが、
時刻の表示で、(プログラム起動から)何日目が経過、
ってどう出力したらいいでしょうか?

(経過した日) HH:MM:SS

という感じで簡潔に出力したいのですが。
0241デフォルトの名無しさん2009/12/11(金) 07:37:08
>>240
スレ違い
0242デフォルトの名無しさん2009/12/11(金) 07:37:46
>>240
uptime
elapsed
0243デフォルトの名無しさん2009/12/11(金) 07:45:01
>>240
誰か英語に直してください〜
http://pc12.2ch.net/test/read.cgi/tech/1194343330/
0244デフォルトの名無しさん2009/12/13(日) 10:45:07
「自動的にオブジェクトを追加するかどうか」を指定するbool変数なんですが

bool m_AddObjectAutomatically
bool m_AddObjectAutomaticallyFlag
bool m_AllowAddObjectAutomatically
bool m_AcceptAddObjectAutomatically
bool m_AddObjctAutomaticallyEnabled
bool m_CanAddObjectAutomatically

それともboolにしないで
enum OBJADD {OA_MANUAL, OA_AUTO} m_ObjectAddition
とかのほうがいいですかね?
0245デフォルトの名無しさん2009/12/13(日) 10:59:35
unsigned m_flags;

F_AUTODEL = 0x1
0246デフォルトの名無しさん2009/12/13(日) 17:20:41
automatic
addition
objects

を省略して

bool auto_add_objects_;
0247デフォルトの名無しさん2009/12/13(日) 20:45:55
すっげヘタな命名ですね
0248デフォルトの名無しさん2009/12/13(日) 20:52:52
命名してから言え
0249デフォルトの名無しさん2009/12/13(日) 22:27:18
他は略してるのにobjectsだけ略されてないのがすげー気になる。
0250デフォルトの名無しさん2009/12/13(日) 22:39:23
bool a_a_o_;
0251デフォルトの名無しさん2009/12/14(月) 00:53:41
バイナリエディタで最強なのはooo
0252デフォルトの名無しさん2009/12/14(月) 01:02:58
add
append
って使い分けてる?
■ このスレッドは過去ログ倉庫に格納されています