クソコードとは何か

■ このスレッドは過去ログ倉庫に格納されています
2021/01/30(土) 17:33:05.78ID:BjNTZWUI
このスレはクソコードとは何かを考えるスレです。

・親クラスが子クラスに依存する処理を持つコード
例...社員クラスを継承した正社員クラスと派遣社員クラスがあり、社員クラスが正社員クラスの知識を持つ状況

・staticにするべきではないモデルにまでstaticにする人
例...社員クラスのメソッドを全てstaticにしたり、社員クラスにシングルトンパターンに相応するものを適用する人

等、クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。
2021/02/27(土) 10:28:16.32ID:OfxFNKjU
>>765
いつ実行するかをあなたは話してますね、ふーんって思いました、なんでそんな話をしてくるんだろう
2021/02/27(土) 10:28:52.51ID:OfxFNKjU
>>766
テストコード=クソコード
なのです
2021/02/27(土) 10:30:34.90ID:ZW3ZqwOa
>>768
理由は?
あと、俺が最初に挙げたテスト対象コードの依存の話は?
2021/02/27(土) 10:30:45.78ID:OfxFNKjU
あれを知ってるかこれを知ってるか、そんなことも知らないのか、民主党の国会質疑みたいですね
2021/02/27(土) 10:32:30.36ID:OfxFNKjU
>>769
テストコードを書くとテストコードを実行することやテストコードをきれいに書くことが目的なってしまうからです、このスレの議論を見ればよくわかりますね
2021/02/27(土) 10:32:39.93ID:ZW3ZqwOa
はあ、論理的に議論できない人プログラマーにもいるんですね(皮肉)
2021/02/27(土) 10:35:35.35ID:OfxFNKjU
言うに事欠いて僕の真似をするとは、良いでしょう、あなたがその言葉を発言することを許諾します
2021/02/27(土) 10:36:03.25ID:OfxFNKjU
許しました、僕は心が広いので
775デフォルトの名無しさん
垢版 |
2021/02/27(土) 10:54:25.52ID:Yt5NHAzi
NG推奨:テスト
776デフォルトの名無しさん
垢版 |
2021/02/27(土) 13:00:30.28ID:NhoBp4qK
>>742
クソコーダーはクソスレ建てるのがお上手ですね!
2021/02/27(土) 14:21:58.44ID:o6FTnlQR
まずこのスレがクソスレじゃん
どんなジャンルで悪いお手本をあげつらって技術磨くってのが成り立つんだよ
状況によって対応が細かく変わりうるプログラムってジャンルだと尚更ねーよ
2021/02/27(土) 14:31:49.87ID:EOMk/snY
>>777
は?アンチパターン知らないのなら
2021/02/27(土) 14:32:21.56ID:EOMk/snY
は?アンチパターンも知らないのなら引っ込んでろ底辺プログラマー。
2021/02/27(土) 14:41:04.16ID:OfxFNKjU
アンパンチなら知ってるけど
2021/02/27(土) 14:42:05.95ID:OfxFNKjU
僕はバイキンマンがおしゃれだと思うし好きですけど
2021/02/27(土) 14:43:15.22ID:OfxFNKjU
ドキンちゃん、メロンパンナちゃんは可愛いです
2021/02/27(土) 14:45:08.51ID:OfxFNKjU
天どんマンとカバオくんは渋くて好きです
2021/02/27(土) 14:46:27.65ID:OfxFNKjU
愛と勇気だけが友だちという歌詞も深いですよね、大人の心にも響きます
2021/02/27(土) 14:50:27.61ID:Rkj+zBYu
>>777
スレ主がコンテキストを理解しない底辺プログラマーだから許してあげてね
2021/02/27(土) 15:25:16.36ID:srgcqAD7
コンテキスト?
Device Contextとか、Android Activityとかのコンテキスト?
2021/02/27(土) 15:47:29.01ID:qhUfxMpi
多分コンテキストって言いたかっただけなんだろうと思う…
2021/02/27(土) 16:37:52.70ID:OfxFNKjU
>>786
文脈って意味ですよ
789デフォルトの名無しさん
垢版 |
2021/02/27(土) 16:55:56.55ID:lzDnqtNz
俺は、あわしろ氏を信じる。

