1read 100read
2011年12月2期プログラム47: クラス名・変数名に迷ったら書き込むスレ。Part20 (629) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
48: awkについて語るスレ $2 (669)
49: 文字コード総合スレ part7 (440)
51: 雑談スレ 4 (185)
52: MFC、Win32++を超えるライブラリを作るスレ (825)

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


1 :11/07/29 〜 最終レス :11/12/22
クラス名、変数名のつけ方に悩んだら書き込むスレです。
命名規則や設計の善し悪しについて議論するのは基本的に禁止。
前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/

2 :
>>1 乙乙
落ちた消えてから助かるぜ。

3 :
おつ。
前スレ埋まったの6月15日か。

4 :
そういえば、質問スレかどこかで変数名の話題になってたな…

5 :
>1
Zなんたらかんたら

6 :
_1zNoNoNotIchiOtsuItItItsHungarianNotation

7 :
面白いと思ってるのかもしれんが、気色が悪いだけ

8 :
すまんかった

9 :
大丈夫
そこそこ面白かったよ
だからもうやめてね

10 :
TONさん誕生の瞬間
704 :デフォルトの名無しさん:2008/12/12(金) 16:04:28
スクリプト言語で、最初のほうで
定数A = 今の完全時刻(年月日から秒まで)
定数B = 定数Aから日付部分を取り出したもの、文字列にすると 2008-12-12
定数C = 定数Aから時間部分を取り出したもの、文字列にすると 16:04:34
としたときの、定数ABC。
Aを NOW という定数名で使うことが多いんだけど、Bは TODAY で、じゃあCは何? みたいな
705 :デフォルトの名無しさん:2008/12/12(金) 16:28:43
TODAYをやめて
DATEとTIMEにしたら?
706 :デフォルトの名無しさん:2008/12/12(金) 17:06:45
TODAYはセンス無いなw
707 :デフォルトの名無しさん:2008/12/12(金) 17:26:11
NOWから取り出した値だってのがわかるような名前がいいと思う。
NOW_DATEとNOW_TIMEでいんじゃね?
708 :デフォルトの名無しさん:2008/12/12(金) 17:31:25
TIMEって日付情報含んでそうだ
709 :デフォルトの名無しさん:2008/12/12(金) 17:48:04
>>708
そりゃお前の誤解だ
710 :デフォルトの名無しさん:2008/12/12(金) 19:31:20
俺はTodayは悪くないと思う。
それでいけばCはTimeOfNowってとこか。

11 :
もう忘れようよ…

12 :
>>10
なんか根暗っていうか、馬鹿なくせに執念深さだけは一人前って感じだなお前

13 :
>>10-12
失せろゴミ

14 :
>>12
TON乙

15 :
tonまだいるのかよ

16 :
結局
date
time
datetime
を使えばいいってことで

17 :
あ行なら0、か行なら1をそれぞれ代入したい変数があるんだけど
かっこいい名前ありませんか

18 :
>>17
consonant_index

19 :
かっこよさを求めているからそれはストレートすぎてダメじゃないかな。
そもそもかっこいい名前を求めるのがダメという意見も出るだろうけれど、要望にはこたえてあげて欲しい

20 :
失せろゴミクズ

21 :
マジレスするとindexはおかしい。せめてそれぐらい突っ込めよ>>20

22 :
それはストレートすぎてダメじゃないかな。

23 :
indexっておかしいの?

24 :
その質問はストレートすぎてダメじゃないかな。

25 :
orderはどう?

26 :
indexだとsqlに通らない
initialでいいかな

27 :
>>21
?

28 :
>>26
カラム名なら単純に consonant で良いんじゃないの
それか index の代わりに idx とか key とか

29 :
>>23
別におかしくないよ
char consonant[] = { ' ', 'k', 's', 't', 'n', 'h', 'm', 'y', 'l', 'w', 'g', 'z', 'd', 'b' };
int consonant_index;

30 :
先生、パ行がありません!

