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

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

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

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
0159デフォルトの名無しさん2011/10/22(土) 09:08:49.49
>>158
みなさまありがとうございました感謝
0160デフォルトの名無しさん2011/10/24(月) 22:34:58.50
・タイプとパラメーターのセットであるメッセージクラス
・メッセージを受け取り解釈し何らかの動作をするハンドラクラス
・メッセージのタイプを調べそのタイプのメッセージを要求しているハンドラすべてにメッセージをコピーして渡す?クラス

?クラスの名前はメッセージマネージャ以外ではなにが適切ですか?
0161デフォルトの名無しさん2011/10/24(月) 22:37:37.75
メッセージディスパッチャ
0162デフォルトの名無しさん2011/10/24(月) 22:38:38.33
Dispatcherとか?
0163デフォルトの名無しさん2011/10/25(火) 09:58:05.48
SwitchingHub
0164デフォルトの名無しさん2011/10/25(火) 11:09:49.68
message distributor
0165デフォルトの名無しさん2011/10/25(火) 12:52:19.86
次へ、と前へ、で next, prev としてるんですが、
これらを総称した場合の呼び方って何でしょうか?
0166デフォルトの名無しさん2011/10/25(火) 13:01:01.80
連環でいいんじゃないかな
0167デフォルトの名無しさん2011/10/25(火) 13:10:21.59
この日本語初めて聞きました。
調べたんですが、英語だと linkage であってます?
0168デフォルトの名無しさん2011/10/25(火) 14:47:13.36
Navigatorってのも見たことがある
0169デフォルトの名無しさん2011/10/25(火) 15:11:20.20
link
【名詞】【可算名詞】
1
 a(鎖の)環(かん), 輪.
 b(編み物の)目.
 c[通例複数形で] カフスボタン 《★【比較】 「カフスボタン」は和製英語》.
2 (鎖状につながれたソーセージの)一節.
3 結びつけるもの[人]; 連結,きずな,関連 〔with,between〕.

十分じゃねw
0170デフォルトの名無しさん2011/10/26(水) 00:37:40.59
区切りが分かるように特例を設けますか?
ルールを徹底して一貫性を貫きますか?
�@メッセージサービス サービスクラス
�Aサービスメッセージ サービスクラス
後ろが必ず サービス って付きます。
僕はツール作成の容易さを考慮したくて
読みやすさを犠牲にしました。
みんなの意見が聞きたい


0171デフォルトの名無しさん2011/10/26(水) 00:40:49.62
区切りがわからない事態が発生していないのでルール通り
0172デフォルトの名無しさん2011/10/26(水) 00:43:40.27
まずツールってどういう奴よ
0173デフォルトの名無しさん2011/10/26(水) 01:02:58.62
>>172
○○△△サービスクラスってあったら○○と△△が必ず「辞書」みたいなライブラリに存在する
メッセージ+サービス=メッセージングサービスとか造語作る人もいるけど
面倒なのでメッセージは修飾語も主語もメッセージで統一したい
サービスも同じ要領

ツールは設計書に記載してあるクラス名からソースを自動生成するもの
いろんなドキュメントにクラス名やその情報が記載されてある
"似て非なるもの"は厄介
0174デフォルトの名無しさん2011/10/26(水) 02:03:26.79
よくわからん・・・
0175デフォルトの名無しさん2011/10/26(水) 07:16:35.80
日本語で書かれてるはずなのに何を言いたいかがちんぷんかんぷんだ
ひょっとしたら寝たら頭スッキリしてわかるかも、と思ったけど無理だた
0176デフォルトの名無しさん2011/10/26(水) 08:00:04.45
まあ、難しいプロジェクトにいるって事ですw
縁のない人はスルーしてw
0177デフォルトの名無しさん2011/10/26(水) 08:23:13.28
外人?
0178デフォルトの名無しさん2011/10/26(水) 09:07:55.30
難しいプロジェクトだからどうこうのレベルじゃない。
説明が下手すぎるって言ってるんだ。
0179デフォルトの名無しさん2011/10/26(水) 09:09:16.04
2ちゃんにアドバイスを求めてくる難しいプロジェクト(笑)
0180デフォルトの名無しさん2011/10/26(水) 11:05:33.13
クソみたな命名規約があるってことだろ
0181デフォルトの名無しさん2011/10/26(水) 15:11:20.40
AXService
BYMessage
CZMessageService
(A,B,C:修飾語、X,Y,Z:主語)