お前の言うことは信用しない。
790デフォルトの名無しさん
垢版 |
2021/02/28(日) 03:55:51.43ID:BRDX8bQ+
天ぷらだとうどんと蕎麦のどっちが好き?
2021/02/28(日) 03:57:33.36ID:Gc6Q6B7T
カレー
792デフォルトの名無しさん
垢版 |
2021/02/28(日) 03:59:46.09ID:BRDX8bQ+
>>791
天ぷら前提なんだが、レスがハエーから許す
2021/02/28(日) 04:04:03.84ID:Gc6Q6B7T
天ぷらカレー
794デフォルトの名無しさん
垢版 |
2021/02/28(日) 04:07:35.88ID:BRDX8bQ+
>>793
うどんか蕎麦で
2021/02/28(日) 04:53:09.79ID:Gc6Q6B7T
カレーどんぶり
2021/02/28(日) 09:53:36.42ID:fiymphDk
>>792
みなさんこれがクソコードです
2021/02/28(日) 17:33:35.64ID:JGZwcedL
最初は有意義になるかなと思ったのにクソスレになったな
2021/02/28(日) 17:44:13.70ID:VO7rpKqD
>>797
そう思ってたのはスレ主だけだろw
スレタイ & 1スレでどっちみちクソスレになるのは確定してた
2021/02/28(日) 22:04:12.82ID:AdiQic6X
5chに有意義なことを期待する時点で
2021/02/28(日) 22:29:20.29ID:HY9f+UaN
Qiitaでもクソコード云々言って炎上してる記事があったな
2021/02/28(日) 23:14:06.43ID:797yScED
>>800
試しにクソコードでQiitaを検索してみたがポエムばっかりで面白いのなかったな
↓これが視点としては面白かったけど処理分割のアプローチ間違ってるから新たなクソコードが出来そう
https://qiita.com/teradonburi/items/6483e51d5f9d47f5c22a
2021/02/28(日) 23:55:31.04ID:VPMHnl/e
>>798
いや、スレ主じゃないけどアンチパターン研究スレは厶板に必要だとは思うよ
文脈から察せない人が暴れただけで
2021/03/01(月) 00:40:02.48ID:p4pc8RdJ
>>802
アンチパターンを集めたかったんなら
スレタイと1スレをそうなるよう書けって話だろ
アンチパターンとクソコードは全く別物なんだよ
コンテキストを理解してないと言われてる理由と合わせて最低限パターン・ランゲージくらいは学んでこい


ちなみに「いや」から書き始めるレスはクソレス・パターンだからな
2021/03/01(月) 02:16:03.17ID:6wDZP3ri
>>803
君がコミュ障パターンなだけだろ
2021/03/01(月) 02:47:59.87ID:o92pxtgz
>>804
そうやって自分でクソスレにしてんだよな
クソスレ主あってのクソスレ(ム板拡張版w)
2021/03/01(月) 02:51:31.50ID:g6QBZhEL
アンチパターンを取り上げてる本でオススメある?
SQLアンチパターンを読んで得るものが多かったので
2021/03/01(月) 06:38:18.35ID:6wDZP3ri
>>805
ほうクソの定義とは何かね
2021/03/01(月) 06:39:15.47ID:6wDZP3ri
マーチン・ファウラーのりファクタリングやろな
2021/03/01(月) 06:52:02.27ID:6wDZP3ri
>>805
おいお前話を広げろ、今のお前は他人のヘイトやってるだけのクソ野郎だからそうじゃないところを見せろ
2021/03/01(月) 06:56:37.18ID:6wDZP3ri
あ、間違ってたも
>>805は僕に同意してたわけね
でも僕は敏感な人間だから僕に言われてることだと思った、だけれども紛らわしい言い方した君が悪い、僕は絶対に悪くないからこの件は以後言及することを禁止します、以上
2021/03/01(月) 07:06:26.34ID:6wDZP3ri
上に出てるパターン・ランゲージってアレクザンダーの都市計画理論だろ、プログラミングの本じゃない、そんなたとえ話のようなものでわかった気になるのは危ない

Twitterでも建築の本読んでオブジェクト指向がどうとか言ってる人いるけどポストモダンなソーカル野郎としか思えないんだよなあ、関係のないことを関係づけてそこに気づいた自分が賢いと思いこんでしまうクルクルパー、地頭の良い人が陥りやすい穴のように見える
2021/03/01(月) 08:09:59.68ID:Dkl+jirL
40年近く前の本だしFORTRAN, PL/1が題材だから今の言語に合わない箇所もあるけど名著だと思う