31 :
これらのイベントを名づけてくれ
1. ユーザーがクリックして、システムがそれを処理する前のイベント
2. ユーザーがクリックして、システムがそれを処理した後のイベント
3. Hoge を見つけた時に発生するイベント
4. システムがロードを開始する直前に発生するイベント
5. システムがロードを開始する直後に発生するイベント
6. システムがロードを就労した直後に発生するイベント

32 :
OnClicking
OnClicked
OnFindXXX
OnBeforeLoad
OnLoading
OnAfterLoad

33 :
MSDN - C# 的には Before & After は使わないとかのルールが決められているけどどうなのよ

34 :
OnClicking
OnClicked
OnHogeFound
OnLoadStarting
OnLoadStarted
OnLoadFinished

35 :
>>33
PreとPostはおk?

36 :
ClkStrkEv
CikExtcnEv
GotHogeScatEv
TakeLoadngEv
EmitLoadngEv
WipeLoadngEv

37 :
>>35 おk
>>36
あまり略さない形式でお願いします!
パスカル・キャメルとかはどうでもいいかな

38 :
>>36
糞すぎる
ネタにしてもつまらん

39 :
Leet並にわかりづらいな

40 :
>>31
まずどういうクラスのイベントなのかが分からないと話が始まらないと思うけど。
言語が何か知らないけど、普通はイベントといえどクラスのメンバというか、
クラスに属する何物かだよな。

41 :
>>31
1. onClick1
2. onClick3 (システムがそれを処理するイベントはonClick2)
3. hogeFound
4. loadReady
5. loadStarted
6. loadFinished

42 :
過去分詞とか使いたくないからonClickPreprocess かな・・なんか引っ掛かるが間違う奴はいないだろ。

43 :
奇妙なこだわり持つなよ。
どうせ大した根拠無いんだろうに。

44 :
馬鹿言え
不規則動詞の活用が覚えられないからに決まってるだろ

45 :
大した根拠じゃないじゃん

46 :
そんなに大マジで返されても困るわ

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

48 :
・3番、4番、5番
ファイルなどのバイナリストリームからツリー構造のデータを読み込むメソッド LoadDataTree() があり、このメソッドの呼び出し中にノードオブジェクトへ通知されるイベント
4番 : LoadDataTree() が現在のノードの読み込みを開始する時に現在のノードに通知するイベント
   1番イベントと同じく、イベントを処理してキャンセルすることができ、キャンセルしたのであれば LoadDataTree() メソッドは即座に終了する
3番 : LoadDataTree() が現在のノードの子ノードを見つけたときに、現在のノードへ通知するイベント
   Hoge == 子ノードだね

49 :
5番 : ネタとしていれてみただけだが、意味合いとしては1番イベントに対する2番イベントみたいなもの
6番 : LoadDataTree() が現在のノードの読み込みを終了した時に、現在のノードに通知するイベント

50 :
で、既出の案には何か不満でもあるのか?

51 :
>>50
で、あんたのお気に入りはどの案なんだ?

52 :
36以外はまあまあ

53 :
>>31
分かってると思うけど、発生順序が違うだけの同じようなイベントを定義するのは
あんまり良いことじゃない。
どうしてもという場合は、イベントを発生させるクラスにとっての意味ではなく、
リスナー側にやって欲しい処理で命名した方が分かりやすいと思う。(本来邪道臭い気もするけどね)
順序が欲しくなるのは、イベントハンドラ内で利用される別のオブジェクトのデータが
先に更新されている必要がある場合が多いだろうから。

54 :
> 分かってると思うけど、発生順序が違うだけの同じようなイベントを定義するのは
> あんまり良いことじゃない。
複雑で分かりにくくなることであれば、そこはかとなく理解している
ただ、今まででそれが必要になったことがあるので尋ねた
イベントハンドラ名に「On」を付ける意見が多いな
言語によっても違うだろうけど、Onは付けるべき、付けないでもいい?