てことか?

区切りって何よ?特例って君の裁量で設けていいもんなの?
ルールがあるなら基本それ守れよ。
「辞書」みたいなライブラリって何よ?
複数のドキュメントからソース生成すんの?

どこからツッコんで良いかわからんようになった
もっぺん最初から頭ん中整理しなおしてから質問に来てくれ
0182デフォルトの名無しさん2011/10/26(水) 19:01:59.89
「クラス名」を指定することで、そのクラスと、それに関連するソースコードを自動生成するプログラムを作成しています。
例えば「HogeMessenger」と指定すると、HogeMessengerServiceクラスと、それに関係するソースコードが自動生成されます。
この指定するクラス名について悩んでいます。

仕様上、クラス名のサフィックスとして「Service」を付けることになっていますが、
指定するクラス名が「MessageService」だとすると、実際のクラス名は「MessageServiceService」になってしまい、格好が悪い
同様に、「ServiceMessage」→「ServiceMessageService」になってしまい、二度同じ単語が出てきて格好が悪い

「指定するクラス名の最後が「Service」であれば、実際に作成されるクラスのクラス名のサフィックスに「Service」を付けない」
等の特例を設けるべきでしょうか、それとも設ける必要はありませんか?
自分は特例を設けない方向で考えていますが、みなさんはどうしますか?

という質問なのかな?
0183デフォルトの名無しさん2011/10/26(水) 19:48:06.32
目から香川県が落ちるくらい分かりやすい
0184デフォルトの名無しさん2011/10/26(水) 19:55:15.85
自分なら自動生成される名前にかっこよさは求めない。
ただ、人間が指定する部分と自動的につけられた部分が区別つくようにすると思う。

MessageService → MessageService_Service
ServiceMessage → ServiceMessage_Service

とか。
0185デフォルトの名無しさん2011/10/26(水) 19:55:28.29
>>182
乙
0186デフォルトの名無しさん2011/10/26(水) 20:33:13.20
その辺り、C# なら名前はユーザーに自由に決めさせて(他と被ったらユーザーの責任)、
属性で区別するけどな
0187デフォルトの名無しさん2011/10/26(水) 20:54:37.01
まあServiceなんつう業務仕様にも現れそうな一般的単語を
自動生成やらコーディング規約やらに含めるのが間違いなんだろうな
0188デフォルトの名無しさん2011/10/27(木) 01:08:52.17
最近のレスだと>>187だけに同意。
間違えてる時って、わりと最初のほうから間違えてるから、
最後のほうになって悪あがきしたところでもう詰んでる。
0189デフォルトの名無しさん2011/10/27(木) 01:14:07.65
自動的に何でもかんでもServiceを付けるようにした事に何のメリットがあるの?
0190デフォルトの名無しさん2011/10/27(木) 22:05:08.33
ファイル検索するときに*Serviceで容易に拾えるじゃん
他にも沢山ファイルがあるとしてだが
0191デフォルトの名無しさん2011/10/27(木) 22:40:49.99
俺ならそんなありがちな単語でなくて、もっとかぶりそうにない文字列を選ぶけどね・・・
0192デフォルトの名無しさん2011/10/27(木) 23:04:45.92
SrvとかServとかSvとかか?
その造語を誰が伝えてどうやって広める?
0193デフォルトの名無しさん2011/10/28(金) 00:44:21.50
>>192
造語じゃなくてそのシステム固有のプレフィックスみたいな決め事だよ。
生成された名前には問答無用でそれをくっ付けるんだよ。
ネームスペースを使えない(使わない)ような環境では普通だろ。
0194デフォルトの名無しさん2011/10/28(金) 00:46:09.31
例えば yacc が吐くコード中のシンボルの yy みたいなのね。
0195デフォルトの名無しさん2011/10/28(金) 13:59:05.69
>>190
頭悪いソリューションだな
0196デフォルトの名無しさん2011/10/29(土) 00:07:22.14
頭の良いソリューションに出会ったためしがない
0197デフォルトの名無しさん2011/10/29(土) 00:22:38.91
simulationはシミュレーションでもシュミレーションでも気にならないが、
solutionをソリューションと発音されると気になって仕方がない。