プログラム書法 第2版 / Brian W.カーニハン P.J.Plauger 著 木村 泉 訳 | 共立出版
https://www.kyoritsu-pub.co.jp/bookdetail/9784320020856
2021/03/01(月) 08:21:42.09ID:VB40xofU
プログラミング作法の方が良いと思うよ
2021/03/01(月) 11:23:05.55ID:vk4XQtG7
中国行くと肛門PCR検査
815802
垢版 |
2021/03/01(月) 12:23:46.76ID:sbiXUVTE
コミュ症の自覚がない>>803
2021/03/01(月) 17:40:20.81ID:scPLhEmU
>>803
まーた、詭弁デメテルバカが発狂してるよ
一番勉強が足りてないお前が勉強してないっていうねw
頼むから、一生ROMってろ
2021/03/01(月) 20:15:47.54ID:XEpCIBIH
コードとはまた違うけど
javaのインターフェースとインプリメントはクソだなと思う
無駄にファイル数増えてクソうざい
2021/03/01(月) 20:59:56.79ID:lUjHuGPy
interfaceがクソってw
オブジェクト指向知らないのではw
2021/03/01(月) 21:16:55.91ID:4ocrwkuw
これだからJava脳はw
言語周りで幼稚な愚痴垂れ流してるやつのJava率の高さったらない
2021/03/01(月) 22:39:30.52ID:o/aEg2l/
>>811
GoFのデザインパターンも、ファウラーのリファクタリングも、エリックエバンスのDDDもみんなパターン・ランゲージ

それぞれのパターン・ランゲージに共通する要素は何なのか?
なぜパターンがソフトウェア開発に有用なのか?
この辺を学んで出直してくるといいんじゃね
2021/03/01(月) 22:48:23.51ID:o/aEg2l/
クソコードと言うのは単なるBad Practiceの一種であってアンチパターンとは違うもの

アンチパターンの意味を理解せずにアンチパターンの研究とかまあ無理よね
822デフォルトの名無しさん
垢版 |
2021/03/01(月) 23:16:44.33ID:vk4XQtG7
>>818
abstractだけでいいって事では?
2021/03/01(月) 23:43:38.69ID:f1Pg/hcl
C#やるとJavaのいろいろ足りてない部分はめちゃくちゃ実感する
2021/03/02(火) 00:47:10.90ID:k1c4vJst
>>820
君が何を学んだかを教えてよ
825デフォルトの名無しさん
垢版 |
2021/03/02(火) 03:20:46.99ID:9w2EW+ai
いちいち2chで教えなくていいから
2021/03/02(火) 10:54:48.23ID:MXVQCo9F
Anti-pattern
https://en.wikipedia.org/wiki/Anti-pattern
2021/03/02(火) 11:43:32.18ID:sTNRmcJa
>>818
そのインターフェース本当に必要?ってのが大半
他クラスとは何も関係無い孤立したクラスなのにインターフェース実装されてるの見たことある?
javaやってる感出すためだけにファイル数が2倍になるゴミ
828デフォルトの名無しさん
垢版 |
2021/03/02(火) 12:24:38.24ID:08kau52M
肛門コード
2021/03/02(火) 12:31:08.45ID:MXVQCo9F
>>827
ポリモーフィズム

Storage storage

storage = new USBMemory()
or
storage = new SDCard()

以下、storageを使って読み出し

storage.read()

これができなくなるとか論外
830デフォルトの名無しさん
垢版 |
2021/03/02(火) 15:55:12.73ID:HE4Aq4BV
1メソッド1インタフェイスのペアで作れば解決するじゃないか!

interface Writer{
void write(Data data);
}
interface Reader{
Data read();
}
interface Eraser{
void erase();
}

abstract class Storage implements Writer, Reader, Eraser{
abstract void write(Data data);
abstract Data read();
abstract void erase();
}
2021/03/02(火) 16:18:47.07ID:sTNRmcJa
>>829
そうやって複数クラスで使う前提じゃなくて
自身にしか提供しないくせにインターフェースにするクソコード見ても同じこと言えんの?

その例で言うと
Interface USBMemoryと
Implements USBMemoryImplementsと
Interface SDCardと
Implements SDCardImplementsの4つファイルが作られるんだよ
もちろんStorageクラスなんて作られないからな、覚悟しとけ?
2021/03/02(火) 17:22:18.70ID:MXVQCo9F
>>831
それはどうかと思うけど、それを根拠に>>817みたいな言語機能を批判しちゃだめだろって話
Java脳とか言い出す人が湧いてるし

まぁ、そのコードは確かに問題だな
2021/03/02(火) 17:45:25.68ID:MXVQCo9F
脱線したが、無意味にインタフェースと実装部を分けるクソコードは俺も見たことがある
俺も初心者時代はやらかした事はあったな

