- 1 名前:ネミ子 [2007/05/26(土) 11:25:15 ]
- クラス名、変数名のつけ方に悩んだら書き込むスレです。
質問する人は、その変数に何を格納するのか(クラスだったらその役割) プログラミング言語は何なのかを、それぞれ書いて、 いい変数名を思いついた人は、それに答えてあげましょう。 命名規則や設計の善し悪しについて議論するのは基本的に禁止。 >>2 英和・和英・英英など各国語辞書と翻訳サイト。 >>3 類義語(シソーラス)辞書、図形・数式・数学用語の英単語。 >>4 関連スレと、いろいろな言語規約。 >>2-10 諸事情によりリンクがずれた場合。 前スレ。 ◆ネーミング倶楽部◆: pc3.2ch.net/tech/kako/1035/10353/1035362308.html Part1: pc5.2ch.net/tech/kako/1046/10465/1046541730.html Part2: pc5.2ch.net/tech/kako/1058/10582/1058213523.html Part3: pc5.2ch.net/test/read.cgi/tech/1067171530/ Part4: pc5.2ch.net/test/read.cgi/tech/1087209526/ Part5: pc8.2ch.net/test/read.cgi/tech/1109330204/ Part6: pc8.2ch.net/test/read.cgi/tech/1128266018/ Part7: pc8.2ch.net/test/read.cgi/tech/1144978008/ Part8: pc10.2ch.net/test/read.cgi/tech/1154448184/ Part9: pc11.2ch.net/test/read.cgi/tech/1168356029/
- 110 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:01:53 ]
- phpです。
Webprog板にこういうスレはないので、ここで聞きましたが、場違いだったかな・・・。
- 111 名前:デフォルトの名無しさん [2007/06/22(金) 10:17:40 ]
- CookieKibonnu
- 112 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:15:06 ]
- >>110
PHPだろうがなんだろうがおkだが、言語によって命名にクセがあるからまず言語が何なのか言うべき ちなみに俺はPHP知らん…
- 113 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:19:14 ]
- >>107
sakusaku(v_0o0_v)
- 114 名前:デフォルトの名無しさん [2007/06/22(金) 11:20:23 ]
- 省略を英語で言うと「ellipsis」「abbreviate」「abridge」とかになるんだろうけど
こんなの使ってもワケ分からんになるから、 anInputCookie とかはどうっすか
- 115 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:52:11 ]
- >>114
> 省略を英語で言うと「ellipsis」「abbreviate」「abridge」とかになるんだろうけど 質問者のいう「省略」とはどれも意味が全然違う気がする >>107 もっと具体的に文脈言え
- 116 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:13:34 ]
- 英語できないやつが、和英辞典を引いて命名すると
とんでもない名前になることが多いよね。
- 117 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:39:44 ]
- >>116
それ俺だwww
- 118 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 14:01:29 ]
- >>107
文脈ってのは何の文脈? 何のフィールドかだったらそれはここでは関係ないと思うが。 思いつくままに書くと RememberFieldContent CacheFieldContent どっちもCookieっていう単語が入ってない点でいまいちかな。 オブジェクト指向じゃないんならCookie_XXXってするのも 個人的にはアリかと。
- 119 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 14:05:11 ]
- アンカーミス。どうでもいいけど
- 120 名前:デフォルトの名無しさん [2007/06/22(金) 15:08:36 ]
- >>119
なにその投げやりな態度w
- 121 名前:デフォルトの名無しさん [2007/06/22(金) 15:11:16 ]
- VisualStudio2005とかだと日本語の関数もOkだから、
入力省略クッキー() とかでもアリなんだがな
- 122 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:58:48 ]
- >>107
Hoge.FromCookie() GetHogeFromCookie()
- 123 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 16:23:05 ]
- sendCookieForAutoComplete()とか
- 124 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:02:17 ]
- えー
- 125 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 12:17:39 ]
- cookieEater()
- 126 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 16:14:52 ]
- ファイル名の拡張子を除いた部分の文字列はどんな名前にがいいでしょうか?
hogehoge.txt というファイル名の hogehoge の部分です
- 127 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 16:33:50 ]
- FileNameWithoutExtension
- 128 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 16:51:49 ]
- そのままやん><;
- 129 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 16:56:43 ]
- だからそのまんまでいいんだよ。
俺も127に一票。 こんなスレにいる人間なら、やたら省略して表記しないと気がすまない 古典的な神経症ぐらいは自覚して克服してろよ。
- 130 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 16:59:14 ]
- pathname('/hoo/var/hogehoge.txt').basename ==> 'hogehoge'
- 131 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 17:01:05 ]
- あのさあ、じゃあ人語で「パスのベース名」って言われたとしたら
言ってる奴が何を意味してそういってるのか直ちに理解できるか?
- 132 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 17:45:42 ]
- じゃあコメントを入れよう
- 133 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 17:47:37 ]
- Java厨にはちょっと通りにくいかも分からんね
www.google.com/codesearch?q=basename&hl=ja&btnG=%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%A4%9C%E7%B4%A2
- 134 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:27:45 ]
- >>131
伝統的にbasename。 無知を自慢されても困る。
- 135 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:30:18 ]
- www.google.com/search?num=50&hl=ja&safe=off&q=%2Bbasename+%2Bextension&btnG=%E6%A4%9C%E7%B4%A2&lr=
- 136 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 00:05:24 ]
- しかし>>133の中で>>126の意味で使ってるものは一つもないという・・・
- 137 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 02:52:00 ]
- .NEETはFileNameWithoutExtensionなのか
- 138 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 03:35:45 ]
- Pythonだと os.path.splitext("/path/fn.ext") -> ("/path/fn", ".ext")
- 139 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 03:47:51 ]
- 名前の話をしろよ
- 140 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 07:47:33 ]
- というか質問するときはなるべく言語名も書け。
命名規則や付属の標準ライブラリにあった名前が返ってくる可能性があるわけで。
- 141 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:05:58 ]
- このスレ的には IUnknown ってNGな命名じゃね?
- 142 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 13:56:04 ]
- 別に
- 143 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 23:57:51 ]
- ファイルとかに出力するためにバイト列を作ることを「シリアル化」と言うらしいと知ったんだけど
逆の場合は何て言えばいいんだろう・・・微妙にスレ違いかもしれないけど
- 144 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:34:15 ]
- シリアル化⇔逆シリアル化
シリアライズ⇔デシリアライズ
- 145 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:46:22 ]
- 変態PHPだとunserializeだったりする
pythonとかrubyは、Marshalクラスでdumpとloadだったり
- 146 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:43:12 ]
- エンコーダ⇔デコーダ
- 147 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:49:53 ]
- VSのGDI+なんかで線種や色、キャップや太さみたいな画像パラメータをファイル保存するときに
serializeって使ったな。 そのままだとメモリ上にバラバラに配置されたデータだから、ファイル保存できるように データを直列させる、というような感じだったか。メソッド名もserialise()だったはず。 逆のときはdeserialize()とかで復元してたかな。
- 148 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 10:30:42 ]
- C#なんかだとXmlSerializerクラスってのがあって、
XmlSerializer serializer = new XmlSerializer(typeof(user_class)); でインスタンス化し、 serializer.Serialize(filestream, _class); でシリアライズ、 user_class _class = (user_class)serializer.Deserialize(filestream); でデシリアライズだよ。
- 149 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 11:02:29 ]
- ついでにjavaだと
SerializableインターフェースのwriteObject/readObjectメソッド
- 150 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 22:03:16 ]
- デリファレンスとかもあるな
そういう対になった概念の言葉は使える時はなるべく使うようにしたい
- 151 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 07:23:12 ]
- >>150
おいおい。 reference と dereference の場合はちょっと違うと思うぞ。 広い意味では対だけど。
- 152 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 09:01:04 ]
- ヘルス⇔デリヘル
- 153 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:09:22 ]
- このスレお気に入りから外れてたわ。
しくった
- 154 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 15:42:19 ]
- ある DB にレコードを登録する方法が二つあり、どちらも登録のタイミングでインデックスを張る。
二つある方法の内訳は、このインデックスの更新を、仮のものとするか実際のものとするか。 つまり、大本の DB のインデックスの更新は重いので、仮更新用の小さなインデックスがあり、 軽い登録方法としてこちらのインデックスを作る(後々大本へのマージが必要)方法がある。 もう一つは大本の DB にインデックスを張る、という次第。重いがマージは不要。 この二つを ** Builder とか ** Register などとするときの、** 二つ。対っぽいイメージになれば分かりやすいのだけど、 自分で思いついた Actual/Virtual とか Active/InActive, Dynamic/Static あたりではどうもしっくり来ないのです。
- 155 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:16:47 ]
- 仮の方は本当に仮であとで取り消すことがあるのか、必ずマージするのか
- 156 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:04:11 ]
- 処理の順番をenumで定義するんだけど、
AThenB BThenA CThenD ... みたいな感じで良いかな。
- 157 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:40:09 ]
- なんじゃそりゃ
場面がわからん enumってことはそのうちのどれか一つってこと?
- 158 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:27:46 ]
- センスのないお方ってなにやらしてもセンスないのな。
157じゃないけど、156はやろうとしていることもあげている例も意味不明すぎるよw
- 159 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:46:44 ]
- 要は複数の引数を渡したときに、対になってる二つの
パネルのどちらから適用していくか定義したいんだよ。 何か他にセンスの良い方法があるなら教えてくれ。
- 160 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 21:00:26 ]
- >>159
2つなら AThenB BThenA だけで足りるはずなのに CThenDが出ているということは、渡すモノ自体も変わっていくということか? それとも引数は4つ? 前者なら設計に問題ありだが、>>1なのでもう目をつぶって >>156で行ってしまえ。
- 161 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 21:06:28 ]
- パネルが二つでも、そのどちらかを決める条件は状態によって
いろいろ考えられるだろ。 具体的には位置によるのか、あるいはそれがアクティブが否か、とか。
- 162 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 21:07:09 ]
- で、結局>>156の命名でいいのか悪いのかが聞きたいんだが。
- 163 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 21:27:30 ]
- >>162
だから良いも悪いも意味わからんってw 端的に理解不能。プログラミングの前に説明能力を磨く必要がある。
- 164 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 21:57:36 ]
- 英語としては、Thenより、FollowedByだな
- 165 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 21:58:31 ]
- >>162
日本語喋れ 何が「聞きたいんだが」だ
- 166 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:14:13 ]
- 俺からしてみれば何が理解不能なのか理解不能だ。
「Aの後B」というのを、「AThenB」と命名するのは適切か否か、 それを聞いてるだけなんだが? 実装内容が理解不能というなら分かる。 ここで書いても書き切れんだろうし。 もちろん実装内容によって適切な命名というのは変わるだろうが、 ここでは措いておく。
- 167 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:19:38 ]
- >>164
AのちBとかAに続いてBって感じ? dクス
- 168 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:06:52 ]
- 設計の善し悪しは議論禁止だけど、
設計まずそうだなって直感的にわかるとやっぱり言いたくなるんだよな
- 169 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:15:02 ]
- 設計なんてレベルじゃないね。
むしろプログラミングの基礎が分かってない。 それ以前に、>>156のような日本語で他人に自分の考えが伝わる、 とどうやら本気で思っているらしい点が推測される知能の低さもからかいたくなる。 まあからかうだけではアレだから一応内容のあることも書くと、 処理の順序を指定したいなら普通に順序をもつデータ構造を引数に渡すだけだろう。 それは配列でもいいし、単に引数の順序を利用してもいい。 順序をenumで指定するなんて愚の骨頂。 P(n,n) = n!が計算できないのか156は
- 170 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:24:32 ]
- おまえの質問への読解力は知らんが(つかなんでn個の順列が出てくるよ)、
俺の理解では、 (A,B), (C,D)とかのペア内でしか順序が問題にならないという仕様と感じた。 ただ、要素数が本当に固定ならいいが、 将来の追加とか考えたらenumはまずいだろとは思う。
- 171 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:36:12 ]
- よく詳しい実装内容もわからんでそこまで言えるもんだ。
あっぱれ。 複雑な手続きの順序を決めようなんてしてない。 2 * 条件 通り。 逆に連結リストにするとA→AとかA→Cみたいになって 意図しない動作になる可能性もあるんだが。 (AとB、CとDは互いに対になっている条件、 LeftとRight、ActiveとInactiveとか)
- 172 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:36:56 ]
- >>170
そう。先にそう書いとけば良かったな…。
- 173 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 06:43:12 ]
- 言語の「予約語」の英語をお願いします。Reserved Wordでいいですかね?Keywordって単語も
見かけますが、この場合、Reseverd Wordの方が適切ですかね?
- 174 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 09:38:18 ]
- >>173
てか、"reserved word" という用語の日本語訳が「予約語」だから。
- 175 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 15:08:46 ]
- ModuleManager(仮)というオブジェクトがあります
クライアントコードではこいつにモジュールをregist()で登録し、release()で登録削除する事が出来ます このオブジェクトはupdate()メンバを呼び出される度に追加したモジュール全てののupdate()メンバを呼び出します つまり各モジュールに対するfacadeなわけですが このModuleManager(仮)のクラスに対する一般的なネーミングはどういうものがあるでしょうか?
- 176 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 15:19:55 ]
- >>175
登録メソッドは regist じゃなくて register にしろ。
- 177 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 15:26:48 ]
- >>175
Managerでいいんじゃないでしょうか?w というか、あんまり自身ないけどそれファサードというよりメディエーターの 特殊形態とみなした方がわかりやすいと思う。 >>176 余計なお世話にしか思えんな。 好みの問題以上の理由があって言ってるとは思えない。
- 178 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 15:42:52 ]
- >>175
窓口となる機能群を適切に表現するしかないのでは 例がFacadeかどうかは疑問があるが >>177 「registという単語は無い」のは理由にならないと? >>176を意訳すると「勝手な単語作るなボケ」
- 179 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 15:45:49 ]
- 漏れも特に理由がなければregisterにすべきだと思う
- 180 名前:175 mailto:sage [2007/07/08(日) 15:52:11 ]
- 言われていればMediatorな気がしてきたので
それを意識して機能を再構成してみます あとはregisterですね^^
- 181 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 15:56:05 ]
- >>178
ああすまん、registって英単語は存在しないんだったねw それなら確かにregisterとすべきだ。 申し訳ない
- 182 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 16:04:20 ]
- >>175
おれなら、Observerで書き換えるかも。
- 183 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 16:11:09 ]
- 別に管理してなくね?
モジュールの生成、破壊を行うわけでもないし、ただupdateするだけ ModuleUpdaterじゃね?
- 184 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 16:41:51 ]
- managerは結局何をするものか判らないから、
良くない名前付けの例だってどこかで見た
- 185 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 17:50:53 ]
- そんじゃあ明示的にUpdateMethod(Command)Distributerとでもしますか
- 186 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 18:09:53 ]
- 「英単語なんて勝手に作ってもいいじゃないか、ボケ」
と言ってるのかと思った。
- 187 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 21:21:56 ]
- >>186
場合によってはそうなんだけどね。 例えばsetの過去分詞とかさ。 でも、昔のcのコードの文化にありがちだった意味のない省略とかは すくなくともエディタの入力支援とか使える現在では無意味だし、俺は否定的。
- 188 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 21:26:49 ]
- MS様的には略語以外の省略名は不許可だが
Mathは過去の流儀に従ってSqrtとかだぬ。
- 189 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 23:06:25 ]
- 数学ってEとかmとかπとかΣとかNewtonとかEulerとか悪名の宝庫だよな。
…と書いてから思ったけど数学は純粋に理論的な学問だから、 その概念を現実の物事に例えるのはそれはそれで一面的かもしれない。
- 190 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:52:56 ]
- 「あるクラス(インスタンスでなく)の能力について知っており、そのクラスのインスタンスを作成することのできるクラス」
の名称について悩んでいます。言葉ではわかりづらいので例(C#)を示します。 IDancerManager(仮)はIDancerと一対一で対応しており、対応するIDancerの歌える曲・踊れる曲を知っています。 また、必要であればそのインスタンスを作成できます。 public interface IDancer { void Sing(string title); void Dance(string title); } public interface IDancerManager { bool CanDance(string title); bool CanSing(string title); IDancer CreateDancer(); } 以上がインターフェースの定義です。これを実装するクラスの定義は、例えば public DancerA : IDancer { void Sing(string title) { ... } void Dance(string title) { ... } } public DancerAManager : IDancerManager { bool CanDance(string title) { return title == "およげたいやきくん" || title == "コンピュータおばあちゃん"; } bool CanSing(string title) { return title == "およげたいやきくん"; } IDancer CreateDancer() { return new DancerA(); } } のようになります。(つづく)
- 191 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:53:37 ]
- (つづき)
これらを登録するためのクラスが別に存在し、IDancerManagerのインスタンスのリストmanagersを保持しています。 このクラスには、 public IDancer GetDancer(string title) { foreach (IDancerManager manager in managers) if (manager.CanDance(title)) return manager.CreateDancer(); return null; } のようなメソッドが存在し、外部に機能を提供します。 このIDancerManagerのManagerにあたる部分の名称に悩んでいます。 特に珍しい設計ではないと思うので定番めいた命名がないかと期待してるんですが、どうでしょう。
- 192 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 18:32:53 ]
- >特に珍しい設計ではないと思うので
いやあすごく変な設計だと思う。悪いけど。 どう考えてもIDancerManager は冗長だし、単に見通しを悪くしてるだけ。 IDancerManagerの機能はIDancerのスタティックメソッドとして実装すれば 済むことだと思うけど。。
- 193 名前:190-191 mailto:sage [2007/07/09(月) 18:44:57 ]
- >>192
どうも。そのようなレスが来るとは何となく予想していました。 IDancerの静的メソッドとしてCanDanceなどを実装すると、後半で記述したような ループでの一括処理ができませんよね。またインスタンスメソッドとして実装すると、 IDancerのインスタンスのリストを保持しなければならなくなり、メモリ使用量の点で冗長となります。 (IDanceManagerはフィールドを持ちませんがIDancerのフィールドは処理に依存するので) 静的メソッドにしてリフレクションという実装もありますが、パフォーマンスクリティカルな処理なので それは避けたいのです。 以上の点を踏まえると必然的に上のような設計になったわけです。
- 194 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 18:49:37 ]
- IDancerActivatorとかIDancerMetaInfo?
でもクラスごとに作るよりリフレクション的な仕組みを使うなり作るなりしてGeneric的にやるべきもんでしょ。 クラスごとに作るのは(/ω\)イヤン
- 195 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:03:22 ]
- >>193
いやー言ってること全体的に変だと思うわ。 >ループでの一括処理ができませんよね Dancerは自分の型を知っているから、当然自分の型の静的メソッドは利用できるんじゃないの? 要は単に直接Dancerのコレクションを作ればよいということ。 >IDancerのインスタンスのリストを保持しなければならなくなり、メモリ使用量の点で冗長となります。 意味がわかりません。 無駄、というならそのIDancerManagerのリストを作る実装でもまったく同じことでしょ。 他の人はどう思う? >>193の言ってることは変じゃないかい?
- 196 名前:190=191 mailto:sage [2007/07/09(月) 19:13:55 ]
- >>195
>>ループでの一括処理ができませんよね >Dancerは自分の型を知っているから、当然自分の型の静的メソッドは利用できるんじゃないの? >要は単に直接Dancerのコレクションを作ればよいということ。 Dancerのコレクションを作ったところで、Dancerのインスタンスから静的メソッドは呼べませんよね? 従って静的メソッドによる実装ではループ処理はできません。 >>IDancerのインスタンスのリストを保持しなければならなくなり、メモリ使用量の点で冗長となります。 >意味がわかりません。 >無駄、というならそのIDancerManagerのリストを作る実装でもまったく同じことでしょ。 この文章のすぐ下に括弧づけで書いてありますが、IDancerManagerのインスタンスはフィールドを持ちません。 従って、IDancerManagerのリストならば余分なメモリ領域は消費しません。 それに対してIDancerのインスタンスは、Dance()やSing()で使うフィールドをそれぞれに持っているので、 余分なメモリ領域を消費してしまいます。 なんか設計に関する話題になってしまってますが、細かく説明するとこんな感じです。
- 197 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:22:10 ]
- いや、リストのメモリの消費量っていうのはリストのアイテムのメモリサイズに
まったく無関係だよ。。 Cの構造体配列じゃないんだから。 世の中の全部の言語知ってるわけじゃないけど、普通リストっていうのは 参照の配列みたいな形で実装されているだろうから、消費されるメモリ量は リストの要素数nと参照型変数のサイズmの関数であって、要素の型のサイズは 関係ないよ。 それから、自分の型の静的メソッドにアクセスできない言語なんてあるの? というか、言語は何をお使いで?
- 198 名前:190-191 mailto:sage [2007/07/09(月) 19:27:02 ]
- >>197
えーと・・・ もちろんリストそのもののサイズは同じです。 ですがリストに格納するのは「格納する型のインスタンス」ですよね?クラスではなくて。 インスタンスってのは「実体」なわけですから、フィールドのサイズと同じだけのメモリをヒープ上に消費するわけです。 言語は関係ないですが、上に書いたとおりC#です。
- 199 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:33:43 ]
- >>197
あと静的メソッドについてですが・・・ 具体的な型名がわからないインスタンスからは静的メソッドは呼べません。 リフレクションでも使わない限り。 C++の例ですと、void *p = new HogeClass(); とした p を別のところに持っていったとき、 p だけの情報から HogeClass::HogaMethod() を呼べませんよね?p の型は単なる void* なので。 それと同じことです。
- 200 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:34:37 ]
- c#のList(of T)は、少なくともTが参照型の場合、
インスタンスへの参照が格納されるだけであってインスタンスそのものは格納されないよ。 だから型の大きさは関係ないって
- 201 名前:190-191 mailto:sage [2007/07/09(月) 19:39:25 ]
- >>200
>>198で言ったように、もちろん「リストそのもの」の大きさはかわりません。 ですが、その中身は「リスト以外のどこか」に確保されるわけです(具体的にはヒープ上)。 従って、ヒープ上で消費するメモリ量は型そのものの大きさに依存します。
- 202 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:57:18 ]
- >>201
やっと意味がわかった申し訳ない。 でもそれならGetDancerメソッドを持つクラスがIDancerを実装したクラスの 静的メソッドへのデリゲートを持てば済む話だと思う。
- 203 名前:190-191 mailto:sage [2007/07/09(月) 20:19:19 ]
- >>202
こちらも説明が下手だったかも知れません。すみません。 >でもそれならGetDancerメソッドを持つクラスがIDancerを実装したクラスの >静的メソッドへのデリゲートを持てば済む話だと思う。 List<IDancerManager> managers; の代わりに List<CanDanceDelegate>, List<CanSingDelegate>, List<CreateDancerDelegate> を保持するということですか? それだと登録の際にメソッドごとにいちいち追加せねばならず、メソッドが多い場合相当面倒になると思います。 またリストの数自体も増えますので管理が面倒ですし。
- 204 名前:190-191 mailto:sage [2007/07/09(月) 20:30:14 ]
- >>194
設計論議に夢中になってレスを忘れてしまいましたがActivatorの命名いただきました。 どうもありがとうございます。
- 205 名前:デフォルトの名無しさん [2007/07/09(月) 20:47:13 ]
- へたくそ
- 206 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:04:15 ]
- リフレクションっぽく
interface Dancer { void inovke(Object action, Object[] args) throws ActionException; } interface DancerType { boolean hasAbility(Object action, Object[] args); Dancer getDancer(); }
- 207 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:52:24 ]
- age
- 208 名前:デフォルトの名無しさん [2007/07/16(月) 05:23:09 ]
- age
- 209 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 11:23:55 ]
- どうでもいいけど>>203でデリゲート名にDelegateを付けてるのは
MS様のガイドライン違反
- 210 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 17:13:25 ]
- 普通にDancerFactoryでいいような気がする。
配列っていうか簡易DBみたいなのに 各Dancerが受け入れられる処理を 書き込んでおけばいいのではないだろうか。 各Dancerにはintで一意のIDを持たせておいて 簡易DBを使ってIDを求めて switch文で列記されたnewに飛べばいいと思う。
|

|