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

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

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

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
0591デフォルトの名無しさん2011/12/20(火) 00:44:37.25
rand3d6でいいじゃん
0592デフォルトの名無しさん2011/12/20(火) 00:50:22.82
どう回避すればいいか尋ねたわけじゃないんだが。
0593デフォルトの名無しさん2011/12/20(火) 00:54:48.83
個人的にはなるべくなら_でプリフィクスの識別子は使いたくないね。
メンバ変数も含めて。

enumのメンバー名なんかで、どうしても数値そのものをメンバ名にする必用が
あったりする場面以外では極力避けたい。

やっぱり視覚的に見づらいんだよな。
0594デフォルトの名無しさん2011/12/20(火) 00:55:35.23
3dと書いたら普通はdouble型の数値リテラルなのに
3d6と書いたら識別子なんて紛らわしくてたまらん
0595デフォルトの名無しさん2011/12/20(火) 01:42:43.11
>>590
ダイス数や面数そのものが変数名になることって無くないか?
自分もサイコロ処理は書いたことがあるが、

 int nDice = 3;
 int nFaces = 6;
 int result = RollDice( nDice, nFaces );

…みたいな感じになったぞ。
0596デフォルトの名無しさん2011/12/20(火) 01:59:36.01
パラメータをenumにする場合とかじゃないかな
enum DICE={3d6,…};
0597デフォルトの名無しさん2011/12/20(火) 11:45:37.59
描画関係のメソッドを集めたスタティックなクラスの名前おねがいしゃす
Graphicsとかだと既存とかぶるし
GraphicUtil?
0598デフォルトの名無しさん2011/12/20(火) 12:06:25.11
おすすめはしないがヘルパー関数を集めたクラスは、
たとえばMathHelperなどがある。
0599デフォルトの名無しさん2011/12/20(火) 12:23:57.74
バランスシートを表すものを作ってますが、資産か負債かを表すenumの名前は何がいいでしょうか。
資産はAsset、負債はLiabilityですが、これを示すタイプの名前です。
どうも英語にはそういう概念がないのでは、という気配を感じていますが。
0600デフォルトの名無しさん2011/12/20(火) 12:26:05.72
順序的な意味で前、後ろって英語でなんていうの?
{a, b, c, d, e, f}
ってシーケンスがあって日本語では
aはeの前にある
dはcの後ろにある
と書くところを英語だとどうなる?
front/back、prev/nextはなんかニュアンス違う気がする
0601デフォルトの名無しさん2011/12/20(火) 13:26:18.49
precede, precedent ⇔ follow
かな

後者にはsucceedもあるけど、ぱっと見で間違えそう
0602デフォルトの名無しさん2011/12/20(火) 14:02:26.17
英語でも数列の話では、before, afterなんかを使うけど。
0603デフォルトの名無しさん2011/12/20(火) 16:00:02.07
>>597
既存とかぶってもいいように名前空間が。これもまたおすすめはしないけれど。
0604デフォルトの名無しさん2011/12/20(火) 16:01:39.20
隣接してるかどうか関係なく、そのように言うのかな
0605デフォルトの名無しさん2011/12/20(火) 18:49:27.14
調べたらbefore/behindだってさ
0606デフォルトの名無しさん2011/12/20(火) 22:36:32.06
behind の対義語は ahead だと思ってたぞ…。

