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

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

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

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
0041デフォルトの名無しさん2011/08/09(火) 20:46:50.25
>>31
1. onClick1
2. onClick3 (システムがそれを処理するイベントはonClick2)
3. hogeFound
4. loadReady
5. loadStarted
6. loadFinished
0042デフォルトの名無しさん2011/08/09(火) 22:17:39.15
過去分詞とか使いたくないからonClickPreprocess かな・・なんか引っ掛かるが間違う奴はいないだろ。
0043デフォルトの名無しさん2011/08/10(水) 00:32:23.97
奇妙なこだわり持つなよ。
どうせ大した根拠無いんだろうに。
0044デフォルトの名無しさん2011/08/10(水) 00:41:10.42
馬鹿言え
不規則動詞の活用が覚えられないからに決まってるだろ
0045デフォルトの名無しさん2011/08/10(水) 00:48:25.90
大した根拠じゃないじゃん
0046デフォルトの名無しさん2011/08/10(水) 01:12:46.29
そんなに大マジで返されても困るわ
0047312011/08/10(水) 05:40:30.27
>>40

・1番、2番
マウス関連のイベントを発生させる Mouse クラスが、自身に登録されている全てのリスナーに通知するイベント
1番のイベントはキャンセル用の出力パラメータを持ち、キャンセルされたのであれば、2番のイベントが発生しない

0048312011/08/10(水) 05:43:01.23
・3番、4番、5番
ファイルなどのバイナリストリームからツリー構造のデータを読み込むメソッド LoadDataTree() があり、このメソッドの呼び出し中にノードオブジェクトへ通知されるイベント

4番 : LoadDataTree() が現在のノードの読み込みを開始する時に現在のノードに通知するイベント
   1番イベントと同じく、イベントを処理してキャンセルすることができ、キャンセルしたのであれば LoadDataTree() メソッドは即座に終了する

3番 : LoadDataTree() が現在のノードの子ノードを見つけたときに、現在のノードへ通知するイベント
   Hoge == 子ノードだね
0049312011/08/10(水) 05:45:03.80
5番 : ネタとしていれてみただけだが、意味合いとしては1番イベントに対する2番イベントみたいなもの

6番 : LoadDataTree() が現在のノードの読み込みを終了した時に、現在のノードに通知するイベント
0050デフォルトの名無しさん2011/08/10(水) 16:04:37.38
で、既出の案には何か不満でもあるのか?
0051312011/08/10(水) 19:17:04.53
>>50
で、あんたのお気に入りはどの案なんだ?
0052デフォルトの名無しさん2011/08/10(水) 20:21:40.82
36以外はまあまあ
0053デフォルトの名無しさん2011/08/10(水) 21:15:24.65
>>31
分かってると思うけど、発生順序が違うだけの同じようなイベントを定義するのは
あんまり良いことじゃない。

どうしてもという場合は、イベントを発生させるクラスにとっての意味ではなく、
リスナー側にやって欲しい処理で命名した方が分かりやすいと思う。(本来邪道臭い気もするけどね)

順序が欲しくなるのは、イベントハンドラ内で利用される別のオブジェクトのデータが
先に更新されている必要がある場合が多いだろうから。
0054312011/08/12(金) 06:50:56.03
> 分かってると思うけど、発生順序が違うだけの同じようなイベントを定義するのは
> あんまり良いことじゃない。
複雑で分かりにくくなることであれば、そこはかとなく理解している
ただ、今まででそれが必要になったことがあるので尋ねた


イベントハンドラ名に「On」を付ける意見が多いな
言語によっても違うだろうけど、Onは付けるべき、付けないでもいい?
0055デフォルトの名無しさん2011/08/12(金) 09:31:43.01
二文字でイベントっぽさが出るので個人的には好き
0056312011/08/15(月) 05:54:31.83
参考になった。ありがとう
0057デフォルトの名無しさん2011/08/17(水) 19:50:20.77
HogeクラスとIHogeインターフェースがあります。Hogeクラスのインスタンスを
コンストラクタの引数に取り、IHogeインターフェースを実装したHogeAdapterクラスが既にあります。
その逆バージョンのクラスの名前をお願いします。
IHogeインターフェースをコンストラクタの引数にとり、Hogeクラスの派生クラスの
名前です。