頭悪い奴御用達の渡辺美里の例の歌も気になってしょうがなかったな。
0198デフォルトの名無しさん2011/10/29(土) 01:16:25.98
スルーシュンだよな
0199デフォルトの名無しさん2011/10/29(土) 01:17:47.09
もういいよ
0200デフォルトの名無しさん2011/10/29(土) 02:00:40.77
>>197
わかりはじめた!
0201デフォルトの名無しさん2011/10/29(土) 07:29:33.83
むしろ趣味レーションは気にしろよw
0202デフォルトの名無しさん2011/10/29(土) 12:15:43.09
スィサイドスルーシュン!
0203デフォルトの名無しさん2011/10/29(土) 12:36:59.25
プレフィックスって見辛くて仕方ないからサフィックスにしてほしい
0204デフォルトの名無しさん2011/10/29(土) 12:45:15.42
うむアクセス演算子の記述も逆順を許容できるようにすべきだよな
0205デフォルトの名無しさん2011/10/29(土) 16:15:50.91
アンダーバーのプレフィクスを使うと総合開発環境の入力候補でprivateメンバを後ろに追いやる事ができるのが便利なんだよ

0206デフォルトの名無しさん2011/10/29(土) 16:24:59.02
>>205
現状それしか方法がない、仕方がないとは言え、
やはり解決方法としてはダサいの一言に尽きますなぁ

入力候補の並び替え機能は何で付けないんだろ
0207デフォルトの名無しさん2011/10/29(土) 17:07:54.16
privateメンバを後ろに追いやりたいという動機そのものが理解できないけどね俺は。
0208デフォルトの名無しさん2011/10/29(土) 18:06:11.19
privateとかpublicを判断してソートしてくれりゃいいのにね
intelliなんだから
0209デフォルトの名無しさん2011/10/29(土) 18:13:09.03
むしろ、そんな必要性を感じるのなら、きっとコードの書き方が間違ってるんだよ。
0210デフォルトの名無しさん2011/10/29(土) 19:26:38.46
>>209
一覧の表示方法とコードの書き方にどのような繋がりがあるのか、
もっとしっかりちゃっかりまったり説明してくれ
0211デフォルトの名無しさん2011/10/29(土) 19:41:55.54
当たり前のことだが、アクセスレベルとはクラスの外側からのメンバーの見え方を制御するもの。

つまり視点をクラスの内部に置いている時(そのクラスを書いている時)には
呼び出そうとしているメソッドのアクセスレベルなんか気にしても意味ない。

っていうか、メソッド一覧がアクセスレベルで分類なんかされたら
かえってありがた迷惑でしかない。
0212デフォルトの名無しさん2011/10/29(土) 20:02:37.84
>>211
外からアクセスしねーのに一覧に表示されたら邪魔だろ
そんな簡単なことも分かんねーのかモンキー
0213デフォルトの名無しさん2011/10/29(土) 20:06:43.73
intelliって言ってるからMSのVSの事を言ってるんだと思うが、
元々MSのインテリセンスは現在のコンテキストから見えるメンバしか表示されませんよ。