before/after
ahead/behind
lead/follow
0607デフォルトの名無しさん2011/12/21(水) 01:26:44.95
MATLABで一時的な数値の記憶など汎用的に使用する変数としてvar1, var2,...という変数名を使っています
しかし、数字を書き忘れると分散を求めるvar()と認識される可能性があります
なにか他に良い変数名はないでしょうか
0608デフォルトの名無しさん2011/12/21(水) 01:54:35.37
困ったらhogeだろう
0609デフォルトの名無しさん2011/12/21(水) 04:13:48.59
temp
0610デフォルトの名無しさん2011/12/21(水) 09:17:55.69
サブシステム間の複雑に込み入ったN対Nの相互参照関係を解消するために
サブシステムを子要素、すべてのサブシステムを集約したクラスを親要素としてN個の1対1の相互参照にさせて
親に問い合わせると問い合わせを適切なサブシステムにディスパッチしてくれる
という構造でプログラムを作ったんだけどこの親と子の関係ってどんな名前がいいですかね?
0611デフォルトの名無しさん2011/12/21(水) 09:33:28.04
relationship
0612デフォルトの名無しさん2011/12/21(水) 09:36:22.56
>>610
あんま想像できなかったけど、
相互作用を記述するにはGoFのMediatorパターンが知られている。
一個のMediatorに対し複数のColleagueがあるような形。
0613デフォルトの名無しさん2011/12/21(水) 10:09:28.20
>>610
親の名前と子の名前と関係の暫定名は何?

0614デフォルトの名無しさん2011/12/21(水) 11:01:42.06
DDDにおけるAntiCorruptionLayerを思い出すなぁ。
親子という表現がよく分からんけど、Facadeパターンのように思える。
0615デフォルトの名無しさん2011/12/21(水) 11:14:52.41
Facadeは無いわ
0616デフォルトの名無しさん2011/12/21(水) 11:55:20.61
>>575
例えばC言語で 3L とか 0xf なんて識別子使われたら困る
数値リテラルとして有効な書法だからね
んで例外作るくらいなら頭に数字は全部禁止!としたほうが
プログラマからしても楽だと思う
0617デフォルトの名無しさん2011/12/21(水) 14:20:20.61
>>608,609
回答どもです

hogeは実際に使ってるソースを見たことがないのでいまいち感覚が掴めない
tempは何度か他の変数に使ったことがあるし・・・う〜んどうしよう
レス参考にして考えてみようと思いますありでした
0618片山博文MZ ◆0lBZNi.Q7evd 2011/12/22(木) 12:34:11.54
タブ型で文書を制御するフレームウィンドウのクラスはどんな名前がいい?
CTabDIFrameWndか?
0619デフォルトの名無しさん2011/12/22(木) 12:42:46.08
DIって何
0620片山博文MZ ◆0lBZNi.Q7evd 2011/12/22(木) 12:44:27.32
wikiを見て分かりました。CTDIFrameWndで決定します。
0621デフォルトの名無しさん2011/12/22(木) 12:55:23.01
クラッシュトゥデスクトップインナーフレームの杖!
0622片山博文MZ ◆0lBZNi.Q7evd 2011/12/22(木) 14:34:01.92
CWandOfCrashToDesktopInnerFrame
0623デフォルトの名無しさん2011/12/22(木) 17:17:07.72
コマンドとクエリーって何が違うの?
0624片山博文MZ ◆0lBZNi.Q7evd 2011/12/22(木) 17:23:09.61
コマンドは、指令。クエリは、問い合わせ。
0625デフォルトの名無しさん2011/12/22(木) 17:28:30.36
なりほど
コマンドが非コンスト操作で、クエリーがコンスト操作みたいな感じですね
0626デフォルトの名無しさん2011/12/22(木) 17:55:18.16
insert涙目
0627デフォルトの名無しさん2011/12/22(木) 19:19:35.93
コンスト操作ってなに?
0628デフォルトの名無しさん2011/12/22(木) 19:27:32.62
破壊的かどうかって事じゃね?
0629デフォルトの名無しさん2011/12/22(木) 20:30:24.53
const
0630デフォルトの名無しさん2011/12/24(土) 18:33:34.03
1. minSize
2. currentSize
3. maxSize

上記3つのメンバ変数を持つ Widget(仮) クラスがあり、
currentSize は minSize 以上、maxSize 以下の大きさである