無駄にコードが増えるだけでメリットが無いというね
初心者時代は、>>831のコードを書けば
class XXXImplement
から
class XXXImplement2
に乗り換える時が楽だなんて思ってたけど、実際はXXXImplement2なんて作らずにXXXImplementを直接編集してた

変な突っ掛かり方をして悪かったな
2021/03/02(火) 17:49:55.29ID:1QjqZlxS
仕様と実装をどこで切り離しておくかという設計選択の話なのでコードだけでは判断できない
>>831のようにインターフェースに対して実装が1種類しかなくてもそれが望ましい状況もあれば望ましくない状況もある
2021/03/02(火) 17:59:46.35ID:QgVhfuvD
>>834
望ましい状況って例えば何なんw
教えてプロjavaプログラマーさん
2021/03/02(火) 18:06:26.23ID:RCz98UPT
インターフェース作ってもいいけど同じファイルに押し込んで欲しい
こんなくだらない内容でファイル数が倍は勘弁してほしい
2021/03/02(火) 18:27:01.85ID:1QjqZlxS
>>835
Storageの例と一緒だよ
共通した仕様を使いたいレイヤーと複数の実装を使いわけたいレイヤーがあって
それを分離することで結合度を下げときたい場合の選択肢の一つ

USBの例で言えばSDカードや他のストレージとは異なるUSB特有の仕様に依存したコードを書く必要がある場合に
実装が変更されても利用者側のプログラムを変更しなくてもいいようにしたかったり
複数の実装を実行時に切り替えて使えるようにしておきたい場合

面倒臭さと将来の柔軟性とのトレードオフ
切る場所が適切かどうかは要件次第なのでコードからは判断できない
2021/03/02(火) 18:28:28.29ID:k1c4vJst
>>835
実装を変えられるってことさ
オープンクローズプリンシパルを守ろうとしたらインタフェイス切るしかない
2021/03/02(火) 18:29:36.21ID:k1c4vJst
クラスは分けてなんぼ、理想を言えばメソッドごとにクラスを分けるべき
2021/03/02(火) 18:36:50.14ID:Ut+tyB9O
メソッドごとにクラスを分ける理由は?
2021/03/02(火) 18:47:13.75ID:cXyQmkET
同じ階層のものがたくさんあると
全体を把握しにくくなるんじゃないかなあ
842デフォルトの名無しさん
垢版 |
2021/03/02(火) 18:48:50.43ID:2RCjcGnL
クラス毎にファイルを分ける理由は?
2021/03/02(火) 18:48:57.53ID:qGFbOGXJ
Java脳のレスはインターフェースなくてもオブジェクト指向できるっつう話でしょ
引数に関数をとることでインターフェースの代替にできる時もあるしね
2021/03/02(火) 18:59:10.26ID:Ut+tyB9O
>>842
関連するものの単位が同じだからでは?
2021/03/02(火) 19:35:50.44ID:stemNYci
>>831
あの例だと
interface IStorageにread()などの必須メソッドを追加
class USBMemory implements IStorage
class SDCard implements IStorage
やろw
Storage抽象クラス又は親クラスで定義してoverrideでもいいけど
設計次第やな
2021/03/02(火) 19:55:38.87ID:sTNRmcJa
>>845
違うんだよなぁw

Interface USBMemory
class USBMemoryImplements implements USBMemory
Interface SDCard
class SDCardImplements implements SDCard

こんなのが爆誕してるというかほぼ全クラスこんなので統一されてる絶望感分かる?
2021/03/02(火) 20:12:52.16ID:sTNRmcJa
>>833
まあ仕様が悪いというより簡単に悪用される実態が問題なんだよね
そのパターンもあるあるやと思ってる
だけどもし仮に2に乗り換えたところで、何かあった時に戻れるようにって無印が残されて結局ファイル数は増える地獄なんだなぁw
2021/03/03(水) 07:45:39.12ID:jQr6IfK5
>>846
テストしやすくて最高じゃないですか
849デフォルトの名無しさん
垢版 |
2021/03/03(水) 10:51:02.42ID:xzgw1tFV
ワクチン効かなくて人類オワタ
2021/03/04(木) 00:08:07.08ID:FIbtDWBm
親クラスが子クラスに依存する処理を持つコード例
https://stackoverflow.com/a/29907649/

