クラス名・変数名に迷ったら書き込むスレ。Part27
at TECH
1:デフォルトの名無しさん
16/10/16 08:01:30.20 NOg6ZxxU.net
クラス名、変数名のつけ方に悩んだら書き込むスレです。
命名規則や設計の善し悪しについて議論するのは基本的に禁止。
前スレ
クラス名・変数名に迷ったら書き込むスレ。Part26
スレリンク(tech板)
2:デフォルトの名無しさん
16/10/16 08:02:17.55 NOg6ZxxU.net
スレたてて気づいたけど、
>命名規則や設計の善し悪しについて議論するのは基本的に禁止。
こんなルールがあったとはな
3:デフォルトの名無しさん
16/10/16 08:31:47.00 MMtmJt+k.net
別に返信はいらんけど。
>set / getがダメという意見にはまったく賛成できない。
>言語も熟練度も越えたアクセサの命名規則だろ。
>素人でも理解できる。
↓
命名規則はいらない。皿に盛り付ける事でもなんでも全部setって言わん。盛り付けの名称は盛り付け。
しかも素人ってなに?誰?そしてその素人はアクセサの命名規則に詳しいの?
↓
この前騒いでたのはお前か?など、論点に関係ない事をまくし立てたのち、
「その例はアクセサじゃない。アホらしい帰る」
と言う流れ。
全く関係ないが、善意でわざわざ君の質問にレスしてやると、この前の件だかに関して俺は一つもレスしてません。
やけに拘ってるところを見ると、あのくだらない喧嘩の当事者の一人かな?
確かあの喧嘩も日本語や論理のやりとりがおかしかったよな。
4:デフォルトの名無しさん
16/10/16 11:34:54.41 m7EkH73x.net
>>990
5:a> >正直、企画連中が使う言葉なんてコロコロ変わるからそれに合わせて命名なんかやってらんない > >初期段階では「割引券」機能と言ってたくせに、実装が一通り終わってから「会議で正式名称は『RaCoupon』に決まりました!」なんてさ モデルは常に進化する 割引券であるうちはクラス名も割引券が正しい モデルが変化してRaCouponになったらコードに反映させてクラス名をRaCouponに変えるのが正しい 最初にクラス名をDiscountTicketに翻訳してモデルが変化してもそのままDiscountTicketを使い続けるのがモデルを無視した最悪のパターン
6:デフォルトの名無しさん
16/10/16 11:58:17.40 8D32iC3X.net
>>4
名称(仮)
↓
正式名part1
↓ 部長が「語感が悪いから変えろ」ってさ
正式名part2
↓ごめん、商標引っかかってたわ…part1に戻すわ
正式名part1
↓やっぱ部長が嫌がって1と2の折衷案になった
正式名part3
ってなことが昔あったな
文系の人達なんて、そこまで体型立てて考えた上で言葉を使わないから合わせてたら仕事にならないぞ
7:デフォルトの名無しさん
16/10/16 12:16:20.63 m7EkH73x.net
>>5
それでもだよ
名前がコロコロ変わるのには同情するが名前とエンティティの関係を崩すよりはだいぶマシだ
8:デフォルトの名無しさん
16/10/16 12:19:51.33 aZSoSj+a.net
>>5
毎回きちんと連絡くれるならまだいい方
マスターアップ直前になって「あ、その名前変わったんですよー」なんてケースもある
9:デフォルトの名無しさん
16/10/16 12:22:31.05 8D32iC3X.net
>>6
その名前関係自体、企画の中で崩れてるからどうしようもねえよ
酷いときは人によって言ってることが違う
ある企画の人は割引券、ある企画の人はクーポンって呼んでる
10:デフォルトの名無しさん
16/10/16 12:30:02.78 m7EkH73x.net
>>7-8
それはドメインエキスパートとのコミュニケーションが不足してるだけ
11:デフォルトの名無しさん
16/10/16 12:32:00.48 8D32iC3X.net
>>9
コミュ以前に文系連中はそこまでしっかり考えてないんだって
あいつら、『ニュアンスがなんとなく伝われば万事オッケー』の考え方で会話するから統一しようなんて試み自体が馬鹿げてる
12:デフォルトの名無しさん
16/10/16 12:41:43.78 61G64M2R.net
>>6
名前変更如きで追加工数は認められないから、名前が変わるたびにサービス残業で直すことになるけど大丈夫か
ってか仕事したことある?
13:デフォルトの名無しさん
16/10/16 12:47:00.16 MMtmJt+k.net
商品名と開発名は別物だろうに
14:デフォルトの名無しさん
16/10/16 12:50:15.44 m7EkH73x.net
>>10
だからコミュニケーションが足りてないんだって
モデリングはステークホルダーが一体となって行うものだ
ドメインエキスパートがモデルにない言葉を使ったらこちらからその言葉の意味はなんですか?と問いかけなきゃならない
ミーティングでもレビューでも喫煙所でも酒の場でもいい
割引券でモデリングしているのにドメインエキスパートがクーポンという言葉を使ったならクーポンとはなんですか?とその場で問いかけてクーポンをモデリングしなければならない
もしかしたらドメインエキスパートの間では割引券とクーポンの間には微妙な違いがあるかもしれないしそうならばモデルにもその違いを反映させなければならない
結果として割引券とクーポンが同じものだったとしてもそれがハッキリするだけでその試みには価値がある
あなたたちと私たちが共同で取り組んでいるこのドメインに置いては割引券とクーポンは同じエンティティを指し示しているようです
私たちはすでに割引券という名前でモデルを作っているのであなたたちも割引券で合わせてもらえませんかと交渉することができる
交渉が決裂しても彼らが使っているクーポンという言葉は割引券のエイリアスだから私たちは割引券で合わせよう彼らがクーポンといったら割引券のことと考えていいよと次善策を取ることができる(ここは悲しいが力関係があるから仕方ない)
いうまでもないが彼らとのコミュニケーションにDiscountTicketという新しいエイリアスを持ち出すのは最悪だ
私たちが割引券とクーポンの違いに悩んだように彼らもDiscountTicketという言葉の意味に惑わされることになってしまう
15:デフォルトの名無しさん
16/10/16 12:52:45.04 8D32iC3X.net
>>13
その理屈ならクーポンのエイリアスがDiscountTicketってことで解決だな
長文の割に実にバカバカしい
16:デフォルトの名無しさん
16/10/16 12:53:09.73 m7EkH73x.net
>>11
モデルがしっかりしていないからそうなる
モデルがしっかりしていれば名前の変更は容易い
名前の変更だけで残業が必要なら自分の仕事を見直した方がいい
17:デフォルトの名無しさん
16/10/16 12:54:00.30 RhRg/hma.net
バカにバカって言っても多分伝わらないよw
18:デフォルトの名無しさん
16/10/16 12:56:03.16 RSdG5rFg.net
↓なぜならば!
19:デフォルトの名無しさん
16/10/16 12:57:41.50 61G64M2R.net
>>15
ソースが一文字でも変更されたら、その時点でその実装機能のステートは「動作確認済み」から「未検証」に変更されるのよ
つまり品管に回して動作確認を再度依頼しないといけない
もう一回聞くけど、ほんとに仕事したことある?
趣味でプログラミングやったことしかない学生の妄言にしか見えないんだけど
20:デフォルトの名無しさん
16/10/16 13:00:42.08 m7EkH73x.net
>>14
混乱を加速させるだけのエイリアスを増やすのは愚かだ
ドメインエキスパートはエンジニアが作ったエイリアスなんて知らない
ミーティングなどの場でエンジニアだけに通じるエイリアスを使えばドメインエキスパートが困惑しコミュニケーション不全が発生する
そうなるとこのエイリアスはドメインエキスパートも知っているとかこのエイリアスはエンジニアしか知らないとか○○さんには通じるだろうとかつまらないことに労力をかけて会話を進めなければならない
割引券とクーポンとDiscountTicketだけでも相当な混乱が(最初のうちは気が付かないほど静かに)発生する
同じことを繰り返すうちにプロジェクトは取り返しのつかないほどに混乱することになる
21:デフォルトの名無しさん
16/10/16 13:05:26.24 8D32iC3X.net
>>19
正式名称がコロコロ変わる時点で、元々エイリアスなんてもんは山ほどあるのよ
名前が違う程度で混乱を起こす人はそもそも仕事できない
22:デフォルトの名無しさん
16/10/16 13:06:09.84 m7EkH73x.net
>>18
それが品管の仕事だよ
必要な時に必要なことをする
23:デフォルトの名無しさん
16/10/16 13:10:06.38 61G64M2R.net
>>21
「仕様が変わったわけでもないのになんで呼び名が変わったぐらいで再検証??」
と理由書の提出を求められるだけ
もう一回聞くけど、仕事したことある?
YESかNOで済む質問を何故答えられないの?
24:デフォルトの名無しさん
16/10/16 13:13:59.92 m7EkH73x.net
>>20
エイリアスが複数あっても良い条件を満たすならそれでもいいんだろうな
エイリアスと認識していた名前が本当にただのエイリアスであると確証があるのか確かめたのか?
ドメインエキスパートが日常的に使っているエイリアスとエンジニアが勝手に作り出したエイリアスを皆が区別できているか?
エイリアスを削減する努力をした上でどうしても解消できなかったか?
すでに沢山あるエイリアスにあえてエイリアスを追加する皆が納得する理由と合意はあるか?
25:デフォルトの名無しさん
16/10/16 13:17:49.45 m7EkH73x.net
>>22
だから仕様が変わったんだよ
割引券からRaCouponに変更になりました
仕事は当然してるよ
そこにこだわる君は少し滑稽だけど
26:デフォルトの名無しさん
16/10/16 13:20:16.40 8D32iC3X.net
>>23
むしろ、企画内でエイリアスが溢れてる状況下で開発が合わせなきゃいけない理由がない
最初から言ってるが、開発セクション内で統一が取れてりゃそれで良いのよ
毎日のように変わる企画の言うことなんかいちいち真に受けてたら仕事が全く進まない
27:デフォルトの名無しさん
16/10/16 13:22:12.22 61G64M2R.net
>>24
呼び名が変わった程度で仕様変更は認められないだろうね
品管回すのだってタダじゃないんだから、一笑に付されて泣く泣くコミットを取り消すことになるわ
28:デフォルトの名無しさん
16/10/16 13:25:47.36 m7EkH73x.net
>>25
その結果が企画の意図とかけ離れた製品に繋がるんだけどね
まあそれでもいいならいいんだろう
別に皆が良い仕事をする必要もない
別に熱意もないしアルバイトのように適当に作業を潰して給料をもらえればそれでいいよという生き方を他人が頭ごなしに否定はできないからね
29:デフォルトの名無しさん
16/10/16 13:25:55.02 Uhg/CTUB.net
何の話をしてるのかよくわからんけどその辺にしといたら?
俺は命名の話じゃなくても関連する話題であれば容認すべきって立場だけど、
その俺にしてもあんまり実のある話をしているように思えんなあ。
しかし、俺がその手の話をしてると執拗に>>1のテンプレの
>命名規則や設計の善し悪しについて議論するのは基本的に禁止。
で絡んでくる奴が今日は静かなところを見ると、この下らない論争の
当事者になってるんだろうなきっとw
30:デフォルトの名無しさん
16/10/16 13:34:27.11 8D32iC3X.net
>>27
クラスの命名規則が仕様書の日本語と違う程度で仕様とかけ離れたものを作ってしまうなら、それこそアルバイト以下の能力だよ
アンタのことさ
そもそも今の世に溢れてる優れた製品は99.9%以上、そうやって作られたもんだろ
どこの開発も日本語でクラス名や変数を名付けてなんかいない
実にバカバカしい
31:デフォルトの名無しさん
16/10/16 13:45:58.90 RhRg/hma.net
しかし、バカの出す結論はいつもここに至る
「俺以外の全員がバカ、世界のみんながバカ」
32:デフォルトの名無しさん
16/10/16 13:54:20.73 MMtmJt+k.net
そもそもなんで企画名がコード名に影響を及ぼすのか分からんのだが
農林100号は後付の商品名がコシヒカリ。
開発名は商品名に関わらす農林100号。
33:デフォルトの名無しさん
16/10/16 14:06:31.49 eEuHW07G.net
という事にしておいた方が楽って事なんだろうな
34:デフォルトの名無しさん
16/10/16 14:10:49.43 MMtmJt+k.net
すべてがおわたw
35:デフォルトの名無しさん
16/10/16 14:11:01.21 MMtmJt+k.net
ゴバク
36:デフォルトの名無しさん
16/10/16 14:11:36.69 2jDknijp.net
>>31
企画名と統一してソース内もunicodeで
class コシヒカリ
と名付けるべきだと喚くキチガイが昨日から暴れてる
37:デフォルトの名無しさん
16/10/16 14:20:47.85 MMtmJt+k.net
米 = new 農林100号;
米->商品名設定("コシヒカリ"); //setアクセサ
普通、識別子は終始変わらないものにする。
プログラム始めたばかりなのか分からないが、
class コシヒカリ;
は駄目な理由を説明するのも面倒なほど駄目。
38:デフォルトの名無しさん
16/10/16 14:34:28.15 m7EkH73x.net
>>29
作れる程度で満足するならこだわらなくていいよ
その積み重ねが今の日本のIT資産になっているわけだがね
39:デフォルトの名無しさん
16/10/16 14:36:05.60 2jDknijp.net
>>37
バイト未満の無能くんが日本を語る図
40:デフォルトの名無しさん
16/10/16 14:39:32.79 m7EkH73x.net
>>35
正確にはモデルと統一しろだな
class コシヒカリはコシヒカリがモデル上クラスとして適切なら正しい名前だ
あるインスタンスの商品名がコシヒカリというモデルなら適切なクラス名ではない
41:デフォルトの名無しさん
16/10/16 14:41:09.62 MMtmJt+k.net
誰か早く彼に突っ込んでやってくれ
42:デフォルトの名無しさん
16/10/16 14:45:00.79 pbM/LnBL.net
>>40
あれほどアホだと突っ込む気も起きんよ…
プログラミング覚えて2〜3年程度の意識高い系高校生ぐらいだろ、これ
実務とかけ離れすぎてる
43:デフォルトの名無しさん
16/10/16 14:46:31.68 m7EkH73x.net
>>38
基本的に話題と関係ない罵倒は反論できませんでした参りましたと宣言しているようなものだよ
以後はこの手の敗北宣言にはレスしません
44:デフォルトの名無しさん
16/10/16 14:51:04.97 8D32iC3X.net
>>37
日本の有象無象の優秀な製品を作る開発企業よりも俺の考え方が正しいって?
自惚れも甚だしいわ
具体的に、統一することで仕様との乖離を回避できた事例を教えてくれ
言えないならアンタの妄想でしかない
45:デフォルトの名無しさん
16/10/16 14:51:58.91 MMtmJt+k.net
いいですか。
企画で変更している以上それは商品名であるし、
コードの名称が事後的に変動する仕組みならば、事前の段階で不適切なんですよ。
誰もクラスの事を名指しで言ってるわけではないのです。
46:デフォルトの名無しさん
16/10/16 14:54:27.29 Nb/GIoSo.net
開発中にコード内のクラス名を変更する奴がいたら大混乱するわ
自分一人で開発するならまだしも、プログラマが複数人いる事を忘れてないかね
ガンジーも助走つけてぶん殴るレベル
47:デフォルトの名無しさん
16/10/16 15:06:04.54 Uhg/CTUB.net
何の話をしてるのかよくわからんけど、
(1) コードの識別子は固有名詞やジャーゴンを逐語的にそのまま使うべきか
(2) そもそもコードの識別子に固有名詞やジャゴンを使う必要があるのか
争ってる双方がこの2つを混同してる気がするね。
(2)はケースバイケース。
(1)は基本的にはYesだと思う。そうでないと意思疎通の齟齬の原因になったり、
数か月後数年後コードを見た時に不要な混乱の原因になる。
ただ、逐語的と言っても無理に日本語を使わずともローマ字で十分だとは思うが。
48:デフォルトの名無しさん
16/10/16 15:07:04.14 6wCeCqLa.net
ローマ字はちょっと…
49:デフォルトの名無しさん
16/10/16 15:08:49.88 MMtmJt+k.net
ローマ字はあり得ない
50:デフォルトの名無しさん
16/10/16 15:09:05.65 X/qyWoKu.net
テンプレも読めないゴミは2ちゃんやんなボケ
51:デフォルトの名無しさん
16/10/16 15:09:24.73 MT9uvcEn.net
クラス名が変わることがないと言っている人はプログラム経験ないなりすましだろうね
割引券からRaCouponほどのあからさまな例はともかく
開発が進むとモデルへの理解が深まるのが当たり前(深まらない場合はチーム全員が何も考えてないバイト状態なのでそれはそれで危険)
理解が深まると既存のモデル(とそれに1:1で対応するコード)を理解した形に変更しなければならない
変更の結果としてクラスやメソッドは追加されたり削除されたり移動したりする
変更の前の名前が変更後の意味を適切に表現していない場合も多々ある
その時に適切な名前に変えなければ待っているのは数週間後の破滅だ
52:デフォルトの名無しさん
16/10/16 15:12:56.10 MMtmJt+k.net
>>50
一度もそんな話はしてないんだよね。どこのレス拾ってるのか知らんけど。
53:デフォルトの名無しさん
16/10/16 16:34:11.87 BII1s/gs.net
とりあえずあなたたち、スレのルールに則って進行してちょうだい。
ずいぶん前にそういうルールになってるのよ。
頭良さそうな人たちだから分かってくれるわよね?
54:デフォルトの名無しさん
16/10/16 23:20:59.96 DXmiytAw.net
命名に悩むようなら設計がおかしいと思った方がいい。
55:デフォルトの名無しさん
16/10/20 11:38:05.61 ki2Wlvx2.net
音楽のジャンル別のリストを作るとして
pop_music, rock_musicの形式かmusic_pop, music_rockかどっちがいいと思う?
56:デフォルトの名無しさん
16/10/20 11:42:41.14 kgXtyPBI.net
また同じようなものを持って来たなw
わざとやってるだろw
57:デフォルトの名無しさん
16/10/20 11:44:27.86 h1aMlyOK.net
>>54
同じ話を繰り返すのは痴呆症の始まり
58:デフォルトの名無しさん
16/10/20 11:49:01.85 2NY6CQjy.net
スレチ話が長すぎると、結局どうだったのかってのは正直覚えてないなw
59:デフォルトの名無しさん
16/10/20 11:57:02.09 aGg7Z+yH.net
>>54
音楽って前提なんだからmusicっていらなくね?
60:デフォルトの名無しさん
16/10/20 12:35:04.87 rW6H9Rm1.net
>>58
上位にmusicと名前があるならな。
61:デフォルトの名無しさん
16/10/20 13:01:07.77 qgmQJqVw.net
>>54
んなもんを変数名に持つのがキチガイの所業
URLリンク(www.shoutcast.com)
map genre = new map
genre["Alternative"] = new list
62:デフォルトの名無しさん
16/10/20 20:04:18.55 tJ82kCoW.net
ミュージック以外のロックやポップを扱ってない限りmusicはいらないんじゃね
63:デフォルトの名無しさん
16/10/20 20:29:36.19 8pLXigSN.net
>>61
言語やライブラリにもよるけど pop はなんか被りそうな予感
64:デフォルトの名無しさん
16/10/20 21:08:17.73 OxU8SSxE.net
音楽のジャンル別のリストはpop_music、ジャンル別の音楽のリストはmusic_popだろ普通
65:デフォルトの名無しさん
16/10/20 21:30:15.58 tJ82kCoW.net
そもそもpopはPopularMusicの略なんだけどね
66:デフォルトの名無しさん
16/10/20 21:41:07.38 94lpIvX8.net
>>62
popはコンピュータ用語だからな。
よくない名前なのは間違いない。
67:デフォルトの名無しさん
16/10/20 23:42:01.97 f0mtZhOK.net
music->pop();
……たしかに。
68:デフォルトの名無しさん
16/10/21 01:02:04.64 UfF9tz22.net
つまりPopularを使えと・・・・
69:デフォルトの名無しさん
16/10/21 10:33:32.23 iG+BtZtO.net
>>60
素人さんか?
70:デフォルトの名無しさん
16/10/21 12:53:55.86 RUPp7NOt.net
>>68
俺も >>54 みたいな内容をハードコーディングするかぁ?
って思うけど...
71:デフォルトの名無しさん
16/10/21 13:00:07.56 11+hJAWs.net
ジャンルを変数名で持つのは違うと思うわ
トランスとかノイズとか軍歌とかボカロとか、ジャンルが増えるたびにコード修正が要るじゃん
72:デフォルトの名無しさん
16/10/21 16:59:48.07 iG+BtZtO.net
>>69
ポップスだけのサブセットを取得するときにどう書く?
73:デフォルトの名無しさん
16/10/21 18:46:47.31 RUPp7NOt.net
>>71
サブセットとかの定義がよくわからんからハードコーディングした例を書いてくれ
74:デフォルトの名無しさん
16/10/21 19:14:17.49 RKLPrzgH.net
>>71
プログラム側からポップスを意識しなきゃいけない状況って何だよ
普通はユーザ側がなんらかの方法で指定する文字列の一つにすぎないだろ
75:デフォルトの名無しさん
16/10/21 19:35:43.81 SHIfRlxP.net
>>72
pops = musicRepository.GetPops();
>>73
お前のアプリではそうなんだろうな
でもビジネスではその限りではない
それゆえに素人なんだよ君は
76:デフォルトの名無しさん
16/10/21 19:40:29.32 Mt9nP5cS.net
素人ねぇw
77:デフォルトの名無しさん
16/10/21 19:46:39.64 RUPp7NOt.net
>>74
pops = musicRepository["Pops"];
78:デフォルトの名無しさん
16/10/21 20:06:10.59 8CqsAvi1.net
>>74
musicRepository.get('pops');
79:デフォルトの名無しさん
16/10/21 20:17:11.06 XVEXLa6Z.net
list.filter(m => m.genre == 'pops')
80:デフォルトの名無しさん
16/10/21 21:47:50.54 usEI0+le.net
下の上くらいのレベルの人が勘違いして見下してる感じ?
81:デフォルトの名無しさん
16/10/21 21:58:45.79 WlBi8OA2.net
>>76
popsて変数名はなんなんwアホかw
82:デフォルトの名無しさん
16/10/21 22:30:34.34 Hy0WD3wE.net
ローカル変数ならpopsでmusicとか省略しても全然問題ないと思うな。
musicよりジャンルに注目してるなら。
83:デフォルトの名無しさん
16/10/21 22:33:38.69 vcl3xMBv.net
ローカル変数なら処理内容が分かりさえすればそれこそpとかでも一向に構わん
だが外に出す変数は命名規則厳守 守らん奴は腹を斬れ
84:デフォルトの名無しさん
16/10/21 22:36:49.05 oqbYdZzo.net
>>80
>>74 に言えよ...
85:デフォルトの名無しさん
16/10/21 22:37:39.24 Cqu0mmbT.net
GetPopsくん伝説のはじまりである…
86:デフォルトの名無しさん
16/10/21 22:37:42.74 nbLPSbrD.net
>>74
それ、例えば「プルダウン式でジャンルを選択して該当する音楽一覧を表示する」処理とかどうする気?
ジャンルの数だけswitch文書いたりするなよ…
87:デフォルトの名無しさん
16/10/21 22:48:26.15 Cqu0mmbT.net
>>85
てめぇGetPopsくんディスってんのか?
musicRepository.GetAnison()とか
musicRepository.GetClassic()とか
musicRepository.GetJazz()とか
musicRepository.GetTechno()とか
こーいうのを当然駆使するんだぜ?
ラクショーで分岐だぜ?
88:デフォルトの名無しさん
16/10/21 23:10:05.72 vcl3xMBv.net
>>86
OH KUSO
89:デフォルトの名無しさん
16/10/21 23:27:49.63 SHIfRlxP.net
>>76-78
ジョークにしても笑えないぞ
まさかガチの素人さんだったか?
90:デフォルトの名無しさん
16/10/21 23:33:21.23 SHIfRlxP.net
>>85
それは
musicRepository.Find(m => m.Genre == selectedGenre)
だろ
入力が可変ならパラメタライズする
決め打ちで取得するなら無様なリテラル文字列など使わずパラメータを隠蔽する
基本中の基本だよ
91:デフォルトの名無しさん
16/10/21 23:35:59.71 SHIfRlxP.net
もしかしてハードコード版を使うってとこから脊髄反射で逆にパラメタライズ版は使わないって誤認しちゃったのかな?
頭固いねぇ
92:デフォルトの名無しさん
16/10/21 23:36:44.52 Cqu0mmbT.net
お前がpops言うからみんなリテラルで書いてくれてんだよw
どこに着目してんだお前一人だけ周回遅れやめろw
93:デフォルトの名無しさん
16/10/21 23:39:31.47 115GHNA9.net
線形探索とか一番ないわ
94:デフォルトの名無しさん
16/10/21 23:40:59.85 SHIfRlxP.net
>>92
線形探索ってどこから出てきたん?
95:デフォルトの名無しさん
16/10/21 23:42:03.35 gbFOKPXv.net
>>93
Findの中身を書いてみ
96:デフォルトの名無しさん
16/10/21 23:46:12.52 SHIfRlxP.net
>>94
return Music.Where(expression);
97:デフォルトの名無しさん
16/10/21 23:47:53.74 gbFOKPXv.net
>>95
次はWhereの中身
98:デフォルトの名無しさん
16/10/21 23:48:45.91 SHIfRlxP.net
こっちのほうがいいか?
return Music.Where(predicate);
99:デフォルトの名無しさん
16/10/21 23:51:49.18 SHIfRlxP.net
>>96
そこから先はフレームワークの仕事だ
すぐには書けないよ
100:デフォルトの名無しさん
16/10/21 23:53:19.16 vcl3xMBv.net
Linq使うならなおのことGet***は愚行だろ
せっかく自由にジャンルを新規追加できるようにデータを保持してるのに、新規追加のたびにGet***メソッドが爆誕するのは本末転倒
一部のジャンルのみGet***が実装されてるってのも気色悪いし
101:デフォルトの名無しさん
16/10/21 23:59:09.23 SHIfRlxP.net
>>99
なんか勘違いしてるがハードコード版をいちいち追加する必要はないぞ
俺そんなこと言ったっけ?
要件で必要になった有用なクエリをカプセル化するんだよ
今の文脈ではGetPopsがそれに該当すると仮定している
102:デフォルトの名無しさん
16/10/22 00:01:26.99 DAj343hD.net
>>100
だからそれが気色悪い
自分一人でシコシコ作ってる分にはそれで良いかもしれないが、チームで作る場合には
一部だけしか実装されてないgetとか吐き気がするわ
103:デフォルトの名無しさん
16/10/22 00:07:27.80 IweOgR7T.net
取得時に必ず実行したい処理(ログの掃き出しとかキャッシュの作成とか)を追加しようと思ったときに
Get系のメソッドが複数あると全部に手を加えなきゃいけなくなるから乱立は避けるべきやで
104:デフォルトの名無しさん
16/10/22 00:13:54.97 e4+LVHZw.net
GetPopsくんはお前らより周回遅れだから放置してもええんやで
無理に相手しなくても
105:デフォルトの名無しさん
16/10/22 00:55:11.05 tiqhYV+3.net
>>101
最後は感情論になっちゃうんだ
106:デフォルトの名無しさん
16/10/22 01:00:34.32 jx4+pi2S.net
>>102
そういうのはAOPなどの工夫で解決するべき問題
手で書くなんて時間の無駄はやめること
Getだろうがなんだろうがメソッドがいくつあっても手間にはならない
107:デフォルトの名無しさん
16/10/22 01:14:48.18 ms5m8DIE.net
>>104
感情論じゃあないだろう…
規則性が崩れた実装は混乱の元になる
やっぱりこの子まだまだ経験ないな
108:デフォルトの名無しさん
16/10/22 01:21:45.68 iQvw8haZ.net
いい加減、スレタイとテンプレ読めない奴は命名規則・設計スレでも立ててそっちでやれ
109:デフォルトの名無しさん
16/10/22 01:22:14.23 nW+Ca5Fr.net
>>106
優れた規則性を持っているでしょ?
必要十分なコード書けってだけの話
君のように気に入らないから必要なコードを書かない訳でもないし
使いもしないコードを書く訳でもない
無駄なコードもコードの不足も実装を大いに混乱させるものだよ
君はそろそろ入門書を卒業して実社会でコードに触れるべきだ
110:デフォルトの名無しさん
16/10/22 01:27:33.06 aPWQrVEE.net
>>108
もうとっくに10年以上働いてるわけだが
社員A「演歌取得メソッドどこにある? え?ないの?」
社員B「軍歌取得メソッドどこにある? え?ないの?」
社員C「民謡取得メソッドどこにある? え?ないの?」
社員D「演歌取得メソッドどこにある? え?ないの?(実はAが作ったので存在する)」
こんなやり取りを延々と続ける気か?
111:デフォルトの名無しさん
16/10/22 01:35:05.87 ms5m8DIE.net
>>108
Get***は無駄なコードだよ
汎用性の高いFindがあるなら他は蛇足でしかない
カプセル化するにしてもジャンルを引数で指定してリストを返す取得メソッドが限度だな
112:デフォルトの名無しさん
16/10/22 02:03:39.73 OXRjJseY.net
>>109
それは管理能力が欠如してるだけ
10年ね
>>110
無駄なものもあれば必要なものもある
パラメタライズされたメソッドを使うか明示的なメソッドによるパラメータの削除を使うか
どちらが常に正しいということはない
113:デフォルトの名無しさん
16/10/22 02:10:12.20 e4+LVHZw.net
> 明示的なメソッドによるパラメータの削除を使う
ホビープログラマかな?
114:デフォルトの名無しさん
16/10/22 02:12:26.69 WU36rjz+.net
お前ん中ではそうなんだろうな、ってこういう場面で使うんだろうねw
連想配列で済むものをいちいちGetXXX用意するっていかにもダメグラマが考えそうな設計だねw
115:デフォルトの名無しさん
16/10/22 02:16:18.96 aPWQrVEE.net
>>111
本来必要のない部分で無駄な管理を発生させてる時点でお粗末な仕事よ
繰り返すけど、お前さんのそのやり方はサンプルプログラムに毛が生えたようなもんをシコシコと一人で作ってる学生の間でしか通用しない
116:デフォルトの名無しさん
16/10/22 02:16:49.75 WU36rjz+.net
これ繰り返しになるけど、いつもテンプレをコピペして直接命名の話題ではないがそれに関連する
真面目な議論をぶっ壊そうとする馬鹿がこのくっだらないヨタ話に参加してるのは間違いないけど、
どの面下げてやってるんだろうな
117:デフォルトの名無しさん
16/10/22 02:23:40.15 OXRjJseY.net
>>113
OOPを学ぶことを勧める
>>114
何度も言っているが必要かどうかは場合による
明
118:示的なメソッドにする価値がない場合もあるし明示的なメソッドにしなかったことによって無駄な管理が増えることもある プログラマにとってバランス感覚は重要なセンスだ そしてバランスを取ることを最初から放棄することが最も愚かな選択であることは言うまでもない
119:デフォルトの名無しさん
16/10/22 02:30:22.79 /AjGkbek.net
>>116
明示的なメソッドにするなら最初から全種類明示的なものを用意しなきゃダメだよ
>>109の例で言えば、社員Aのときは「明示的にしなくても良い」と判断してFindを使って演歌取得を実装したが、
社員Dの頃には「演歌取得を頻繁にやるから明示的に用意しよう」と言ってGetEnkaを作るなどと
開発が進むにつれて事情が変わることは珍しくない
このとき、同じ演歌取得なのにFindで取得している箇所とGetEnkaで取得してる箇所が混在することになるか、
Aが実装した箇所を探し回ってGetEnkaに書き換える修正作業が入ることになる
とてもじゃないが綺麗なプロジェクトとは言い難い
120:デフォルトの名無しさん
16/10/22 02:34:22.94 WU36rjz+.net
OOPw
噴飯ものとはこのことかw
モノホンのダメグラマだなw
121:デフォルトの名無しさん
16/10/22 02:47:14.01 eh8upSc0.net
新卒社員に最初の研修で叩き込むレベルのことすら理解できてない若造が
プログラマを語っちゃってんだからギャグにしか見えんな
122:デフォルトの名無しさん
16/10/22 05:05:48.36 nST3ahFj.net
連想配列でも別に良いっちゃ良いんだけど(もちろん状況によるが)
IDE先生が補完してくれるかどうかが一番の課題よね
変数名やクラス名を付けるときって、
IDEの機能に引っ張られるってこと、結構多いんじゃない?
123:デフォルトの名無しさん
16/10/22 05:34:57.07 NzADNRlY.net
最近質問が少なすぎて、一つの質問で(無意味に)100レス引っ張る傾向がある
124:デフォルトの名無しさん
16/10/22 07:44:36.75 DYgWbh/+.net
リテラル文字列使うセンスは理解できん
125:デフォルトの名無しさん
16/10/22 08:22:44.12 LhJjURpJ.net
>>122
その通り
dao.find("ROCK");
これは論外
即解雇
dao.find(MUSIC_GENRE.ROCK);
よくあるパターンだけど長いし読みにくい
職場文化的にオブジェクトの定義と定数の定義が離れる傾向にありコードの凝集度も低いためオブジェクト指向的には悪手
入力補完を何回もしなければならない
間違っちゃいないがスマートじゃない
dao.findRock();
スッキリしていて読みやすく柔軟
振る舞いが全てクラスに凝集しているオブジェクト指向的良設計
入力補完の回数も少なくてすむ
クールな人はこれを選ぶ
126:デフォルトの名無しさん
16/10/22 08:23:25.65 hBp8S2CN.net
>>120
テキストエディタなら文字列リテラルも補完してくれるけど、IDEは補完してくれないものなのか
127:デフォルトの名無しさん
16/10/22 08:36:42.19 DYgWbh/+.net
>>123
音楽のジャンルだったら俺なら列挙型だな
例えば人の性別程度なら下の書き方にするかもね
128:デフォルトの名無しさん
16/10/22 09:16:07.42 gU77zXKz.net
>>123
foobar2000みたいにジャンルをユーザーが自由に設定できるような場合はどうするの?
URLリンク(www.foobar2000.org)
129:デフォルトの名無しさん
16/10/22 10:17:13.07 Me0jAF9q.net
リテラルに拘ってるやつがレベル低いとおもうけどなw
GetPops同等のメソッド量産せずに、っていう例でしかないだろ>>76は
>>126
ふつうはそう作るよな
ソフトウェア側からは単にユーザの入力文字列としか認識しない
pops = musicRepository.GetPops();
こんなのが出てくる余地はない
出るとしたら
list = musicRepository.Get(inputstr);
この形式しかありえない
130:デフォルトの名無しさん
16/10/22 10:34:42.47 WDS1fqif.net
>>126-127
なんど同じことを聞くんだ
バカなのか?
131:デフォルトの名無しさん
16/10/22 10:36:19.57 WDS1fqif.net
>>127
君の狭い世界ではそうなんだろうな
132:デフォルトの名無しさん
16/10/22 10:45:57.22 s+2RjA6Z.net
言い負かそうとせずにこれ以上は平行線だから終わりってならないのが不思議
133:デフォルトの名無しさん
16/10/22 10:51:00.38 /a8S//3o.net
>>122
サンプルコードと言うことすら理解できないんだな w
134:デフォルトの名無しさん
16/10/22 10:53:20.14 NzADNRlY.net
1
135:デフォルトの名無しさん
16/10/22 10:58:37.57 /a8S//3o.net
>>125
ジャンル増減する度にコードに手を入れるの?
法令とか規格で決まっててほとんど変更されないような選択肢なら列挙もあるかもしれないけど
136:デフォルトの名無しさん
16/10/22 11:23:09.18 DYgWbh/+.net
>>133
たかが音楽のジャンル程度なら俺は列挙型だな
自由にユーザーが追加できるようにするならリテラル文字列にするしかないけど
137:デフォルトの名無しさん
16/10/22 11:26:00.78 XrOB7U1S.net
昨日から何度か例に出てる音楽再生アプリだったら特定ジャンルのみ抽出する処理を固定で書く価値は確かにあまりないだろう
しかし例えば音楽ダウンロード販売サイトオーナーの顧客の要望により期間限定でポップスキャンペーン用の特設サイトを新規画面で素早く作りたいといった場合には特定ジャンルの抽出処理を定義済みクエリとして使い回す価値は大きい
こういった様々な状況を想定できず音楽再生アプリでは必要ないから全てが同じように必要ないんだ音楽再生アプリで使うのと同じ形式しかありえないんだと思い込んでしまう浅はかさが素人感を醸し出している
業務でプログラムを書いたことがある人間ならこのような視野の狭い思い込みなどしない
138:デフォルトの名無しさん
16/10/22 12:27:05.54 4bv8Zxei.net
>>135
もういい加減こんなアホな話やめて欲しいし、そもそも何の話をしてるのかも
いまいちよくわからんが、
(1) よく使う「特定ジャンルの抽出処理」はメソッドとして用意すべき
(2) 個々のジャンル全てについて対応する抽出メソッドを用意すべき
恐らく(1)を否定する人はいない。
否定されてるのは(2)
こんなの絵に描いたようなダメな奴がやりそうなことだ。
139:デフォルトの名無しさん
16/10/22 12:37:03.46 W/E63lh4.net
>>136
状況を理解できてないぞ
(1)を否定するバカが少なからず居て粘着しているんだ
140:デフォルトの名無しさん
16/10/22 12:39:53.81 4bv8Zxei.net
いやいないと思うけど。
まあ「べき」は言い過ぎだった。
よく使う処理をショートカットするメソッドが「あってもいい」。
そもそもメソッドとはそういうものだし。
141:デフォルトの名無しさん
16/10/22 12:41:26.84 NzADNRlY.net
どうでもいい
142:デフォルトの名無しさん
16/10/22 12:44:34.83 nST3ahFj.net
>>124
お前は何を言ってるんだと言いたいところだが
その辺は全て補完機能の性能によるとしか言えんじゃろ
143:デフォルトの名無しさん
16/10/22 13:24:10.25 s+2RjA6Z.net
どうでもいい(どうでもよくない)
144:デフォルトの名無しさん
16/10/22 13:35:00.80 hBp8S2CN.net
>>140
・補完機能の優秀なIDEに乗り換える
・pluginで補完機能を拡張する
・IDE開発者に追加機能要望を出す
対策はたくさんあるのに何もせず、今使っているIDEにコードを最適化するのは勿体ないと
145:いう話
146:デフォルトの名無しさん
16/10/22 14:19:07.11 JI+4c/sU.net
>>138
使っても良いではなく使うべき
定義済みの部分集合の要件が変わった時に安全に対処できる
147:デフォルトの名無しさん
16/10/22 14:40:57.39 k8mamnQ3.net
どうでも良いけどfindRockとかfindPopも命名としては悪い
findSMAP(歌手)とかfind80s(年代)とかジャンル以外による検索を追加したときに、検索キーが異なるfind×××がゴチャ混ぜで大量に並ぶことになる
「ジャンルがRock」であることが分かる命名にすべき
148:デフォルトの名無しさん
16/10/22 15:16:25.99 nST3ahFj.net
>>142
それもそうだな。
しかし、連想配列の文字リテラルまで補完できるってのは普通に知らんかった。
言語によるのかしらね。
149:デフォルトの名無しさん
16/10/22 15:32:40.56 9XGd15T1.net
IDEで保管できてもリテラル使って辞書にアクセスとかやめてくれ
自殺者が普通にいるこの業界でそれは殺人行為に等しい
150:デフォルトの名無しさん
16/10/22 15:39:36.54 nST3ahFj.net
>>146
ローカルでしか使わんならそれでもいいけど
そうじゃないなら定数を使って欲しいところね
というわけで適切な定数名を考えよう(スレ的な意味で
151:デフォルトの名無しさん
16/10/22 17:03:27.92 /a8S//3o.net
>>146-147
動的に増やしたい時はどうするんだ?
152:デフォルトの名無しさん
16/10/22 17:09:30.19 nST3ahFj.net
動的に増やしたい場合で、
ソースにリテラルを直接書くことって、あんまり無さそう
もちろん "ID-0042" のような自動生成される文字列はあるにしても
前半だけでも定数化するとかの手段は模索したいなあ
153:デフォルトの名無しさん
16/10/22 17:11:57.64 VPAELI2D.net
この手の話を聞くたびに、後々増える可能性があるものはxmlでもcsvでも構わないから外部ファイルに出しとけよと思う
内部処理はfind(string category)でええわ
追加するたびにコード修正&再ビルドが必要な作りはメンテ性最悪
154:デフォルトの名無しさん
16/10/22 17:13:30.29 hmjQA6vV.net
ほんと、たったそれだけのことなのにな
なぜかメソッドのシグネチャじゃなくて
呼び出し例のリテラル部分にひっかかってる子がいるけど
155:デフォルトの名無しさん
16/10/22 18:12:39.08 PmLwi55w.net
>>149
まだ言ってるのか、どんだけ周回遅れよ w
> 動的に増やしたい場合で、
> ソースにリテラルを直接書くことって、あんまり無さそう
⇒ >>127
156:デフォルトの名無しさん
16/10/22 18:23:40.26 rJrHw2K4.net
>>150
複雑な業務システムだとオレオレ定義ファイルが複雑化、巨大化してコードよりメンテナンス性が悪くなる
そんなものをメンテナンスするぐらいならハードコードしたほうがまだマシ
モダンな言語ならリビルド不要な拡張方法なんていくらでもあるし
157:デフォルトの名無しさん
16/10/22 18:23:56.20 lAgDZlKo.net
>>150
ステップ数でお給料が増減する文明圏の人たちになんてことを
158:デフォルトの名無しさん
16/10/22 18:37:34.74 VPAELI2D.net
>>153
商用なら音楽データの管理なんかそれこそRDBに置くべき案件
ましてや巨大なプロジェクトなら列挙型なんか論外中の論外だわ
159:デフォルトの名無しさん
16/10/22 18:43:34.46 /a8S//3o.net
>>153
> モダンな言語ならリビルド不要な拡張方法なんていくらでもあるし
例えばなに?
160:デフォルトの名無しさん
16/10/22 18:44:10.43 rJrHw2K4.net
>>155
当たり前だろ
今そんな話はしてない
161:デフォルトの名無しさん
16/10/22 18:45:08.68 rJrHw2K4.net
>>156
class , interface
基本だろ?
162:デフォルトの名無しさん
16/10/22 18:47:55.55 VPAELI2D.net
>>157
RDBに置くのにオレオレ定義とかハードコーディングとかアホなのか
所詮カテゴリなんてマスターデータの一種だろ
そんなものをいちいちハードコードするな
163:デフォルトの名無しさん
16/10/22 18:48:50.40 IpUTRyqC.net
>>152
それはコードが無駄に長くなるだけ
164:デフォルトの名無しさん
16/10/22 18:54:59.13 IpUTRyqC.net
>>74
getElementsByTagName, getElementsByClassName, getElementById 派
>>76-77
querySelectorAll 派
こんな感じ
応用力が高いのは後者、パフォーマンスが高いのは前者
165:デフォルトの名無しさん
16/10/22 18:59:54.45 iLkbIGXh.net
>>161
それすらないんだよね前者は
彼が主張してんのが
getElementsByGenreだったらそうだろうけど
getElementsPopsだからね
ここには巨大な隔たりがある
型と値の違いがある
166:デフォルトの名無しさん
16/10/22 19:00:02.31 gYvFPuft.net
マイクロ秒単位でシビアな応答速度が求められるものならまだしも、たかが音楽管理ツールにパフォーマンスを求めたって仕方あるまいて
マシンパワーの1%も使ってないだろう
167:デフォルトの名無しさん
16/10/22 19:03:01.93 gYvFPuft.net
>>162
ByGenreなら大いにアリだな
getPopsはどう考えても頭おかしい
key-valueで言うところのvalueに紐付けてメソッドを作るとかギャグだわ
168:デフォルトの名無しさん
16/10/22 19:03:46.45 rJrHw2K4.net
>>159
だから今そんな話してないだろ
増え続けるRDBへのクエリをどう管理するかって話で>>150はファイルで管理をすると言っているがそんなことをするぐらいならハードコードしろと言っている
マスターデータをハードコードとかどっから出てきたんだよ
169:デフォルトの名無しさん
16/10/22 19:05:51.49 x4x3zU66.net
>>165
マスターの管理は小規模なら外部ファイル、商用ならRDBにしろって話なんだが
RDBを外部ファイルで管理って頭沸いてんの?
170:デフォルトの名無しさん
16/10/22 19:09:18.63 IpUTRyqC.net
>>162
自分は汎用性と拡張性しか考えてなかった
例えば、>>161で特定の属性名を持つ要素ノード群を得るAPIを拡張したいとする
前者は getElementsByAttributeName を追加し、後者は querySelectorAll で属性セレクタを扱えるように拡張する
特価型APIを増やしていくか、汎用性の高いAPIを一つだけ用意するか、の違い
171:デフォルトの名無しさん
16/10/22 19:10:09.83 IpUTRyqC.net
特価型→特化型
172:デフォルトの名無しさん
16/10/22 19:10:17.82 rJrHw2K4.net
>>164
もしかして根本的なところから理解してないのか?
ここでいうGetPopsのPopsとはgenre=="Pops"のmusicのことじゃないぞ
もっとドメインレイヤよりの定義を持った集合にPopsという名前をつけたものだ
最も単純なシステムではたまたま両者は一致するというだけで現実のシステムではそんなに単純ではない
173:デフォルトの名無しさん
16/10/22 19:10:57.24 rJrHw2K4.net
>>166
だめだ全く理解してない
174:デフォルトの名無しさん
16/10/22 19:14:14.98 2RMhh+15.net
>>169
getpops本人まだいたのかよ
よくあんなアホらしいもんを思いついたもんだな
うちのアルバイトでももうちょいまともなもん作るぞ
175:デフォルトの名無しさん
16/10/22 19:15:38.57 wVjPdD/+.net
>>169
>>89を読み直してこい
176:デフォルトの名無しさん
16/10/22 19:16:45.35 yvrzDyTu.net
↓以下、ゲッポ君の「俺意外全員がバカ、世界のみんなが間違ってる」の主張をお楽しみください
177:デフォルトの名無しさん
16/10/22 19:19:25.85 rJrHw2K4.net
>>172
いつの話してんだ
話題は常に変化するもの
流れを呼んでこい
178:デフォルトの名無しさん
16/10/22 19:20:25.73 wVjPdD/+.net
>>174
それお前の中で変化してるだけじゃねーの
179:デフォルトの名無しさん
16/10/22 19:22:51.88 rJrHw2K4.net
>>173
世界は言い過ぎだけどこのスレ程度のレベルじゃ冗談抜きにその通りだと思うよ
180:デフォルトの名無しさん
16/10/22 19:23:36.80 eh8upSc0.net
さすがに頭おかしい
181:デフォルトの名無しさん
16/10/22 19:29:20.29 eh8upSc0.net
特別何かをするわけでもないただのエイリアスを無闇に増やすな
なんて新入社員研修で教えてることなんだが、なんでこんなことでグダグダといつまでも騒いでんだよ
182:デフォルトの名無しさん
16/10/22 19:29:22.73 rJrHw2K4.net
>>177
だって君ら書き込みみれば
183:かるけどズブのアマチュアだろ? オレはいちおう金もらってシステム開発してるからね
184:デフォルトの名無しさん
16/10/22 19:30:25.32 eh8upSc0.net
>>179
22で入社してもう今年で37なんだが
185:デフォルトの名無しさん
16/10/22 19:33:12.94 rJrHw2K4.net
>>180
まあそういう人もいるよな
メゲズに頑張ってくれ先輩
186:デフォルトの名無しさん
16/10/22 19:33:59.10 wVjPdD/+.net
>>179
そんな珍しくもなんともないもんで自分が特別だと思いこんでたわけか
バイトを始めた学生か何かか?
187:デフォルトの名無しさん
16/10/22 19:37:48.27 eh8upSc0.net
>>181
メゲるも何も、呆れしか感じんぞ
改めて見てやるが、getPopsの中身の処理を書いてみな
188:デフォルトの名無しさん
16/10/22 19:40:01.84 lAgDZlKo.net
職業プログラマが何かの箔になると思ってる子をいじめるのはそれぐらいにしなさい
189:デフォルトの名無しさん
16/10/22 19:46:56.14 rJrHw2K4.net
>>183
return Music.Where(popsPredicate);
述語は要件と顧客の気分次第で不定な
190:デフォルトの名無しさん
16/10/22 19:48:14.90 eh8upSc0.net
>>185
なるほど
findないしそれに該当する汎用アクセサは?
191:デフォルトの名無しさん
16/10/22 19:54:00.26 rJrHw2K4.net
>>186
Music
192:デフォルトの名無しさん
16/10/22 19:55:53.56 eh8upSc0.net
>>187
うん??
Musicはメンバ等ではなくグローバルに置いてるのか?
ってことはgetPopsもグローバル?
193:デフォルトの名無しさん
16/10/22 20:01:05.09 rJrHw2K4.net
>>188
return Music;
って書けばお気に召すのかな?
こっちはちっぽけなスマホで打ってるんだ
察してくれ
194:デフォルトの名無しさん
16/10/22 20:05:28.90 4bv8Zxei.net
何でもいいけどいい加減もう止めたらどうだろう。
有意義な議論なら俺個人はどんどんやってほしいけど、
今のこれはあまりに下らなすぎる。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
93日前に更新/268 KB
担当:undef