引数として与えられた newSize を
「minSize 以上 かつ maxSize 以下」
にクランプして、それを currentSize に代入する、Widgetクラスのメンバ関数の名前はどうしたらいいですか?
0631デフォルトの名無しさん2011/12/24(土) 19:13:38.86
setSizeでいいじゃん
0632デフォルトの名無しさん2011/12/24(土) 19:15:02.55
普通にsetCurrentSizeでいいのでは.....
0633デフォルトの名無しさん2011/12/24(土) 19:18:16.81
クランプしないでエラーを返すメソッドと、
クランプして設定するメソッドがあって、
クランプする事を強調したいのなら

setClampedSize とか
0634デフォルトの名無しさん2011/12/24(土) 19:22:01.02
そうなるとminSizeとmaxSizeの名前が気持ち悪い。
0635デフォルトの名無しさん2011/12/24(土) 21:17:25.63
レスありがとう
>>631-632
Set〜だと直前に設定したはずの値をGet〜で取得できず、アクセッサの対として扱えないのが気になります

>>633
クランプが必要になるのであれば設定せずfalseを返す、というメソッドであれば bool trySet(Current)Size(newSize) でいいかなと思っています
メソッドの内容を見ずに、クランプして代入(設定)する/していることが分かる名前があればベストです

>>634
minSize/maxSizeの名前がおかしいのでしょうか?
代わりとなる名前を教えていただけると助かります
0636デフォルトの名無しさん2011/12/24(土) 21:25:53.35
>>635
ゲッターがないのが非対称に感じるというのならゲッターをつければいいのでは?
まさか裸の変数を晒すつもり?

っていうか、話を聞いてると結局何がしたいのか質問者もよく分かってないのかな。
だからWidgetなんていう投げやりなクラス名なのか。
0637デフォルトの名無しさん2011/12/24(土) 23:26:18.22
>>636
>ゲッターがないのが非対称に感じるというのならゲッターをつければいいのでは?

Size newSize(100, 200);
widget.setSize(newSize);
Size gotSize = widget.GetSize();

この地点で newSize == gotSize であるとは限らず、ゲッタ(getSize)とセッタ(setSize)が対にならない
なので、それが気になると書きました

Widgetという名前については、実際に使用しているGUI部品のベースクラスの名前とほぼ同一のものですが、
これについてもオススメがありましたらご教示ください
0638デフォルトの名無しさん2011/12/24(土) 23:33:32.54
>>637
値の範囲を制限するためのクラス(なんでしょ?)に範囲外の値をセットした時に
値が範囲内の適切な値に制限されても誰も変だとは思わないと思うけど。

だってそれがそのクラスの存在意義じゃないの?
0639デフォルトの名無しさん2011/12/24(土) 23:42:50.37
>>637
>この地点で newSize == gotSize であるとは限らず、
これはゲッタとセッタが対で有る事とは無関係
0640デフォルトの名無しさん2011/12/24(土) 23:44:40.01
>>638

>値の範囲を制限するためのクラス(なんでしょ?)
 >>637
 >Widgetという名前については、実際に使用しているGUI部品のベースクラスの名前…

>値が範囲内の適切な値に制限されても誰も変だとは思わないと思うけど。
 >>635
 メソッドの内容を見ずに、クランプして代入(設定)する/していることが分かる名前があればベストです
0641デフォルトの名無しさん2011/12/24(土) 23:49:37.63
>>639
論点はそこではありません。
>>635
>メソッドの内容を見ずに、クランプして代入(設定)する/していることが分かる名前があればベストです
この条件に当てはまる名前を探しています。
0642デフォルトの名無しさん2011/12/24(土) 23:52:16.81
>>640
値の範囲が規制される機能を表すのは、別にメソッド名じゃなくクラス名でも良いでしょ?

というより、値が規制されることを強制したいのならその方がむしろ自然。

逆に、仮に規制なしでも値を設定できるのであれば、今度は設定可能な値の範囲を
表すメンバー(mimSize, maxSize)をクラスが持っていることが不自然。
0643デフォルトの名無しさん2011/12/25(日) 00:13:24.04
>>642
クラス名でも構いませんが、メソッド名を求めているクラスは
1. 他のウィジェット(GUI部品)のインターフェイスまたは基本クラスであり、
2. サイズの設定/取得以外を行う以外のメンバ関数が存在します