何意味不明なこと言ってるんだろうね。
0214デフォルトの名無しさん2011/10/29(土) 20:13:42.29
などと意味不明の供述をしており動機は未だ不明
0215デフォルトの名無しさん2011/10/29(土) 20:54:54.39
>>213
病院行ってこい
0216デフォルトの名無しさん2011/10/29(土) 22:42:29.85
(え、protected/privateでも表示されるよな・・・)
0217デフォルトの名無しさん2011/10/29(土) 22:53:50.02
213っておかしなこと言っているか?
その通りだと思ったが
protected/privateが現在のコンテキストから見えれば表示される
0218デフォルトの名無しさん2011/10/29(土) 22:57:07.69
C#は出ないけどVC++はコンテキスト関係なく全部表示されなかったか
0219デフォルトの名無しさん2011/10/30(日) 05:57:32.71
変数名にクラス名サフィックス付いてるのよく見るけど良いのか悪いのか分からない
熟語になるし一目で型は分かるけど補完に使えない
0220デフォルトの名無しさん2011/10/30(日) 10:30:28.54
>>218
またVC#贔屓か
0221デフォルトの名無しさん2011/10/30(日) 11:44:24.83
↑アホ
0222デフォルトの名無しさん2011/10/30(日) 11:49:43.31
贔屓どころかC++のインテリセンスの方が普通に考えてコストかかってるだろう
C#のように完璧は無理だから間違って出るはずのものが出ないよりは全部出たほうがマシって判断なんじゃね
0223デフォルトの名無しさん2011/10/30(日) 12:02:25.34
いいから黙ってろザコ供
0224デフォルトの名無しさん2011/11/02(水) 12:49:40.72
何か処理する前と後に呼び出されるコールバック関数があるんだけど
Hoge(preHoge , ???Hoge);
???って何が入るの?
0225デフォルトの名無しさん2011/11/02(水) 13:01:25.04
preの反対はpost
0226デフォルトの名無しさん2011/11/02(水) 13:53:23.93
はい次の患者さんどうぞ
0227デフォルトの名無しさん2011/11/02(水) 17:42:51.33
callableかな
0228デフォルトの名無しさん2011/11/02(水) 19:05:14.63
HogeHeader
HogeFooter

・・・最高にダサいな
0229デフォルトの名無しさん2011/11/02(水) 22:47:39.87
ディスパッチャーとコントローラーってどう違うの・・・?
0230デフォルトの名無しさん2011/11/02(水) 22:57:48.15
何もかも違うだろう
何が同じだと思ったんだ
0231デフォルトの名無しさん2011/11/02(水) 22:58:14.64
ディスパッチャーは何かを適切なところへ送り届ける役目。
コントローラーは何かを管理・制御する役目。
0232デフォルトの名無しさん2011/11/02(水) 23:41:37.27
むしろコントローラーといったらディスパッチされる側になることが多いんじゃないか
0233デフォルトの名無しさん2011/11/03(木) 01:20:55.79
>>231
ありがとう
ということは今までコントローラーとつけてたのはディスパッチャーに
マネージャーとつけてたのはコントローラーにしないとなあ
0234デフォルトの名無しさん2011/11/03(木) 08:29:06.18
コントローラーは入力を適切な形に変換して対象のオブジェクトに届けるんだよ
0235デフォルトの名無しさん2011/11/03(木) 09:04:19.79
例として、2Dのシューティングゲームを想像してほしいのだけれど、
自機、敵、弾丸、アイテムなど、プレイ中に出現する「動くもの」全般の基底クラスの名前をお願いしたい。

これらは、自身の座標、移動量、生存フラグ、出現してからの時間といった変数の他、
自身の更新メソッド&描画メソッドなどを持っている。

0236デフォルトの名無しさん2011/11/03(木) 09:14:42.80
class MovableEntity : public GameEntity ;
class DynamicEntiry : public GameEntity ;
0237デフォルトの名無しさん2011/11/03(木) 11:11:46.66
class Hoge
{
public:
SomeResourceHandle Get(void) { return hRes ; }
private:
SomeResourceHandle hRes ;
};

