- 1 名前:デフォルトの名無しさん [2008/09/29(月) 13:13:43 ]
- クラス名、変数名のつけ方に悩んだら書き込むスレです。
質問する人は、その変数に何を格納するのか(クラスだったらその役割) プログラミング言語は何なのかを、それぞれ書いて、 いい変数名を思いついた人は、それに答えてあげましょう。 命名規則や設計の善し悪しについて議論するのは基本的に禁止。 >>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/ Part10: pc11.2ch.net/test/read.cgi/tech/1180146315/ Part11: pc11.2ch.net/test/read.cgi/tech/1191250784/ Part12: pc11.2ch.net/test/read.cgi/tech/1206118762/
- 210 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 23:15:41 ]
- 何語かわからない言語で書いたとすると、自分ならこんな雰囲気にするかもしれない。
class SerialPort { static SerialPort Open(whichPort); Result Real(〜); Result Write(〜); Result Close(); }
- 211 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:17:53 ]
- PortCommunicator にしとこうか
- 212 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:45:06 ]
- そろそろポートじゃなくて、
ただのファイルIOと同じだということに気付いてもいいころだ
- 213 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:59:32 ]
- それを言い出したら全部のI/Oが同じになってしまって、
デバイス固有の操作が扱いにくくならね?(ioctlみたいに)
- 214 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:15:14 ]
- それを言い出したらも何も>>212は全然正しい認識じゃないから。
何だよファイルIOって。 まあディスク上のファイルだろうとデバイスだろうとデータの入出力は 同じストリームとして扱えるみたいな話を聞きかじって理解もせずに拡大解釈でも してるんだろうけど。
- 215 名前:デフォルトの名無しさん [2008/10/10(金) 01:25:52 ]
- 何を拡大解釈してるって?
- 216 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:27:55 ]
- 過小評価してるんだろうな。
- 217 名前:デフォルトの名無しさん [2008/10/10(金) 01:36:47 ]
- >>214はスーパーPHP使いなんじゃね?
- 218 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 02:35:25 ]
- fncGetFileNamae
- 219 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 02:36:50 ]
- public class PublicClass1
- 220 名前:デフォルトの名無しさん [2008/10/10(金) 02:40:52 ]
- >>214
いくらなんでもソーセージをかじっちゃダメでしょw
- 221 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 02:52:55 ]
- >>214はひどい
- 222 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 03:52:11 ]
- >>215-221
自演乙
- 223 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 04:01:55 ]
- >>222
恥かしい奴だな >>214がどんだけかわかんねーの? あ、俺は優しいから一応言っておくわ >>222 本人乙
- 224 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 04:55:04 ]
- >>215-223
自演乙
- 225 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 07:45:56 ]
- >>214はそろそろ、COMとファイルのioctl以外のAPIの違いを説明すべきだ
- 226 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 08:27:11 ]
- >>225
どっちもストリームとして扱えるというだけでしょ? COMには、tellもseekもtruncateもfilelengthもownerもpermissionもない。
- 227 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 11:04:07 ]
- >>215-226
自演乙
- 228 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 11:28:10 ]
- >>226
>>255は間違ってる COMとファイルIOの違いについて説明すべき で、どちらもストリームとして扱える 以上
- 229 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 12:51:09 ]
- >>255頑張れ
- 230 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 17:18:01 ]
- 英語の形容詞をそのまま変数名にするのはアリですか?
一番新しい要素をrecentと名づけるのをどう思います?
- 231 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 17:22:44 ]
- 公開しないなら別にそれでおk
- 232 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:19:13 ]
- first、last、next、prev 等もよく使うし、問題ないかと
- 233 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 22:13:32 ]
- サンクス
- 234 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:39:55 ]
- 形容詞の後ろについてる one とか thing が省略されてると思えば、
形容詞単体を名詞的に使うのもありだと思うけど。 the + 形容詞だけで名詞扱いで使うこともあるし。
- 235 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:47:34 ]
- メソッド名は動詞、変数/クラス名は名詞でって良く言うけど
そんなに厳格に分けなきゃならんもんかねえ。
- 236 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 20:22:21 ]
- >>235
なんか教条主義的な思考をする人みたいだね。 別に、誰か偉い人が言ったから/規約でそう決まっているから、「分けなきゃならん」 わけじゃない。 そうしないと(一般に)分かりにくくなる、という合理主義でしょ。 逆に言えば仮に規則を破ることでクラスや変数の役割がむしろ分かりやすくなるのなら 何も問題はないはず。
- 237 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 20:50:18 ]
- >>236
レス感謝。 つまり主観(=分かりやすさ)が入るから決め事としてしまった方がいい、と。
- 238 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:59:22 ]
- arr = [1,2,3]
item = arr.remove(1) とやると arr = [1, 3], item = 2 になるような「取り出す」メソッドって何がいいですかね。 extractがよさげなんだけどコンピュータだと元を残しつつ取得みたいな使われ方が多いような気がして。 deleteのついでに戻り値で返すおまけ機能にしちゃうのがいいのかな。
- 239 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 19:21:50 ]
- remove
- 240 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 19:47:17 ]
- removeAndGet
- 241 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 19:52:19 ]
- takeとかpickとか
- 242 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 20:27:31 ]
- Pythonではpopになってる
- 243 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 20:43:27 ]
- remove
- 244 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:03:39 ]
- fetch
- 245 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:20:30 ]
- getとremoveでいいんじゃね。
そもそも1つのメソッドに複数の機能を持たせようとする時点で(ry
- 246 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:06:11 ]
- >>238
そういう「行数を節約するだけのメリットと引き換えに」、「処理の直感性を犠牲にする」 処理が本当に適切かどうか再考すべきだと思う。 直感的に把握できないような処理だから命名に困るんだよ。
- 247 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:06:28 ]
- それってスタックを実装したいってだけなのでは?
popだろ
- 248 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:08:51 ]
- さらに一般化して splice
- 249 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:27:55 ]
- rubyならslice!かな。
しかし、別に「複数の機能」でも「行数の節約」でもないだろ。 列から一つ取り出したいってのは、実世界でもあって不思議じゃない。 だからこそ、各言語で同じような基本処理が定義されているわけで。
- 250 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:31:46 ]
- popAtだな。
- 251 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:35:11 ]
- >>249
そう言われるとそんな気もしてきちゃうすまんw では気を取り直して PullOut Steal
- 252 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:36:29 ]
- インデックスで指定だからAtを付けた方がよかったか。
- 253 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:37:22 ]
- Atとか付けるとSmalltalkやObjective-Cを思い浮かべてしまう
- 254 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:35:51 ]
- GoTo() は禁止ですか?
- 255 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 13:16:03 ]
- スペースで桁をそろえる件だけど、コードコンプリートの1版と2版を見比べるとおもしろいのにね。
- 256 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 13:24:10 ]
- >255
流石に同じモノ2冊は敷居が高いなあ
- 257 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 21:30:55 ]
- >>255
どうおもしろいのか教えてください
- 258 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 12:46:01 ]
- >>255
1版は持ってる. そろえないほうがいいって書いてあった. 2版はどう変わってるの?
- 259 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:52:30 ]
- >>258
2版は持ってる. そろえないほうがいいって書いてあった.
- 260 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:11:19 ]
- わー、おもしろい
- 261 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 16:36:04 ]
- 255の笑いのツボはどうなっているんだ。
- 262 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 13:14:32 ]
- class Hoge {
public: Fuga* XXXFuga(Fuga* pFuga) { Fuga* temp = pFuga_; pFuga_ = pFuga; return temp; } private: pFuga_; }; XXXFugaですが、XXXの部分はどんな動詞がいいですか?
- 263 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 13:15:51 ]
- exchange
- 264 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 13:16:29 ]
- >>262 replace
- 265 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:03:41 ]
- setlocaleってこんなだよな
- 266 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:10:26 ]
- swap
- 267 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:19:31 ]
- reset か set
- 268 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:06:05 ]
- >>263
わかりやすいんですが、関数名にはあまり使われない単語な気がして、単純な操作の関数につけるのはちょっと気になります。 >>264 わかりやすくて良いと思いました。 >>266 返り値はvoidで、引数に渡したものの内容が入れ替わってくるイメージがあります。 >>267 resetは、Hogeを生成直後の状態に戻すための変更というイメージがあります。 setは、最もシンプルでいいんですが、返り値なしのイメージが強くて、返り値がある関数は区別した方が良いのか悩みます。 setにしようかやめようか悩みます(set以外ならreplaceの予定)。 返り値がある関数にsetをつけることについて、皆さんは抵抗ありますか?
- 269 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:09:51 ]
- そんなこというならset_and_getでいいじゃん
- 270 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:45:21 ]
- 265は無視ですかそうですか
- 271 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:50:40 ]
- 呼び出し側でgetしてからsetすればいいだけだろ。
なんでもラップして行数稼げれば勝ちみたいな歪んだ性癖は改めた方がいい。
- 272 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 16:28:59 ]
- >>269
SetAndGetFugaと書くと、英語として汚くないですか? >>270 すみません、標準ライブラリに返り値を返すset〜があるという意味でしたか。 setlocaleはメンバ関数ではないので、setter/getterが存在するオブジェクト指向とはニュアンスの違いを感じます。 >>271 行数を稼ぐとか言うのではなく、引数とメンバを交換する機能が必要なケースはあると思います。 262の例をget/setで実装すると、setを呼び出した時、pFuga_に格納されてる古いオブジェクトの寿命管理はどうなるの?と。 shared_ptrを使えば寿命管理は気にしなくてもよくなりますが、Fugaを使う場所全てshared_ptrに書き直さないといけなくなりますし、 破棄のタイミングをはっきりさせたい場合にも、問題になると思います。 やはりsetに返り値があるのは気になるので、replaceにします。 ありがとうございました。
- 273 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:38:41 ]
- 二つの仕事を一つで済まそうという例があると、行数稼ぎするなとか言うやつがいるが、
アトミックに動作しなきゃならん場合なんて山ほどあるんだから、ごちゃごちゃ言うな
- 274 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:50:20 ]
- >>271
発想のレベルの低さに驚愕した
- 275 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:53:03 ]
- setとgetをアトミックにやるんだぜっていう事を表現したいなら、
そのまんま SetAndGet みたいのがいいんじゃないの? アセンブラでは test and set とかよくあるし。
- 276 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:55:00 ]
- >>272
更新して一つ前の値を返す関数なんて割とありがちで、 使われているコードを見れば(必ずしも明示的な名前じゃなくても)それと分かるから 普通にsetでもいい気がする。 replaceでも意味は分かると思うけど、なまじ名前に意味がある分 コードをみて一瞬考え込むかもしれない。
- 277 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:57:21 ]
- コレクションから指定条件(添え字とか)で削除して、削除したものを返す
なんてのもふつーにあるよな。
- 278 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 22:08:17 ]
- 上のpopのやつに話を戻したいのか?
質問者いなくなったみたいだけど。
- 279 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 02:28:57 ]
- 「条件Aを満たした場合、処理Bを行う。」というのが
プログラム中数箇所にあるので、これを関数(使用言語はCです)にしたいのですが、 どういう名前が良いのか悩んでます。 「条件A」は数行に渡ってしまう比較的複雑なもので、処理Bを行うかどうかの 判定にしか使われないものです。 このため「条件A」を満たしているかどうかを判定する関数を作るにしても 適切な関数名が思いつかず、現状は何の関数化も行わずにコピペを数回行うという 書いた本人も、読んだレビュアもがっかりするようなことを繰り返しています。
- 280 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 02:35:44 ]
- >>279 コードの意味も目的も示さずに名前が決められると思うな。
- 281 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 02:41:55 ]
- B_IfA()
- 282 名前:255 mailto:sage [2008/10/22(水) 03:37:32 ]
- むわ。こんなにレスついてたなんて。ごめんね、遅くてorz
初版 単に見やすいと言うだけではなく、ひとかたまりの処理であることを明確にすることも可能となる 単にそろえただけで、処理の区別が明確とならない悪い例 EmployeeName = InputName EmployeeAddress = InputAddress EmployeePhone = InputPhone BossTitle = Title BossDept = Department 2版 この10年間で得た知識から、このインデントスタイルは見栄えはよいかもしれないが、 (中略) 面倒であることがわかった。 こんな感じです。 2冊あえて買ったという訳じゃなくて、改版されたから買っただけなんだけどね。
- 283 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 06:47:08 ]
- つまり
悪い例=面倒 どうおもしろいんですか?
- 284 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 11:32:31 ]
- 初版における良い例。
EmployeeName = InputName EmployeeAddress = InputAddress EmployeePhone = InputPhone BossTitle = Title BossDept = Department
- 285 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 11:41:47 ]
- あるデータをシステムに import / から export するクラスがあります。
これのクラス名には、なんという名前がいいでしょうか。 import だけ、または export だけなら XxxImporter とか XxxExporter でいいと思うんですけど、 両方を行うクラスについて、いい名前が思いつきません。 たすけてえらいひと。
- 286 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 12:00:54 ]
- Xxx
- 287 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 12:40:53 ]
- >>286
今は DataImporter とかなんで、これが Data となるのはちょっと。。。
- 288 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:03:07 ]
- >>285 XxxPorter
- 289 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:23:21 ]
- XxxTrader
- 290 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:24:50 ]
- import + export = transport
- 291 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:29:34 ]
- >>288
そうか、imとexの両方を行うんだから、それを外したporterというのはありそうですね。 >>289 import and export という意味なら、たしかにtradeまたはexchangeがいいのかもしれません。 アドバイスありがとうございました。検討します。
- 292 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:54:19 ]
- DataImporterという名前がすでにまずいのでは。
適した名前空間の中に入っているから大丈夫だとするのであれば、Dataでも問題はないはず。
- 293 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:40:20 ]
- >>292
Dataというモデルクラスがすでにあるので、むりです。 (実際には、DataはUserだったりItemだったりOrderだったりしますが。)
- 294 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:01:29 ]
- DataIOとか。
- 295 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:30:18 ]
- >>293
よく分かんないんだけどそのUserクラスにエクスポートメソッドをつけるのって愚かなことなの? インターフェイスでもいいけど。
- 296 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:31:40 ]
- 要するにシリアライザ/デシリアライザ、なんでしょ?
一緒にしない方が分かりやすくないか? シリアライザとデシリアライザを集約するクラス(Dataクラス?)が Serializer.Save()とDeserializer.Load()を公開すれば必要十分に思うが。。
- 297 名前:1/2 mailto:sage [2008/10/23(木) 20:40:56 ]
- class User {
protected $_id, $name, $email, $password; public function __construct($id, $name, $email, $password) { $this->_id = $id; $this->_name = $name; $this->_email = $email; $this->_password = $password; } }
- 298 名前:2/2 mailto:sage [2008/10/23(木) 20:41:45 ]
- >>297つづき
class Hogehoge { function getUser($id) { //データベースからデータを取ってくる return new User($id, $name, $email, $password); } function getUsers() { //データベースからデータを取ってくる foreach () { $users[] = new User($id, $name, $email, $password); } return $users; } } $hogehoge = new Hogehoge(); $hogehoge->getUser(1234); $hogehoge->getUsers(); みたいなことをすためのHogehogeのクラス名ってどんなのがいいですか? ちなみに上のやつはPHPです。
- 299 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 20:52:11 ]
- Useless
- 300 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:09:01 ]
- MyDatabase
- 301 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:12:17 ]
- >>297
PHPには静的メソッドとかクラスメソッドとかいう概念はないの? あればUserクラスのメソッドにすればよさそうだが。
- 302 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:25:22 ]
- ああ・・・そうします
- 303 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:35:27 ]
- データベースへのアクセスをラップするクラスじゃなかったのか・・・
- 304 名前:デフォルトの名無しさん [2008/10/24(金) 15:46:21 ]
- 文字列の中から一文字置き換える関数を作った場合
関数の引数名はそれぞれどのような名にしますか?
- 305 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 15:48:17 ]
- すみません
>>304ですが、C言語です
- 306 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 16:47:15 ]
- 引数は文字列、検索する文字、置き換え後の文字の3つ?
- 307 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 17:08:26 ]
- char *s
char old_char char new_char
- 308 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 18:13:59 ]
- >>306
はぃ、
- 309 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 19:33:33 ]
- searchやsubstituteなどを考えるより、old/newやbefore/afterの方がわかりやすい気がする
- 310 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:46:40 ]
- newは予約語となっている言語があるので注意が必要。
|

|