また、例としてWidgetというクラスにminSize/maxSizeを持たせましたが、
実際にそれらのメンバ変数を持つのはWidgetクラスの派生クラス、例としてLabelクラスです
派生クラスでは SetClampedSize仮() メンバ関数を実装しますが、本当にクランプを行うかどうかは実装によります
0644デフォルトの名無しさん2011/12/25(日) 00:30:15.17
>>641
関係ない事持ち出すな
0645デフォルトの名無しさん2011/12/25(日) 00:34:09.66
やはりsetClampedSizeでいいな
0646デフォルトの名無しさん2011/12/25(日) 00:45:05.93
setSizeWithClamp
0647デフォルトの名無しさん2011/12/25(日) 01:07:06.20
>>643
やっぱりminSize/maxSizeを持たせるのなら、メソッド名は単純にsetSizeとかsetCurrentSizeとすべき。
メソッド名に値が規制されることを盛り込むセンスはちょっと変な気がする。
繰り返しになるけど。
0648デフォルトの名無しさん2011/12/25(日) 01:52:45.55
>>630
案は俺 setClampedSize を提案したが、よく考えてみれば、
「設定した値がクランプされて格納される」ことをメソッド名で示すのは難しいな
setClampedSize じゃ、クランプ済みのサイズを設定しろ、と言っているように見える

俺も >>647 に同意見だ
メソッドを使うプログラマに「して欲しいこと」はメソッド名に織り込めるが、
メソッドを呼び出した結果「内部状態がどう変化するか」は
メソッド名に入れるべきじゃないような気がする

その代わりに、「どのような意味・役割を持つのか」をクラス名に折り込み、
Widget クラスからは分離させた方が良いのではないか?

具体的には、ClampedSize などの名前のクラスを作り、
設定した値がクランプされて保たれる役割をこのクラスに担わせ、
Widget クラスはこの ClampedSize クラスのインスタンスを保持する
0649デフォルトの名無しさん2011/12/25(日) 02:02:24.87
範囲外の値がセットされた場合どうなるかは
普通コメントやドキュメントに書かれるね
0650デフォルトの名無しさん2011/12/25(日) 02:37:08.73
>>647-649
参考になった。setSize か setCurrentSize にしてみるよ
ありがとうございました
0651デフォルトの名無しさん2011/12/25(日) 16:13:56.44
もとの方針にどうしても従うなら
setSize(calcClampedSize(300));
とかになんのかな
0652デフォルトの名無しさん2011/12/25(日) 17:42:57.69
クラスって3段階のポインタ参照になるから遅いんだよね
0653デフォルトの名無しさん2011/12/25(日) 17:47:06.67
class XXX {
public:
explicit XXX(Container<Hoge> & c) : c(c) { }
void Add(Hoge const & hoge) {
c.push(hoge);
}
private:
Container<Hoge> & c;
};

Container<Hoge> c;
void Func(XXX xxx) {
while(isNotEnd) {
xxx.Add(hoge(...));
}
}


コンテナのインターフェースを制限してpushだけ(あるいはほかの必要なメンバだけ)にしたクラスがあるんだけどなにかいい名前はないかな?
用途はこのFuncを始めとして一部の関数でコンテナに対して間違った操作をコンパイル時チェックできるようにしたいというだけです
ContainerAdapterとかだとちょっと不明瞭な気がするけどあまり気にしないでいいのかな
0654デフォルトの名無しさん2011/12/25(日) 23:16:09.53
>>651
元の方針では
void Widget::ClampSize(Size input, Size output)
 Widget の最小/最大サイズにクランプした input を output に出力する
void Widget::SetSize(Size value)
 Widget のサイズを設定する。最小未満または最大値より大きい値を指定されたのであればアサーション(または例外)
bool Widget::TrySetSize(Size value)
 Widget のサイズを設定する。設定に成功したのであれば true を返す

