このスレはクソコードとは何かを考えるスレです。
・親クラスが子クラスに依存する処理を持つコード
例...社員クラスを継承した正社員クラスと派遣社員クラスがあり、社員クラスが正社員クラスの知識を持つ状況
・staticにするべきではないモデルにまでstaticにする人
例...社員クラスのメソッドを全てstaticにしたり、社員クラスにシングルトンパターンに相応するものを適用する人
等、クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。
探検
クソコードとは何か
■ このスレッドは過去ログ倉庫に格納されています
2021/01/30(土) 17:33:05.78ID:BjNTZWUI
2021/01/30(土) 17:33:42.44ID:BjNTZWUI
もうレスバの予感しかしない。
産まれたての子鹿のように震えてるよ。
産まれたての子鹿のように震えてるよ。
2021/01/31(日) 10:20:47.27ID:9VN6dodl
>>1
クソはお前の頭だよ
クソはお前の頭だよ
4デフォルトの名無しさん
2021/01/31(日) 11:28:04.42ID:X7lGC0go iostream ωωω
2021/01/31(日) 12:06:18.22ID:otlkJ8kc
>>3
staticおじさん乙
staticおじさん乙
2021/01/31(日) 12:22:48.25ID:Nt4hAxS1
開幕から自分のコードに突き刺さって痛い
7デフォルトの名無しさん
2021/01/31(日) 12:46:25.58ID:I1+jaQmy . /⌒ヽ
∩ ^ω^) な ん だ
| ⊂ノ
| _⊃
し ⌒. ___
_/ ⌒ ⌒ \ うん、うん、
/)) (●) (●) ヽ それで?
|∩ (_人_) |
/ ノ、_ヽノ_ノ ̄)
/ / /フ_/
L_/\ \(
∩ ^ω^) な ん だ
| ⊂ノ
| _⊃
し ⌒. ___
_/ ⌒ ⌒ \ うん、うん、
/)) (●) (●) ヽ それで?
|∩ (_人_) |
/ ノ、_ヽノ_ノ ̄)
/ / /フ_/
L_/\ \(
2021/01/31(日) 12:59:59.35ID:Nt4hAxS1
テストコードが無いのにテストしたとか言うプログラマーの提出するコード
2021/01/31(日) 16:11:11.70ID:MhKR2tlg
同じコードを何度も書く
2021/01/31(日) 16:33:43.28ID:Kwx3DUOx
コードとコードつなぎ合わせて一つのプログラム作ったけどごちゃごちゃでクソコードになってたw
2021/01/31(日) 16:59:37.31ID:Ti7TRi+9
function getPrice(id) {
const price = clothPrice.filter({ id }).first()
return price
}
はい、どこがクソか指摘してみて
const price = clothPrice.filter({ id }).first()
return price
}
はい、どこがクソか指摘してみて
2021/01/31(日) 17:27:33.78ID:JUmaLjMc
どこもクソじゃない
2021/01/31(日) 17:28:15.94ID:TZSorCef
2021/01/31(日) 17:29:51.90ID:JUmaLjMc
>>13
理由を言えないならそれはレビューではない
理由を言えないならそれはレビューではない
2021/01/31(日) 17:33:42.78ID:TZSorCef
まず、このコードを見てクソだと気がつけない人相手だと、言い方が重要。
だから、説明に困ってる。
なぜ、気が付かないのかとか。
考えてるだけだよ。気がついた人は先に理由を述べてほしいが。
だから、説明に困ってる。
なぜ、気が付かないのかとか。
考えてるだけだよ。気がついた人は先に理由を述べてほしいが。
2021/01/31(日) 17:35:04.85ID:JUmaLjMc
2021/01/31(日) 17:40:45.07ID:TZSorCef
getPrice(id) 関数とclothPrice.filter({ id }).first()
ってやってる事は一緒だよね?
責務も殆ど一緒。
些細な違いと言えばfirst以外を呼べなくしたことだが...
たぶん、インスタンスの名称からしてclothPriceをユーザー側に隠蔽する必要も無いのに隠蔽し、挙げ句に役割のかぶったほぼ無意味な関数を無駄に増やしてしまってる。
だから、クソ...だと思った。
ってやってる事は一緒だよね?
責務も殆ど一緒。
些細な違いと言えばfirst以外を呼べなくしたことだが...
たぶん、インスタンスの名称からしてclothPriceをユーザー側に隠蔽する必要も無いのに隠蔽し、挙げ句に役割のかぶったほぼ無意味な関数を無駄に増やしてしまってる。
だから、クソ...だと思った。
2021/01/31(日) 17:42:50.72ID:TZSorCef
あと、一言で言えば...もしかしてドメインモデル貧血症?
2021/01/31(日) 17:46:41.31ID:JUmaLjMc
> getPrice(id) 関数とclothPrice.filter({ id }).first()
> ってやってる事は一緒だよね?
関数とその中のコードが
やってることが一緒になるのは当たり前です。
関数にする意味は、コードの可読性を上げるためです。
「clothPrice.filter({ id }).first()って何やってるの?」
「Priceをgetしてます!( getPrice(id))!」
という会話がコードレビューであるだろうなと少しでも思ったら
それは関数にすることで可読性が上がっているということです。
> ってやってる事は一緒だよね?
関数とその中のコードが
やってることが一緒になるのは当たり前です。
関数にする意味は、コードの可読性を上げるためです。
「clothPrice.filter({ id }).first()って何やってるの?」
「Priceをgetしてます!( getPrice(id))!」
という会話がコードレビューであるだろうなと少しでも思ったら
それは関数にすることで可読性が上がっているということです。
2021/01/31(日) 17:57:42.08ID:TZSorCef
>>19
> > getPrice(id) 関数とclothPrice.filter({ id }).first()
> > ってやってる事は一緒だよね?
>
> 関数とその中のコードが
> やってることが一緒になるのは当たり前です。
実装対象の仕様が1行程度のコードで住んでいる点をまず気にして。
> 関数にする意味は、コードの可読性を上げるためです。
可読性は上がったのだろうか?
だって、何のインスタンスのオブジェクトが返されるか名前から想像できますか?
> > getPrice(id) 関数とclothPrice.filter({ id }).first()
> > ってやってる事は一緒だよね?
>
> 関数とその中のコードが
> やってることが一緒になるのは当たり前です。
実装対象の仕様が1行程度のコードで住んでいる点をまず気にして。
> 関数にする意味は、コードの可読性を上げるためです。
可読性は上がったのだろうか?
だって、何のインスタンスのオブジェクトが返されるか名前から想像できますか?
2021/01/31(日) 18:00:20.47ID:JUmaLjMc
> だって、何のインスタンスのオブジェクトが返されるか名前から想像できますか?
逆。「何のインスタンスのオブジェクトが返されるか」を意識してはいけない。
それはかっこいい言葉で言うならデメテル法則に反している
実装の詳細を意識させるな
逆。「何のインスタンスのオブジェクトが返されるか」を意識してはいけない。
それはかっこいい言葉で言うならデメテル法則に反している
実装の詳細を意識させるな
2021/01/31(日) 18:02:13.86ID:TZSorCef
>>11
clothPrice.filter({ id }).first()
だったら...clothPriceインスタンスのPriceが帰ってくるんだなーって一目で分かるけど
getPrice(id)
だったら...え?何が帰ってくるのこれ?
ってなりませんか?
仮にJavaみたいな型宣言が必要な言語だったとしても、何のインスタンスのPriceが得られるのかわからないですよね?
...って、これが本当の理由かっ!?
色々、問題が想像つくから、回答に迷ってる
clothPrice.filter({ id }).first()
だったら...clothPriceインスタンスのPriceが帰ってくるんだなーって一目で分かるけど
getPrice(id)
だったら...え?何が帰ってくるのこれ?
ってなりませんか?
仮にJavaみたいな型宣言が必要な言語だったとしても、何のインスタンスのPriceが得られるのかわからないですよね?
...って、これが本当の理由かっ!?
色々、問題が想像つくから、回答に迷ってる
2021/01/31(日) 18:03:52.46ID:JUmaLjMc
> getPrice(id)
> だったら...え?何が帰ってくるのこれ?
> ってなりませんか?
そのオブジェクトのpriceだろ
そのオブジェクトが内部で使用している〜とかを意識しないといけないのはデメテルの法則違反
> だったら...え?何が帰ってくるのこれ?
> ってなりませんか?
そのオブジェクトのpriceだろ
そのオブジェクトが内部で使用している〜とかを意識しないといけないのはデメテルの法則違反
2021/01/31(日) 18:04:38.99ID:JUmaLjMc
クソコードじゃないって最初から言ってるだろ
2021/01/31(日) 18:05:06.22ID:TZSorCef
2021/01/31(日) 18:06:51.44ID:JUmaLjMc
> あなたに問いますけど、getPriceって誰に何の為に呼んでもらう関数だと思いますか?
このコードではそれは書いてないのだから、そこを勝手に想像して
自分の都合の良い解釈をするのは、それ自体が間違い
このコードではそれは書いてないのだから、そこを勝手に想像して
自分の都合の良い解釈をするのは、それ自体が間違い
2021/01/31(日) 18:07:52.12ID:TZSorCef
出題者さんの回答が知りたいな...。
まぁ、二人しか答えてないけど。
まぁ、二人しか答えてないけど。
2021/01/31(日) 18:13:16.87ID:TZSorCef
>>26
> このコードではそれは書いてないのだから、そこを勝手に想像して
> 自分の都合の良い解釈をするのは、それ自体が間違い
では、clothPrice.filter({ id }).first()は何をしているメソッドだも思いますか?
こっちは...なんとなくわかりませんか?
私はstiftを触ったことないですが、似たような言語で似たような記述をしたことがあるので推測できます。わかりやすいですね。
> このコードではそれは書いてないのだから、そこを勝手に想像して
> 自分の都合の良い解釈をするのは、それ自体が間違い
では、clothPrice.filter({ id }).first()は何をしているメソッドだも思いますか?
こっちは...なんとなくわかりませんか?
私はstiftを触ったことないですが、似たような言語で似たような記述をしたことがあるので推測できます。わかりやすいですね。
2021/01/31(日) 18:14:04.75ID:JUmaLjMc
> では、clothPrice.filter({ id }).first()は何をしているメソッドだも思いますか?
getPriceをしてるメソッド
getPriceをしてるメソッド
2021/01/31(日) 18:14:59.04ID:TZSorCef
って、よく見たらjsか!?まぁ、どっちでもいいや。
何となくでわかる記述って大切じゃないですか?
何となくでわかる記述って大切じゃないですか?
2021/01/31(日) 18:19:27.38ID:JUmaLjMc
2021/01/31(日) 18:21:37.30ID:TZSorCef
理由は必死に説明しているつもりなんだけどなぁ...。
こうなるから慎重に説明を考えていたんだけどなぁ...
こうなるから慎重に説明を考えていたんだけどなぁ...
2021/01/31(日) 18:22:44.83ID:TZSorCef
何となくでわかるの意味が分かってないことが分かった...。そもそも、filterの意味が分かってない?
2021/01/31(日) 18:25:20.39ID:TZSorCef
何となくこっちが良い
じゃなくて
コードを見たとき、記述から実装内容を察することができることが重要と言うべきだったかな...
言葉選びを間違えるとこうなるから慎重に説明をしないとなんだが...うーん、説明下手orz
じゃなくて
コードを見たとき、記述から実装内容を察することができることが重要と言うべきだったかな...
言葉選びを間違えるとこうなるから慎重に説明をしないとなんだが...うーん、説明下手orz
2021/01/31(日) 18:27:15.53ID:JUmaLjMc
実装者の視点しか持ってないんだよな。
クラス設計というのは、どういうインターフェースにすれば
クラスが"使いやすいか" というクラスの利用者からの視点で設計する
getPriceというメソッドではなく、その中のコードの実装の
話をしてる時点で視野が狭いのは明らか
テストコードも書いたことないだろ?
テストコードは必然的に使いやすいクラスであることが要求されるからな
クラス設計というのは、どういうインターフェースにすれば
クラスが"使いやすいか" というクラスの利用者からの視点で設計する
getPriceというメソッドではなく、その中のコードの実装の
話をしてる時点で視野が狭いのは明らか
テストコードも書いたことないだろ?
テストコードは必然的に使いやすいクラスであることが要求されるからな
2021/01/31(日) 18:27:53.96ID:JUmaLjMc
> コードを見たとき、記述から実装内容を察することができることが重要と言うべきだったかな...
実装の詳細は隠蔽しろって習わなかったのか?
実装の詳細は隠蔽しろって習わなかったのか?
2021/01/31(日) 18:31:40.92ID:TZSorCef
別に、実装者だけではなくライブラリユーザーの事を考えてますよ。
実際、ライブラリ開発者ですしお寿司。
じゃなければ、getPriceって誰か何のためにーなんて質問をする発想はないよ。
たしかに、実装の詳細は隠蔽するべきだね。
でも、私が注目しているのは、まさにユーザビリティに相当する部分です。
実際、ライブラリ開発者ですしお寿司。
じゃなければ、getPriceって誰か何のためにーなんて質問をする発想はないよ。
たしかに、実装の詳細は隠蔽するべきだね。
でも、私が注目しているのは、まさにユーザビリティに相当する部分です。
2021/01/31(日) 18:33:13.55ID:JUmaLjMc
じゃあ実装の詳細を無視して話をしよう
function getPrice(id) {
・・・隠蔽。1行かもしれないし100行かもしれない・・・
}
function getPrice(id) {
・・・隠蔽。1行かもしれないし100行かもしれない・・・
}
2021/01/31(日) 18:35:19.06ID:TZSorCef
1.getPriceが必要な場面を想像できますか?
→想像すること自体が間違いだと回答しましたが、はいorいいえ でお願いします。
2.それが想像できないのはなぜですか?
→想像すること自体が間違いだと回答しましたが、はいorいいえ でお願いします。
2.それが想像できないのはなぜですか?
2021/01/31(日) 18:37:59.05ID:JUmaLjMc
1.getPriceが必要な場面を想像できますか?
いいえ。
2.それが想像できないのはなぜですか?
出題に書いてないからです。
逆に出題に「これは商品オブジェクトです」と書いてあれば
getPriceが必要な場面を想像できます。
いいえ。
2.それが想像できないのはなぜですか?
出題に書いてないからです。
逆に出題に「これは商品オブジェクトです」と書いてあれば
getPriceが必要な場面を想像できます。
2021/01/31(日) 18:39:36.56ID:TZSorCef
>>38
もしかして...getPriceがクラスメソッドの実装ではない事に気がついていない?
もしかして...getPriceがクラスメソッドの実装ではない事に気がついていない?
2021/01/31(日) 18:41:32.55ID:JUmaLjMc
2021/01/31(日) 18:43:52.76ID:TZSorCef
2021/01/31(日) 18:45:22.65ID:JUmaLjMc
2021/01/31(日) 18:46:09.44ID:TZSorCef
>>44
いえいえ、ただのsin関数ですよ。数学の。
いえいえ、ただのsin関数ですよ。数学の。
2021/01/31(日) 18:47:29.69ID:JUmaLjMc
2021/01/31(日) 18:49:00.47ID:TZSorCef
...もしかして、三角関数知らない?
もうギブアップ。
もうギブアップ。
2021/01/31(日) 18:49:45.66ID:JUmaLjMc
2021/01/31(日) 18:50:29.12ID:TZSorCef
酷い意地悪を見た
2021/01/31(日) 18:54:20.45ID:uAw68cw/
面白すぎるだろこのやり取りw
最初から相手の話を聞く気がない人に説明をしても無駄無駄
最初から相手の話を聞く気がない人に説明をしても無駄無駄
2021/01/31(日) 18:54:30.12ID:uAw68cw/
諦めろ>>49!お疲れ様!
2021/01/31(日) 18:58:21.14ID:JUmaLjMc
stdnum.ca.sin SIN (Canadian Social Insurance Number).
https://arthurdejong.org/python-stdnum/doc/1.15/stdnum.ca.sin#module-stdnum.ca.sin
実際にあるみたいだなw
https://arthurdejong.org/python-stdnum/doc/1.15/stdnum.ca.sin#module-stdnum.ca.sin
実際にあるみたいだなw
2021/01/31(日) 18:59:23.14ID:uAw68cw/
sin関数は一目で具体的な用途が判るが、getPriceはそうじゃないし使い勝手もイマイチだって言いたいんだろ
察してやれ
察してやれ
2021/01/31(日) 19:00:26.13ID:JUmaLjMc
2021/01/31(日) 19:01:36.35ID:JUmaLjMc
2021/01/31(日) 19:03:23.18ID:TZSorCef
2021/01/31(日) 19:04:29.63ID:TZSorCef
>>53
よくわかりましたね。正解。
よくわかりましたね。正解。
2021/01/31(日) 19:05:57.07ID:JUmaLjMc
2021/01/31(日) 19:09:21.55ID:JUmaLjMc
function getPrice(id) {
const price = clothPrice.filter({ id }).first()
return price
}
これが一行(二行)だから関数にすべきでないとか
中身を直接書けば何やってるかわかるから関数にすべきでないというならば、
tan(数学のタンジェント)関数はなぜ用意されているのでしょうか?
double tan(double x) {
return sin(x) / cos(x);
}
たった一行です。中身を直接書けば何をやってるかわかります。
同じ理屈であれば、不要なはずです。
そういう結論になるはずです。
tanを関数にする理由は明らかですね。最初に言った理由と同じです
「clothPrice.filter({ id }).first()は何やってるの?」という質問が出るのであれば
それを関数にすることで可読性が上がるのです。中で何をやってるかは
意識させないようにするのが正しい設計です。
const price = clothPrice.filter({ id }).first()
return price
}
これが一行(二行)だから関数にすべきでないとか
中身を直接書けば何やってるかわかるから関数にすべきでないというならば、
tan(数学のタンジェント)関数はなぜ用意されているのでしょうか?
double tan(double x) {
return sin(x) / cos(x);
}
たった一行です。中身を直接書けば何をやってるかわかります。
同じ理屈であれば、不要なはずです。
そういう結論になるはずです。
tanを関数にする理由は明らかですね。最初に言った理由と同じです
「clothPrice.filter({ id }).first()は何やってるの?」という質問が出るのであれば
それを関数にすることで可読性が上がるのです。中で何をやってるかは
意識させないようにするのが正しい設計です。
2021/01/31(日) 19:22:21.34ID:TZSorCef
2021/01/31(日) 19:24:32.72ID:JUmaLjMc
コードはクソじゃないですが?
出題に書いてないって言うのは、出題がクソという意味ですが?
いい加減諦めたら?w
出題に書いてないって言うのは、出題がクソという意味ですが?
いい加減諦めたら?w
2021/01/31(日) 19:24:56.89ID:Ti7TRi+9
風呂入ってたら議論が白熱してた
俺どうすればいい?
俺どうすればいい?
2021/01/31(日) 19:25:29.66ID:JUmaLjMc
オナニーしてねろ
2021/01/31(日) 19:26:58.02ID:Ti7TRi+9
はい
2021/01/31(日) 19:28:30.31ID:TZSorCef
おかえり
もう、疲れたよパトラッシュ...
ところで、パトラッシュ、答えが知りたいな
もう、疲れたよパトラッシュ...
ところで、パトラッシュ、答えが知りたいな
2021/01/31(日) 19:30:52.25ID:Ti7TRi+9
てゆーか、答え言っていいの?
一応想定してた回答はあるけど
一応想定してた回答はあるけど
2021/01/31(日) 19:32:35.81ID:TZSorCef
いいよ!気になる。
2021/01/31(日) 19:34:13.36ID:JUmaLjMc
すでに指摘した点を蒸し返すなよ?
2021/01/31(日) 19:35:02.92ID:JUmaLjMc
せめてデメテルの法則ぐらいはわかった上で発言してくれな
2021/01/31(日) 19:35:18.81ID:Ti7TRi+9
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★4 [ぐれ★]
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★5 [ぐれ★]
- 【速報】高市総理が官邸入り [Hitzeschleier★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 高市内閣「支持」64%「不支持」19% NHK世論調査 ★2 [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 日本人「アメリカ人が作れるなら自分も作れると思った」→銃密造で逮捕 [834922174]
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 巨大地震 [957955821]
- 早く世界滅べ
- 【速報】高市早苗、起床 [779938112]
- 【速報】ぺこーらさん、巨大地震後も配信を続けるwwwwwwwwwwwwwwwww
