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

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

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

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
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枚綴りでカードってイメージじゃないので。
0691デフォルトの名無しさん2011/12/28(水) 01:49:29.35
カルテは何枚あっても違和感ないのかな、と混乱の種を。
0692デフォルトの名無しさん2011/12/28(水) 01:53:46.64
カルテはchartだったすまんこ
0693デフォルトの名無しさん2011/12/28(水) 07:23:46.54
気にするなちんこ
0694デフォルトの名無しさん2011/12/28(水) 19:28:50.60
四角形の大きさを表現するクラスRectangleがあって、
外側の大きいRectangleと内側の小さいRectangleとの差(上、下、右、左の厚み)を表現するサイズを作りたいんだけど、名前をどうしようか迷う

0695デフォルトの名無しさん2011/12/28(水) 19:32:04.57
WPFだとThickness型のMarginプロパティとかだったな
0696デフォルトの名無しさん2011/12/28(水) 19:36:27.47
理想的な回答だな
06975652011/12/29(木) 16:32:24.06
せっかく回答してくれたけど結局自分で名前をつけたよ
作る前に質問したから10日しかたってないんだな
http://makuru.tenohiragaeshi.com/
0698デフォルトの名無しさん2011/12/29(木) 16:34:28.63
お、ねぇ見てて.vbs 完成したのか
0699デフォルトの名無しさん2011/12/29(木) 17:11:37.80
複数プロセスの起動を抑止するクラスを作りたいんだけど何がいいだろうか
SingleProcessはなんか違うよなあ
0700デフォルトの名無しさん2011/12/29(木) 17:14:55.05
int main(void) {
GateKeeper gateKeeper;
};
0701デフォルトの名無しさん2011/12/29(木) 18:08:35.54
ProcessMutexer
SingletonEnforcer
SingleInstanceForcer

こんなとこ?
0702デフォルトの名無しさん2011/12/29(木) 18:41:53.02
diproccesssuppressor
0703デフォルトの名無しさん2011/12/29(木) 19:37:07.60
ProcessManager
0704デフォルトの名無しさん2011/12/29(木) 19:52:43.29
SingleLauncher
0705デフォルトの名無しさん2011/12/29(木) 20:06:02.42
普通に英語でAlternateCheckerとかではダメなんですか?
0706デフォルトの名無しさん2011/12/29(木) 20:15:47.08
それのどこが普通だよw
0707デフォルトの名無しさん2011/12/29(木) 21:44:42.17
>>700-705
ありがとう参考になります
0708デフォルトの名無しさん2011/12/31(土) 04:53:53.35
>>695
亀レスだがサンクス
そんなクラスが存在していたとは知らなんだ
0709デフォルトの名無しさん2011/12/31(土) 09:55:18.67
識別子でよく使う単語の(世界でだいたい通用する)省略形を
集めたページの存在を知っていると、名前決めの際に役に立ちますので紹介します

http://www.wgag.net/doc/abbr.html

ほかにも、programming abbreviation などをキーワードにググると色々出てきます
0710デフォルトの名無しさん2011/12/31(土) 10:44:37.10
いまさら名前決めとかアホか
そういうのは解読に使うもんだ
0711デフォルトの名無しさん2011/12/31(土) 13:49:27.52
〇〇を持ってる××とかに機械的に付けれる命名法則ってある
class Object { } ;
class ObjectWhichHasPosition : public Object {
math::vector position;
};
class ObjectWhichHasChildren {
std::vector<Object *> children;
};
なんかダサい
0712デフォルトの名無しさん2011/12/31(土) 14:06:32.65
ObjectWithPositionとか

MSのCOMインターフェイスでIObjectWithSiteなどというのもあるし
0713デフォルトの名無しさん2011/12/31(土) 15:11:00.40
>>711
余計なお世話かも知れないが、メンバ変数の存在を強く意識したクラスなんて差し替えしにくいし、
ましてや名前にまでそれをつけようってのはとても恐ろしいことだ。
0714デフォルトの名無しさん2011/12/31(土) 19:24:02.28
まあ、普通はそういうのは名前で表示するものではないし、したところで意味がないよね。
どうして素直にインターフェイスではだめなんだろう。
0715デフォルトの名無しさん2011/12/31(土) 21:47:16.69
空間に登録されたバウンディングボックスとハンドルのペアを集約したクラスがあります
このクラスはバウンディングボックスとハンドルのベクタを与えると、
引数のバウンディングボックスに衝突するバウンディングボックスとペアになっているハンドルを引数のベクタに挿入します
クラス名、メソッド名は何がいいでしょうか。実装は隠蔽されているので実装を反映させた名前は避けたいです
0716デフォルトの名無しさん2011/12/31(土) 21:54:35.82
シンプルにGetHits
0717デフォルトの名無しさん2012/01/03(火) 01:53:43.35
数値的に解析するってなんて言えばいい?parseAsNumberだと不自然だよね。。
0718デフォルトの名無しさん2012/01/03(火) 07:22:26.97
numericalAnalysis
0719デフォルトの名無しさん2012/01/03(火) 12:09:02.68
analyzeNumerically
0720デフォルトの名無しさん2012/01/03(火) 12:47:07.92
numerical_insight
0721デフォルトの名無しさん2012/01/03(火) 13:44:45.87
数値的に解析って何?
0722デフォルトの名無しさん2012/01/03(火) 13:59:37.20
>>721
対象となるものの数値的に現れる性質を調べたり、
あるいは(主に数学的な)問題を数値的に解くことを言っているのだと思うが
(それ以外の解釈を俺は思いつかん)