の3つの関数があって、それらを呼び出していたという経歴があるのだよ
0655デフォルトの名無しさん2011/12/26(月) 05:45:51.74
>>654
Size Widget::ClampSize(Size input);
戻り値はクランプされた値
ってやりたいけど、それはそれとしておいて、
TrySetSizeがあるのなら、SetSizeSafeでもよかったのかもね。
0656デフォルトの名無しさん2011/12/26(月) 05:47:41.87
とはいっても、わざわざメソッドおこさなくても>>651でいいんじゃないのとおもってる。
Size Widget::ClampSize(Size value) にかえるかどうかは適宜。
0657デフォルトの名無しさん2011/12/26(月) 15:10:21.36
〜するひと(あるいは物)って言うと〜er
だけど〜される人ってなんていうの?
攻撃者→attacker
被攻撃者→?
0658デフォルトの名無しさん2011/12/26(月) 15:23:11.49
使う場面にもよるような気がするけど。
ともかく対比として使うことのみが目的なら、-eeで済ますことが多い。今回ならattackee
0659デフォルトの名無しさん2011/12/26(月) 20:29:51.33
debugger と debuggee って、よく説明に出てくるね。
0660デフォルトの名無しさん2011/12/26(月) 20:36:58.06
employer と employee とか
reviewer と reviewee とかもよく見るね
0661デフォルトの名無しさん2011/12/26(月) 23:17:48.43
アンダーフローについてググると決まって浮動小数点数についてという説明が出てきます
整数の場合に最小値から更に減算した場合などはアンダーフローとは呼ばないのでしょうか?
また呼ばないとしたら最小値からの減算をなんと名付けるべきでしょうか?
0662デフォルトの名無しさん2011/12/26(月) 23:22:37.91
整数でも呼び方は同じ
アンダーフロー、オーバーフロー
0663デフォルトの名無しさん2011/12/26(月) 23:23:08.34
呼ぶよ
0664デフォルトの名無しさん2011/12/26(月) 23:23:42.97
演算自体は全く同じだから区別しないんじゃないの
人間の頭の中にある計算の意味次第だから
0665デフォルトの名無しさん2011/12/26(月) 23:59:17.69
>>661
ググった感じだと使わないと思うんだけど...
個人的にもそういう用法は聞いた(読んだ)ことないから違和感感じる。
0666デフォルトの名無しさん2011/12/27(火) 00:02:27.77
情弱君の出る幕はありません
0667デフォルトの名無しさん2011/12/27(火) 00:03:06.63
>>665
お前の感想など聞いてないわw
0668デフォルトの名無しさん2011/12/27(火) 00:04:32.54
998+1 :デフォルトの名無しさん [↓] :2011/12/04(日) 20:21:14.18
>>919,979,981,987,997
英語188/200点ってことは、2、3個ミスったんですよね?
どういう箇所を間違えたんですか?

999 :デフォルトの名無しさん [↓] :2011/12/04(日) 20:28:27.13
>>998
俺は919じゃねーから知らね。センターは175だったし
ただ小卒レベルで偉そうにしてる老害が目障りだっただけ

1000 :デフォルトの名無しさん [↓] :2011/12/04(日) 20:34:56.90
ゆとり(笑)
0669デフォルトの名無しさん2011/12/27(火) 00:07:09.02
[integer underflow]とかググるとそれなりに色々とヒットする。
0670デフォルトの名無しさん2011/12/27(火) 00:11:49.20
>>666-667
少なくとも符号付整数については、オーバーフローとは演算結果が正しくないことを言う。
プラス/マイナスどちらの方向に「オーバーフロー」したかは問わない場合が多い。

どっちが情報弱者だよ。
0671デフォルトの名無しさん2011/12/27(火) 00:22:27.85
英単語能力を鍛える練習はいつから始めたらいいですか?
0672デフォルトの名無しさん2011/12/27(火) 01:32:47.02
アンダーフロー
浮動小数点数同士の計算の結果が、表現できる最小の絶対値以下になること