0058デフォルトの名無しさん2011/08/17(水) 20:03:13.18
>>57
いくら設計議論のスレでなくても、さすがにそれは根本的に考え方がおかしいといわざるを....
0059デフォルトの名無しさん2011/08/17(水) 20:05:50.81
>>58
いや、考えようによっては、名前を決めるということは設計に他ならないともいえる。
だから、設計に口出すのも似たようなもんだとも思える。
0060デフォルトの名無しさん2011/08/17(水) 22:41:29.34
57ですが、全然おかしくないと思いますが。
具体的にはStreamクラスがあります。基本は派生クラスのFileStreamやらでストリームを
扱います。ただ、WindowsのCOMに渡すとき、COMのIStreamインターフェースを
渡す必要があるのですが、そのために、既にStreamAdpaterクラスが用意されてます。
また、COMから返るのはIStreamインターフェースなのですが、通常のライブラリ
では、Streamクラスをベースに扱うようにできてるので、逆バージョンがほしいのです。

0061デフォルトの名無しさん2011/08/17(水) 22:46:02.42
具体的に書くべきでした。すみません。
0062デフォルトの名無しさん2011/08/17(水) 23:35:44.87
>>60
ではベタにComStreamAdapterとか。
まあこれでよければ質問しないかもしれんけどw
でも変に捻っても意味ないよねこういうのは。

アダプダーだと考えなければ、単にComStreamというのもあり?
0063デフォルトの名無しさん2011/08/18(木) 00:47:55.23
>>62
StreamAdapterのまんまでIStreamAdapterぐらいしか思いついていませんでした。
ありがとうございます。
0064デフォルトの名無しさん2011/08/20(土) 09:56:05.41
succやpredをよく見るのですが、これ何の略でしょうか?
前とか先とか関連だと思うのですが...
0065デフォルトの名無しさん2011/08/20(土) 09:58:10.48
successor
predecessor
かな?
0066642011/08/20(土) 10:13:15.23
>>65
ありがとうございます。
なるほど。省略したくなるような綴りですね...
0067デフォルトの名無しさん2011/08/21(日) 22:01:19.31
class C {
public:
 void hoge(bool _isXXX){ // _isXXXはXXXであるか判定する処理を行うかのフラグ
  if (_isXXX) isXXX();
  ...
 }
private:
 bool isXXX(){...} // XXXであるか判定する
}

ここではアンダーバーをつけて区別しましたが、isXXXの名前がかぶってしまいます。
引数の方のisXXXの命名がおかしい気はするのですが、なんて命名すればいいのでしょうか?
0068デフォルトの名無しさん2011/08/21(日) 22:40:37.91
メソッドもおかしいよ
返り値使わずに捨ててるし
0069デフォルトの名無しさん2011/08/21(日) 22:44:25.26
>>68
ああメソッドの呼び出しの部分は省略しすぎました。
XXXであるかの判定結果は利用してる物としてください。
0070デフォルトの名無しさん2011/08/21(日) 22:50:11.76
べただが...

class C {
public:
 void hoge(bool doCheckXXX){ // doCheckXXXはXXXであるか判定する処理を行うかのフラグ
  if (doCheckXXX) isXXX();
  ...
 }
private:
 bool isXXX(){...} // XXXであるか判定する
}
0071デフォルトの名無しさん2011/08/21(日) 23:19:25.82
・IBinaryReader インターフェイス
 ストリームからデータを読み取る関数 long ReadLong(), bool ReadBytes(int size) などを持つ
 シーク機能は持たない