リソースの所有権がHogeにあって、Getで取得した生ハンドルを外部で保持するのはまずい
ということを利用者にわかりやすく伝えるメソッド名はなにがよいか
0238デフォルトの名無しさん2011/11/03(木) 11:31:57.01
>>237
こんな答えは望んじゃいないだろうが、俺なら外に出さなくてすむようにする。
そしたら、少なくともそういう難しいメソッド名(や、使いにくいルールの押し付け)で悩まなくてすむ。
0239デフォルトの名無しさん2011/11/03(木) 11:35:13.60
>>237
俺なら、そういう「適切な利用方法」に関する情報は名前には入れない
名前には「それは何か」という情報だけを入れる

外部で保持されてはまずい生ハンドルがどうしてGetで取得できちゃうの?
0240デフォルトの名無しさん2011/11/03(木) 11:44:32.43
そういう情報はコメントで書くもんだ
0241デフォルトの名無しさん2011/11/03(木) 11:49:45.20
DangerousGetHandle()
0242デフォルトの名無しさん2011/11/03(木) 12:21:54.03
>>236
ありがとう MovableEntityにしてみる
0243デフォルトの名無しさん2011/11/03(木) 12:33:41.70
>>237
.NETだと下層のAPIをラップしたものなど、動作に関して使用者が責任を
持つ必要がある安全でない型やメンバーはUnsafeプレフィックスが付く

この例だと、UnsafeGetHandle()かUnsafeHandle()あたり
後はドキュメントに取得したハンドルの有効期限などを記述すれば良い
0244デフォルトの名無しさん2011/11/03(木) 13:05:49.72
.NETだとほんとにヤバいのはDangerous
0245デフォルトの名無しさん2011/11/03(木) 15:50:41.16
.NETにある機能の名前ってよく質問に出るね
これくらいググれないものなのかね
0246デフォルトの名無しさん2011/11/03(木) 15:52:53.23
機能から名前って、意外にググるの難しいだろ
余計なものがいっぱい混ざってるし
だから、逆引き辞典の需要があるわけだし
0247デフォルトの名無しさん2011/11/03(木) 15:59:49.02
そうかな
まあ俺が上手いだけか
0248デフォルトの名無しさん2011/11/03(木) 16:39:21.37
そうだよ

だからコツを教えてあげなよ
0249デフォルトの名無しさん2011/11/03(木) 16:42:50.06
247 さんかっこいー
0250デフォルトの名無しさん2011/11/03(木) 20:21:03.48
getAllXXX
のXXXは単数形?複数形?
0251デフォルトの名無しさん2011/11/03(木) 20:28:39.76
複数
0252デフォルトの名無しさん2011/11/03(木) 20:46:55.47
それは、中学英語の範疇ではないのか
0253デフォルトの名無しさん2011/11/03(木) 20:48:43.60
単数にしてる人多いんだよね
0254デフォルトの名無しさん2011/11/03(木) 21:01:57.14
英語的にはallの場合は可算名詞であっても単数になる場合があったと思ったけどね。
プログラムでは常に複数形にするのが無難だとは思うけど
0255デフォルトの名無しさん2011/11/03(木) 21:26:41.46
あれ、念のため確認してみたら、all+可算名詞の場合は常に複数形が正しいみたいだな。

ただ可算名詞であっても、同じ名詞が抽象名詞として使われる場合単数形になる、
ということはあるみたいで、それとごっちゃになって覚えていたのかな。
0256デフォルトの名無しさん2011/11/03(木) 22:47:02.39
複数が前提だけどひとつしか値が返らない場合はどうするんですか?
別に複数形にしなくたってわかるから1byte節約して書かないほうがマシ
0257デフォルトの名無しさん2011/11/04(金) 01:20:06.06
自分の場合、配列など複数の要素を持つ変数は複数形で名付けてる。
そのルールに従うと、今回のメソッドも複数形になる。

が、そもそも自分はAllを省いて getXXXs() で良いと思う派。
0258デフォルトの名無しさん2011/11/04(金) 01:29:43.73
ああ、確かに何か特別な理由でもない限りAllなんて付けないのが普通だな。
■ このスレッドは過去ログ倉庫に格納されています