55 :
二文字でイベントっぽさが出るので個人的には好き

56 :
参考になった。ありがとう

57 :
HogeクラスとIHogeインターフェースがあります。Hogeクラスのインスタンスを
コンストラクタの引数に取り、IHogeインターフェースを実装したHogeAdapterクラスが既にあります。
その逆バージョンのクラスの名前をお願いします。
IHogeインターフェースをコンストラクタの引数にとり、Hogeクラスの派生クラスの
名前です。

58 :
>>57
いくら設計議論のスレでなくても、さすがにそれは根本的に考え方がおかしいといわざるを....

59 :
>>58
いや、考えようによっては、名前を決めるということは設計に他ならないともいえる。
だから、設計に口出すのも似たようなもんだとも思える。

60 :
57ですが、全然おかしくないと思いますが。
具体的にはStreamクラスがあります。基本は派生クラスのFileStreamやらでストリームを
扱います。ただ、WindowsのCOMに渡すとき、COMのIStreamインターフェースを
渡す必要があるのですが、そのために、既にStreamAdpaterクラスが用意されてます。
また、COMから返るのはIStreamインターフェースなのですが、通常のライブラリ
では、Streamクラスをベースに扱うようにできてるので、逆バージョンがほしいのです。

61 :
具体的に書くべきでした。すみません。

62 :
>>60
ではベタにComStreamAdapterとか。
まあこれでよければ質問しないかもしれんけどw
でも変に捻っても意味ないよねこういうのは。
アダプダーだと考えなければ、単にComStreamというのもあり?

63 :
>>62
StreamAdapterのまんまでIStreamAdapterぐらいしか思いついていませんでした。
ありがとうございます。

64 :
succやpredをよく見るのですが、これ何の略でしょうか?
前とか先とか関連だと思うのですが...

65 :
successor
predecessor
かな?

66 :
>>65
ありがとうございます。
なるほど。省略したくなるような綴りですね...

67 :
class C {
public:
 void hoge(bool _isXXX){ // _isXXXはXXXであるか判定する処理を行うかのフラグ
  if (_isXXX) isXXX();
  ...
 }
private:
 bool isXXX(){...} // XXXであるか判定する
}
ここではアンダーバーをつけて区別しましたが、isXXXの名前がかぶってしまいます。
引数の方のisXXXの命名がおかしい気はするのですが、なんて命名すればいいのでしょうか?

68 :
メソッドもおかしいよ
返り値使わずに捨ててるし

69 :
>>68
ああメソッドの呼び出しの部分は省略しすぎました。
XXXであるかの判定結果は利用してる物としてください。

70 :
べただが...
class C {
public:
 void hoge(bool doCheckXXX){ // doCheckXXXはXXXであるか判定する処理を行うかのフラグ
  if (doCheckXXX) isXXX();
  ...
 }
private:
 bool isXXX(){...} // XXXであるか判定する
}

71 :
・IBinaryReader インターフェイス
 ストリームからデータを読み取る関数 long ReadLong(), bool ReadBytes(int size) などを持つ
 シーク機能は持たない
が定義されているとして、このインターフェイスを使用する側に x バイト以上の読み取りを禁止させるアダプタークラスの名前を考えて欲しい
・Xxx クラス(またはインターフェイス): IBinaryReader インターフェイスから継承
 void SetReadableBytes(int) 関数で読み取ることができるバイト数を設定することができる
 設定されたバイト数を超える読み込みが発生したのであれば、その地点で例外なんたらかんたら

72 :
>>71
ニュアンスがちょっと違ってくるかもしれんが、
Blocked という単語を付けてはどうだろうか
たとえば、IBinaryReaderBlocked、IBlockedBinaryReader とか

73 :
>>71
その発想だと、IBinaryReaderを実装したXxxクラスをIBinaryReaderとして扱ったとき、
予期しない(チェック不能な)例外が発生しうることになる。
ちょっとおかしいのでは?
個人的にはIBinaryReader自体にストリームがサイズという概念を持つかどうかを
表すプロパティ(HasLengthとか?)を持たせた方が自然に感じる。