が定義されているとして、このインターフェイスを使用する側に x バイト以上の読み取りを禁止させるアダプタークラスの名前を考えて欲しい

・Xxx クラス(またはインターフェイス): IBinaryReader インターフェイスから継承
 void SetReadableBytes(int) 関数で読み取ることができるバイト数を設定することができる
 設定されたバイト数を超える読み込みが発生したのであれば、その地点で例外なんたらかんたら
0072デフォルトの名無しさん2011/08/22(月) 00:00:28.56
>>71
ニュアンスがちょっと違ってくるかもしれんが、
Blocked という単語を付けてはどうだろうか

たとえば、IBinaryReaderBlocked、IBlockedBinaryReader とか
0073デフォルトの名無しさん2011/08/22(月) 00:06:20.46
>>71
その発想だと、IBinaryReaderを実装したXxxクラスをIBinaryReaderとして扱ったとき、
予期しない(チェック不能な)例外が発生しうることになる。

ちょっとおかしいのでは?
個人的にはIBinaryReader自体にストリームがサイズという概念を持つかどうかを
表すプロパティ(HasLengthとか?)を持たせた方が自然に感じる。
0074デフォルトの名無しさん2011/08/22(月) 00:32:26.18
>>72-73
多分君ら勘違いしてる
0075デフォルトの名無しさん2011/08/22(月) 04:20:11.60
RestrictedBinaryReader
0076712011/08/22(月) 04:20:40.83
>>72
参考にさせて貰う
自分で考えたのは
IBinaryZoneReader、IBinaryPartReader
こんな感じ

>>73
サイズという概念を持たないものが IBinaryReader だとして、サイズを持つものはどういう名前にするべき?

アダプタークラスなんて書いたのが混乱の元になっているのかもしれない
IBinaryReader 自体はソースストリームからのバイナリ形式の読み取りを行うためのインターフェイス
Xxx も基本概念は同じだけど、読み取り可能バイト数(ReadableBytes)という概念を持つ
ReadableBytes = ソースストリームのサイズ(または残りのバイト数)とは限らない
0077712011/08/22(月) 04:34:33.18
void hoge(HogeTarget pTarget, IBinaryReader reader)
 Xxx newReader(reader, 3) // 3 = 読み取り可能バイト数

 pTarget->onRead(newReader);
 newReader->skip(newReader->getReadableSize()); // skip(x) = x バイトを読み捨てる
}

bool HogeTarget::onRead(Xxx reader) {
 if (reader->getReadableSize() < 4) {
  return false;
 } else {
  this.value = reader->readLong();
 }
}

c++とかjavaに似せたコードで書くとこんな感じ?
0078デフォルトの名無しさん2011/08/22(月) 05:27:51.68
そのクラスの使い道は具体的に何?
0079デフォルトの名無しさん2011/08/22(月) 07:12:45.69
アクセス自体が可能かどうかチェックしたいとか?
それかヘッダ(3バイト・・だと)を高速に読み出したいとか。
0080672011/08/22(月) 10:16:00.74
>>70
thx
0081712011/08/22(月) 12:09:47.92
>>78
HogeTargetにXxxを引数として受け取るセッタを持たせたい
>>77ではonRead(Xxx)になっているが、SetValue(Xxx)に置き換えてくれ
同様に、クラス名もHogeTargetからLongTargetに置き換えてくれ