Eric Lippertの書いてるコードがクソなのか?
それともその認識がクソなのか?
2021/03/04(木) 09:40:02.79ID:s3zRsfeD
ケース・バイ・ケース
2021/03/04(木) 09:49:55.40ID:OjWW0m8I
普通にクソってことでいいんじゃね?
クソだけど処理が小さく、まともにするには
過剰気味な設計が必要になるならそのままにするけど
良いとは思わないけど必要十分
2021/03/05(金) 11:07:38.15ID:zIBx0bjD
短絡的にクソコード認定したがるやつの脳みそがクソってことだよ
>>1のようなプログラマーは自分の見方がクソなのかもしれないと考えられるようにならない限り
いつまでたってもクソプログラマーのまま
2021/03/05(金) 16:16:51.44ID:rOFa7Oz2
短絡的にクソプログラマー認定したがるやつの脳みそがクソってことだよ
>>853のようなプログラマーは自分の見方がクソなのかもしれないと考えられるようにならない限り
いつまでたってもクソコードのまま
2021/03/05(金) 17:34:44.54ID:5bhxQzE4
>>854
クソプログラマー認定も含めて自分の見方がクソかもしれないと考えてないようなら
そいつ自身がクソプログラマーの可能性はそれなりに高いだろうね

ただコードとプログラマーにはクソかどうか判断する基準に決定的違いがある
その決定的違いが分かってないから君はクソプログラマーなんだよ
2021/03/05(金) 18:45:25.18ID:Gcj+sygJ
> クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。

スレ主は短絡的にクソコード認定をしていないと思うけど
むしろ、なぜクソコードを見てクソコードだと感じたのか哲学するスレだろ

クソプログラマーの定義とかスレ違いだし、どうでもいいわ
2021/03/05(金) 20:45:43.09ID:72RBlbeS
>>856
スレ主さんwちーすっ
2021/03/05(金) 23:14:44.63ID:6LAcg/yu
>>855
底辺に何言っても無駄
他人からは学べないから
2021/03/06(土) 09:14:58.43ID:6IalgJ8T
根本的な原理が分かってない人が意外なぐらい多い
情報の多重化、DRY原則からの逸脱を誘発するものがとにかく駄目
突き詰めればダメなものは間接的でもそこにつながっているから被害を受けるのだと分かる
いろんなデザインパターンなんて結局は
いろんな状況でDRYを遵守する手練手管が99%だろう
重複実装も必要な時があるが
どんなものをどんな風に重複させるかで
状況はかなり異なるので短絡的な判断は禁物

1が言ってる一つ目の例は
もっと文脈をはっきりさせないと
何がクソなのか断定出来ないし
これで伝わると思ってるなら難アリ
2021/03/06(土) 11:40:20.85ID:3bUl0e7x
そもそもデザインパターンみたいなのは、こうすれば良いのでは?みたいな物だし
正直そういう所から入った層よりは、ある程度組めるようになってから見て納得出来た方が良いかと
つまりは最初に読むものでは無いと
2021/03/06(土) 12:21:11.27ID:x8WQCH58
バックグラウンドとデザパタへの反応

複雑でも無く大きくも無いプログラムで遊んでた人
→自分のコードに対してデザパタの概念が大きい
→無意味にデザパタ導入してコード無意味に膨らます
→あるいはデザパタは無価値だと騒ぎ出す

ある程度複雑で大きいものを作ろうとして糞の山量産した人
→自分のコードに対してデザパタの概念が小さい
→デザパタ導入して部分的に見通し良く場面が見える
→必要に応じてデザパタを無言で使用
2021/03/06(土) 12:47:09.63ID:2s/lB21T
オブジェクト指向を理解するにはデザインパターンを理解するのが近道
言語の基本文法を学んだ後すぐデザインパターンを学ぶと上達がはやい
パターン熱にかかるのも早い方がいい
863デフォルトの名無しさん
垢版 |
2021/03/06(土) 14:22:35.38ID:pd/Aiz5V
デザインパターンとオブジェクト指向は全く別。
2021/03/06(土) 14:29:20.30ID:9ME8iPe/
>>863
GoFのデザインパターンのことだぞ
2021/03/06(土) 19:16:45.22ID:TUaJ1ME0
このスレすげえ面白えな
>>11からの流れは思わず引き込まれてしまった
下手なラノベよりよっぽど読めるわ
2021/03/06(土) 20:23:40.52ID:MNqEIsM4
そう言えば「名前がクソ」というクソパターンは
DRYとあまり関係ないな
あまりに基本過ぎて盲点だった
使ってる言葉や概念がそもそもおかしいのは
あまりに基本的な問題だが一番有りがちかもしれない
特に日本では戯言過ぎて英訳なんか不可能なぐらいの
曖昧模糊とした言葉を話す人が多いので…
コードを書くずっと前から間違ってることが多い
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況