整数同士の演算結果が-128未満だの-65536未満だのになることはアンダーフローとは言わないが、
このことを「整数のアンダーフロー」と言われてみれば確かに伝わる、空耳アワーの時間がやってまいりました
0673デフォルトの名無しさん2011/12/27(火) 02:12:15.31
>>671
よくわからんけど漢字能力を鍛え始める時期を考えれば結構早期なんじゃない?
0674デフォルトの名無しさん2011/12/27(火) 07:20:28.52
>>670
初めから多寡の問題じゃないんだよ情弱君
0675デフォルトの名無しさん2011/12/27(火) 10:05:14.13
C/C++を前提として、構造体で定数を用意しようと思います。

型の定義の部分を、宣言の部分にまとめてしまっても問題はないのですが、
あえて定義を独立させるとき、型名と定数名は、どのような命名規則になるでしょうか。

なお、現在考えている候補は以下のとおりです。
他に良い規則があればお願いします。

 struct Hoge HOGE;    //同じ名前で定数を大文字に、型をキャメルに
 struct tagHoge HOGE;  //適当なプリフィクス/サフィックスをつける(システムハンガリアン)
 struct Hoge h;       //むしろ型名がメイン
 struct Fuga HOGE;    //全く別の名前を付ける
0676デフォルトの名無しさん2011/12/27(火) 10:07:32.14
好きなようにすればいいんじゃないですか?
なにも規則はありませんよ
0677デフォルトの名無しさん2011/12/27(火) 11:00:46.91
struct hoge_t hoge;
0678デフォルトの名無しさん2011/12/27(火) 11:59:42.68
>>675
独立した型名を使うことを考えてないなら struct Hoge Hoge; で隠しちゃえば、
別の名前考える手間も省けていいんじゃない?
0679デフォルトの名無しさん2011/12/27(火) 12:50:37.72
>>677
_tってtime_tとかの_t?

>>678
ああそれは確かに。でもちょっと怖いw
0680デフォルトの名無しさん2011/12/27(火) 12:53:00.86
typedef 〜 THoge;
class CHoge;
struct SHoge;
class IHoge { virtual 〜 } ;
template <class THoge> 〜
0681デフォルトの名無しさん2011/12/27(火) 13:09:03.96
日本語で書いてgoogle翻訳に聞いたのをそのまま使う
コメントで元の日本語も添える
最近はめんどくさくなってきて全部コレでいい気がしてきた
0682デフォルトの名無しさん2011/12/27(火) 17:06:21.28
え?
0683デフォルトの名無しさん2011/12/27(火) 19:09:01.64
>>675
他の用途もある構造体なんだろうか。
定数用途専用なら無名でいいんじゃないかな。
struct { 〜〜 } hoge
0684デフォルトの名無しさん2011/12/27(火) 21:19:11.01
申請書クラスを作りたいときクラス名は何にすりゃいい?
0685デフォルトの名無しさん2011/12/27(火) 22:35:01.79
>>684
そのまま英訳すると Application だからどうしようか悩んでるの?
0686デフォルトの名無しさん2011/12/27(火) 22:54:57.70
Formだから悩んでるのかもしれない

申請書クラスってよく見かけるけど、別に用紙とかの情報持つわけじゃないから申請情報クラスとかでいいのかも
0687デフォルトの名無しさん2011/12/27(火) 23:45:33.76
>>685
Yes
0688デフォルトの名無しさん2011/12/27(火) 23:52:24.77
card
0689デフォルトの名無しさん2011/12/28(水) 00:05:35.76
ApplicationForm
0690デフォルトの名無しさん2011/12/28(水) 01:18:21.45
皆さんありがとうございます。Formで行ってみようかと思います。
ExcelのApplicationオブジェクトと紛らわしいので。
あと用紙も4枚綴りでカードってイメージじゃないので。
■ このスレッドは過去ログ倉庫に格納されています