また、IBinaryReader派生物はソースストリームのシークをサポートしない
0082デフォルトの名無しさん2011/08/22(月) 13:43:29.25
で、そのクラスの使い道は具体的に何?
0083712011/08/22(月) 13:55:14.88
>>78
>>82
お前たちがナンバーワンだ
0084デフォルトの名無しさん2011/08/22(月) 13:59:58.82
死ねゴミ
0085デフォルトの名無しさん2011/08/27(土) 04:40:13.03
この時期はどこのスレも荒れるな
はーまじはー
0086デフォルトの名無しさん2011/09/02(金) 02:50:23.14
既にあるもの(ファイルやメモリ)を元にインスタンス作る関数なんですが
CreateかLoadにするか迷ってます
0087デフォルトの名無しさん2011/09/02(金) 03:15:40.65
CreateしてからLoad、もしくはCreateの内部処理でLoadがあるイメージ
0088デフォルトの名無しさん2011/09/02(金) 03:28:18.75
deserializeも検討
0089デフォルトの名無しさん2011/09/02(金) 09:46:35.38
staticならFromStreamかな
0090デフォルトの名無しさん2011/09/02(金) 23:39:04.37
CreateHogeFromZipFile
0091デフォルトの名無しさん2011/09/03(土) 09:13:19.78
どうも
0092デフォルトの名無しさん2011/09/14(水) 10:07:17.60
必ず第一引数でインスタンスを指すポインタを受け取る関数を集めたクラス
なんて言えばいいか、非侵入型のメンバ関数を集めたクラス?

class xxx // ←これ
{
 const std::wstring & GetName(void * pTarget) const;
 void Print(void * pTarget, const std::wstring & s);
 int Hoge(void * pTarget, int foo, int bar);
};

int data;
xxx xxxInstance;
int dataHoge = xxxInstance(&data, 2, 3);
0093デフォルトの名無しさん2011/09/14(水) 16:00:38.58
>>92
いまいち掴めないんだが、xxxのインスタンスはターゲットを使って自己の内部状態を更新するの?
0094デフォルトの名無しさん2011/09/14(水) 16:43:58.98
あーごめん、記述ミスってるな

誤: int dataHoge = xxxInstance(&data, 2, 3);
誤: int dataHoge = xxxInstance.Hoge(&data, 2, 3);

>>93
xxx クラスのメンバ関数の記述次第だが、
xxxInstance はメンバ関数を呼び出した際に、仮引数 pTarget が示す先を更新する可能性がある
xxxInstance はメンバ関数を呼び出した際に、xxxInstance 自身(this)を更新する可能性がある
0095デフォルトの名無しさん2011/09/14(水) 17:03:26.48
>>94
う〜む、それはやはりコード中での役割で名付けるべきなんじゃないかなあと思う
集めたから、ってだけでは名付けにくいな
0096デフォルトの名無しさん2011/09/14(水) 17:38:43.76
役割といわれるとなんとも説明し難い
以下2つの記述は同じ動作を意味している感じ

class Foo
{
 const std::wstring & GetName() const;
 void Print(const std::wstring & s);
 int Hoge(int foo, int bar);
 ...
};

Foo foo;
foo.Print("てst");

// -----

class xxx
{
 const std::wstring & GetName(const Foo * pTarget) const;
 void Print(const Foo * pTarget, const std::wstring & s);
 int Hoge(const Foo * pTarget, int foo, int bar);
 ...
};

xxx xxxInstance;
Foo foo;
xxxInstance.Print(&foo, "てst");
0097デフォルトの名無しさん2011/09/14(水) 19:37:20.12
C#の拡張メソッド的なノリ?

TargetHelperとかTargetExtenderみたいな感じだろうか
0098922011/09/15(木) 01:32:42.52
なるほど、確かにそれに酷似しているな>>拡張メソッド
上記の場合、FooExtenderとか、Foo追加する機能Extenderがいいかもな
ありがとう。とりあえずその線で命名してみる
0099デフォルトの名無しさん2011/10/05(水) 10:49:54.29
引数で指定のレコードを更新したユーザーのIDの一覧を取得するみたいな
そんな名前のメソッドをお願いします。
GetUserIDs(ARecordID)
みたいな。
更新したのニュアンスの英語をどこにつければいいでしょうか。お願いします。
0100デフォルトの名無しさん2011/10/05(水) 12:45:24.43
GetUserIDsUpdatedRecord

