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

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

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

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
0559デフォルトの名無しさん2011/12/18(日) 04:19:38.47
BeginXXX
EndXXX
0560デフォルトの名無しさん2011/12/18(日) 04:38:37.29
reset
revert
restore
rollback
0561デフォルトの名無しさん2011/12/18(日) 05:05:32.38
変更してた内容を適用するんじゃなくて、あくまで元に戻すってことは、
例にもあるような、sandbox的な使い方ってことなのかな。

でもsandboxだと、あくまで一時的な作業データそのものを示すような気はするね。
0562デフォルトの名無しさん2011/12/18(日) 08:22:33.66
locally do ... done
0563デフォルトの名無しさん2011/12/18(日) 08:35:18.81
doAtomically
0564デフォルトの名無しさん2011/12/18(日) 18:59:10.81
setUp
tearDown
0565デフォルトの名無しさん2011/12/18(日) 23:45:16.29
変数じゃないけどスクリプトでマウスとキーボードを動かせるマクロソフトを作ろうと思うんだけど
名前何にしようかな
0566デフォルトの名無しさん2011/12/19(月) 00:44:42.12
おいたしちゃうぞ(テヘッ).vbs
0567デフォルトの名無しさん2011/12/19(月) 05:43:06.65
痛い名前にすると普及すかも
0568デフォルトの名無しさん2011/12/19(月) 07:20:06.77
ねぇ見てて.vbs
0569デフォルトの名無しさん2011/12/19(月) 18:57:29.52
検索系の関数の名前ってどうしたらいいですか
searchXXXXとかだと長くなってしまう・・・
0570デフォルトの名無しさん2011/12/19(月) 19:00:56.75
container.select(pred, buffer);
0571デフォルトの名無しさん2011/12/19(月) 19:13:52.67
findXXXX にすれば2文字短くなる
0572デフォルトの名無しさん2011/12/19(月) 19:34:04.25
これで長いとかセンス無さすぎ
0573デフォルトの名無しさん2011/12/19(月) 19:49:15.72
センスは「有る無し」じゃないんだよ

自分のセンスと「合う合わない」なんだよ
0574デフォルトの名無しさん2011/12/19(月) 19:53:36.32
それはそうかもしれん
0575デフォルトの名無しさん2011/12/19(月) 20:00:58.14
識別子の頭に数字が使えたらと思うことがたまにある

3DObject とか、128bitKey とか

なんでできない言語が多いんだろ
構文解析上なにか難しい事があるとは特に思えないけど
0576デフォルトの名無しさん2011/12/19(月) 20:12:16.81
>>573
君はセンスが無いね


0577デフォルトの名無しさん2011/12/19(月) 20:22:52.68
>>575
恐らくは接尾辞絡みだろうね
0578デフォルトの名無しさん2011/12/19(月) 20:37:50.04
ThreeDObject
0579デフォルトの名無しさん2011/12/19(月) 21:00:13.09
ЗDObject
0580デフォルトの名無しさん2011/12/19(月) 21:03:06.31
_3DObj
0581デフォルトの名無しさん2011/12/19(月) 21:03:32.28
>>572
おい、>>578 や >>579 らにも言ってやれよ
0582デフォルトの名無しさん2011/12/19(月) 22:02:11.89
明らかなネタにもしっかりと突っ込んでいかないとな!
0583デフォルトの名無しさん2011/12/19(月) 23:01:41.22
>>578 や >>579 はネタだろうが、>>580 はわりとマジっぽい

普段からそういうプログラム書いてそう
0584デフォルトの名無しさん2011/12/19(月) 23:04:37.74
>>583
>>580がなにか問題でも?
0585デフォルトの名無しさん2011/12/19(月) 23:08:46.71
プライベートメンバ名の先頭にアンダースコアをつける文化圏かと
0586デフォルトの名無しさん2011/12/19(月) 23:20:13.97
>>564
問題は何もない

ただ「識別子の頭に数字をつけるため」にアンダースコアを使うという発想が
一般的じゃないという意味でヘンというだけ

かといってネタとも思えない
本当に普段からそういう目的でプログラム書いてそうだと思った

>>585 なら前例を多く見てきたから分かるけど、
数字をつけるためってのはちょっとね、初めてだったよ
0587デフォルトの名無しさん2011/12/19(月) 23:32:25.95
_1とか普通に使いまくりだろ
0588デフォルトの名無しさん2011/12/19(月) 23:37:24.31
>>586
プライベートメンバの先頭にアンダースコアをつけない人にとってはなんら問題ないと思えることは予想できる。
ただ、プライベート(略)つける人が見たときに文句を言われることは必至だけどね。
0589デフォルトの名無しさん2011/12/20(火) 00:20:13.17
2dObjectってかけたほうがインターフェースシンプルになるよね
0590デフォルトの名無しさん2011/12/20(火) 00:42:21.51
RPGの賽振り処理書いてるときに先頭を数字にしたくなったっけ。
3d6とか。
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
■ このスレッドは過去ログ倉庫に格納されています