逆に数値的じゃない解析というのは、
対象となるものの構造的な性質を調べたり、
(主に数学的な)問題を解析的に解くこと、が例として挙げられるな
0723デフォルトの名無しさん2012/01/03(火) 14:50:06.82
>>717
むしろそれでもいいかと。
でも今時はto + 変換後の型名が一般的では?

toInt
toDouble
HogeToInt
HogeToDouble

例えばこんな感じ。
0724デフォルトの名無しさん2012/01/03(火) 14:57:48.38
「解析」という言葉に普通込めるニュアンスと、
「parse」という言葉に普通込めるニュアンスは、
明らかに違うと思うんだが・・・
0725デフォルトの名無しさん2012/01/03(火) 17:09:05.02
「数値として解釈」と言いたかったんだろうな。
0726デフォルトの名無しさん2012/01/03(火) 17:54:52.93
>>724-725
くだらない議論。
というか、解釈と解析なら、むしろ解析の方が妥当。
解釈というと逐語訳ではない(意訳的な)変換をニュアンス的に含むからね。
0727デフォルトの名無しさん2012/01/03(火) 18:32:05.19
はぁ?
0728デフォルトの名無しさん2012/01/03(火) 21:24:08.74
文字列を数値などに変換する→ParseHoge, Hoge.Parse
※基本的に重い処理

あるものの表現方法を変換する→ToHoge, PiyoToHoge
※基本的に軽い処理
0729デフォルトの名無しさん2012/01/03(火) 23:34:02.26
いわゆる数値解析とはまったく関係ありませんでした、と。
0730デフォルトの名無しさん2012/01/03(火) 23:47:07.03
関係あるわけないだろ。
そもそも「数値解析」なんていうアバウトなメソッドがある訳がない。
訳のわからんこと言ってる連中はこんなもの想像してたのか。
頭おかしいなw
0731デフォルトの名無しさん2012/01/04(水) 06:09:42.94
ほぉ?
0732デフォルトの名無しさん2012/01/04(水) 06:46:55.13
むぅ
0733デフォルトの名無しさん2012/01/04(水) 13:52:42.09
らっぱ
0734デフォルトの名無しさん2012/01/04(水) 15:34:11.88
検索処理で上位のグループだけ返す(数を指定せずプログラムが自動的に判断して返す)オプションの名前
0735デフォルトの名無しさん2012/01/04(水) 16:14:18.55
I'm feeling lucky

……は冗談として、SQLだとLIMIT句を使って取得数を変えたりするから、
それに倣って limits(NumOf)Records とか?
0736デフォルトの名無しさん2012/01/04(水) 17:04:16.60
↓しんのしこうていAA
0737デフォルトの名無しさん2012/01/04(水) 20:51:01.68
GetHots
GetHotRatings
0738デフォルトの名無しさん2012/01/05(木) 02:50:03.84
FindTopRecords
GetTopRecords


class Node { // ツリー構造のノード
private:
 List<Node> children;
 List<Hoge> hoges;
};

�@ 自身のhogesに登録されているHogeの数を取得するメソッド
�A 自身のhogesに登録されているHogeの数 + 自身を祖先として持つ全ての子ノードに登録されているHogeの数を取得するメソッド
を命名していただきたい
0739デフォルトの名無しさん2012/01/05(木) 02:56:01.12
GetHogesCount(bool isRecursive)
0740デフォルトの名無しさん2012/01/05(木) 05:50:09.16
>>739
なるほど、その手があったか!

とは思うものの、やはり�@と�Aの2つに分けて定義したい
0741デフォルトの名無しさん2012/01/05(木) 07:45:34.95
なんで?
0742デフォルトの名無しさん2012/01/05(木) 09:00:37.51
CountHoges
CountHogesRecursively
0743デフォルトの名無しさん2012/01/05(木) 10:48:18.53
>>737-738
Get〜 だと取得する関数にならね?
0744デフォルトの名無しさん2012/01/05(木) 13:00:07.89
GetCount
GetRecursionCount
0745デフォルトの名無しさん2012/01/05(木) 15:09:36.38
CountDescendantHoges
0746デフォルトの名無しさん2012/01/05(木) 20:20:06.71
レスサンクス
�@ GetHogeCount
�A GetHogeCountRecursively にしてみようかと
0747デフォルトの名無しさん2012/01/05(木) 20:31:26.13
RecursionCountの方がいいと思うよ。
英語わかんなくてもググってヒット数比べりゃわかると思うけど。
■ このスレッドは過去ログ倉庫に格納されています