英文の中なら UserIDs と Updated の間に which を入れる
0101デフォルトの名無しさん2011/10/05(水) 15:06:11.85
なんじゃそりゃ
0102デフォルトの名無しさん2011/10/05(水) 21:41:35.18
お気に召しませんか
0103デフォルトの名無しさん2011/10/05(水) 22:33:48.57
はい
0104デフォルトの名無しさん2011/10/06(木) 01:08:19.61
find_editors_by_record_id(record_id)
でいいだろ
0105デフォルトの名無しさん2011/10/06(木) 13:24:20.55
GetUserIdsWhichUpdatedThisRecord(recordId)
0106デフォルトの名無しさん2011/10/06(木) 15:25:44.90
>>99です。返事後れました。
やっぱ、しっくりくるものなさげですね。>>100みたいな感じにします。
0107デフォルトの名無しさん2011/10/06(木) 16:14:58.50
whoを使う選択肢はないの?
0108デフォルトの名無しさん2011/10/06(木) 16:23:54.89
ないよ
0109デフォルトの名無しさん2011/10/06(木) 17:45:20.74
ないね
0110デフォルトの名無しさん2011/10/06(木) 17:57:06.13
説明的な名前のメソッドは、ウンコにかける消臭剤のようなもの。
0111デフォルトの名無しさん2011/10/06(木) 18:00:50.42
関係代名詞は使いたくないですね。
GetUpdatedByUserIDs(RecordID)ってのも名前に使うときはありなんですかね。
ググってたらそんな感じのがありましたんで。
0112デフォルトの名無しさん2011/10/06(木) 18:48:33.15
絶望的に英語ができない
0113デフォルトの名無しさん2011/10/06(木) 19:01:37.42
GetUpdaters
0114デフォルトの名無しさん2011/10/06(木) 20:33:47.81
>>99
よくわからんが、GetModifiersとかGetUpdatersみたいな感じ?

>>110
むしろウンココード量産するタイプの奴はたいてい君のように嘯く
0115デフォルトの名無しさん2011/10/06(木) 21:20:36.65
GetUpdatedByUserIDs
↓
プログラマ脳による翻訳: ユーザーIDによって更新された"それ"を取得する
現実: ユーザーIDで更新されてください。
0116デフォルトの名無しさん2011/10/06(木) 21:29:01.49
>>113-114でFA
>>104が惜しいくらいであとはセンス無し
0117デフォルトの名無しさん2011/10/06(木) 21:56:32.16
>>116
こういう場合、どういうセンスが求められているの?
0118デフォルトの名無しさん2011/10/09(日) 15:46:05.85
OSとのリソースのやり取りをラップして一括管理するクラスってどんな名前がいいかな?
○○マネージャーは駄目だっていうけどこの場合マネージャーしか思い浮かばない
0119デフォルトの名無しさん2011/10/09(日) 16:06:26.07
BinwanProducer でどう?
0120デフォルトの名無しさん2011/10/09(日) 17:36:38.55
>>118
一括管理って、具体的に何をするの?
0121デフォルトの名無しさん2011/10/09(日) 18:46:08.07
>>120
実際に確保解放するのをマネージャに任せて
他のリソースが必要なクラスはこのマネージャを仲介して貰う
マネージャは参照数などを管理したり別スレッドで実際の確保解放を行ったりする
0122デフォルトの名無しさん2011/10/09(日) 20:03:54.01
~ManagementService
実質何も解決しないけど
0123デフォルトの名無しさん2011/10/09(日) 20:25:36.91
HogeManager
  └ Hoge

じゃなくて

Hoge
  └ HogeDevice

みたいに、マネージャの方をシンプルな名前にするのは?
0124デフォルトの名無しさん2011/10/09(日) 20:39:32.12
>>121
そのマネージャを利用する側のクラスの立場に立てば、
そのマネージャはリソースを持っているかのように見えるわけだ

実際に参照数を管理してるのかどうかは、利用する側にとってはどうでもいい話
もしかしたら実際には参照数以外の別の何かを管理して上手くやっているのかも知れん
スレッドが作られるかどうかも、利用する側には関係ないことなんだろ?