74 :
>>72-73
多分君ら勘違いしてる

75 :
RestrictedBinaryReader

76 :
>>72
参考にさせて貰う
自分で考えたのは
IBinaryZoneReader、IBinaryPartReader
こんな感じ
>>73
サイズという概念を持たないものが IBinaryReader だとして、サイズを持つものはどういう名前にするべき?
アダプタークラスなんて書いたのが混乱の元になっているのかもしれない
IBinaryReader 自体はソースストリームからのバイナリ形式の読み取りを行うためのインターフェイス
Xxx も基本概念は同じだけど、読み取り可能バイト数(ReadableBytes)という概念を持つ
ReadableBytes = ソースストリームのサイズ(または残りのバイト数)とは限らない

77 :
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に似せたコードで書くとこんな感じ?

78 :
そのクラスの使い道は具体的に何?

79 :
アクセス自体が可能かどうかチェックしたいとか?
それかヘッダ(3バイト・・だと)を高速に読み出したいとか。

80 :
>>70
thx

81 :
>>78
HogeTargetにXxxを引数として受け取るセッタを持たせたい
>>77ではonRead(Xxx)になっているが、SetValue(Xxx)に置き換えてくれ
同様に、クラス名もHogeTargetからLongTargetに置き換えてくれ
また、IBinaryReader派生物はソースストリームのシークをサポートしない

82 :
で、そのクラスの使い道は具体的に何?

83 :
>>78
>>82
お前たちがナンバーワンだ

84 :
ゴミ

85 :
この時期はどこのスレも荒れるな
はーまじはー

86 :
既にあるもの(ファイルやメモリ)を元にインスタンス作る関数なんですが
CreateかLoadにするか迷ってます

87 :
CreateしてからLoad、もしくはCreateの内部処理でLoadがあるイメージ

88 :
deserializeも検討

89 :
staticならFromStreamかな

90 :
CreateHogeFromZipFile

91 :
どうも

92 :
必ず第一引数でインスタンスを指すポインタを受け取る関数を集めたクラス
なんて言えばいいか、非侵入型のメンバ関数を集めたクラス?
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);

93 :
>>92
いまいち掴めないんだが、xxxのインスタンスはターゲットを使って自己の内部状態を更新するの?

94 :
あーごめん、記述ミスってるな
誤: int dataHoge = xxxInstance(&data, 2, 3);
誤: int dataHoge = xxxInstance.Hoge(&data, 2, 3);
>>93
xxx クラスのメンバ関数の記述次第だが、
xxxInstance はメンバ関数を呼び出した際に、仮引数 pTarget が示す先を更新する可能性がある
xxxInstance はメンバ関数を呼び出した際に、xxxInstance 自身(this)を更新する可能性がある

95 :
>>94
う〜む、それはやはりコード中での役割で名付けるべきなんじゃないかなあと思う
集めたから、ってだけでは名付けにくいな

96 :
役割といわれるとなんとも説明し難い
以下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");

97 :
C#の拡張メソッド的なノリ?
TargetHelperとかTargetExtenderみたいな感じだろうか

98 :
なるほど、確かにそれに酷似しているな>>拡張メソッド
上記の場合、FooExtenderとか、Foo追加する機能Extenderがいいかもな
ありがとう。とりあえずその線で命名してみる

99 :
引数で指定のレコードを更新したユーザーのIDの一覧を取得するみたいな
そんな名前のメソッドをお願いします。
GetUserIDs(ARecordID)
みたいな。
更新したのニュアンスの英語をどこにつければいいでしょうか。お願いします。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
48: awkについて語るスレ $2 (669)
49: 文字コード総合スレ part7 (440)
51: 雑談スレ 4 (185)
52: MFC、Win32++を超えるライブラリを作るスレ (825)