つまり、リソースが必要ならがそのマネージャが持っている事が分かりさえすれば良い

というわけで、単に Resource クラスでいいような気がするが、どうだろう
Resource クラスが別にあって、それを束ねているのなら ResourcePool とか
0125デフォルトの名無しさん2011/10/10(月) 03:52:59.07
SystemResource と SystemResourceManager
0126デフォルトの名無しさん2011/10/10(月) 08:01:33.85
お前ら質問を変えようと必死だなw
そのまま答えろよw
0127デフォルトの名無しさん2011/10/10(月) 09:28:10.27
ResourceLoader
0128デフォルトの名無しさん2011/10/10(月) 12:36:45.74
質問者には悪いけど、なんか意味不明っていうか....

GCない言語でGCみたいな働きをするクラスが欲しいのかも知れんけど、
ちょっと無理があるんじゃないかと。
参照数を管理する、なんて簡単に言うけどどうやってやるんだろう....
0129デフォルトの名無しさん2011/10/10(月) 12:52:13.65
利用者が明示的にマネージャのメソッドを呼ぶんだろ
集中管理する意味は知らないけど別にできなくはない
0130デフォルトの名無しさん2011/10/10(月) 12:56:12.77
>>129
そうやって、リリース側を呼び忘れるとw
不穏な設計に付き合わされる日々が待っている、と。
0131デフォルトの名無しさん2011/10/10(月) 13:08:57.68
「変換された情報」という意味が分かるように変数名をつけたいです
そのまま英語にしますと

transformedInfomation
translatedInformation
convertedInformation

という辺りが妥当ですが、さすがにちょっと長いです
なので省略したいのですが、後半の Information は Info に略せるとして、
前半は

transed
conved

などとしても、海外の方たちもちゅんと意図をくんでくれるでしょうか
0132デフォルトの名無しさん2011/10/10(月) 13:26:23.42
>>131
その変数が100箇所に登場するとかでなければ、変に略す必用ないでしょ。

略すにしても暗号みたいのは却下。
ただでさえ他人の書いたコードなんて暗号なのに、そんな下らない謎解きまでさせるのは勘弁して欲しい。

略すならInformationを丸ごと削る方向で。
translatedとかmodifiedとか。
もちろんこれはローカルのみ可
0133デフォルトの名無しさん2011/10/10(月) 14:23:26.82
俺ならtranslatedだな。
0134デフォルトの名無しさん2011/10/10(月) 14:25:31.09
>>132
> そんな下らない謎解き

つまり、transed や conved などは一般的ではない謎解きレベルということですね

参考になりました
translated にします
0135デフォルトの名無しさん2011/10/10(月) 14:30:49.41
EncodedInfo
0136デフォルトの名無しさん2011/10/10(月) 16:16:35.52
どんな変換をしたかが重要だろ
例えば圧縮変換ならcompressedにすればtranslatedやencodedより明確になる
0137デフォルトの名無しさん2011/10/10(月) 16:51:34.46
>>136
なるほど、確かにその通りです

ただ、今回の質問の趣旨は
プログラミングの世界で transed や conved が一般的かどうか、というもので、
それを訊く為に仮想的な状況を作って質問しました

素直に最初から 「transed や conved は一般的か」 とだけ質問すべきでした
すいませんでした
0138デフォルトの名無しさん2011/10/15(土) 09:00:16.83
デバック用にクラスの内容を(そのクラスの内容が見えるように)ストリームに出力する関数の名前ってDumpでいい?
0139デフォルトの名無しさん2011/10/15(土) 10:12:57.78
Rubyとかだと文字列を返すinspectってメソッドがあるな。
0140デフォルトの名無しさん2011/10/17(月) 19:30:05.18
>>134
一的な謎解いいと?
■ このスレッドは過去ログ倉庫に格納されています