クソコードとは何か

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

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

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

等、クソコードを見た時に「あっ、これクソコードだ」って認識する根拠を挙げていきましょう。
2021/02/27(土) 08:48:42.05ID:ZW3ZqwOa
テストコードを書かないとクソコードになるという話題でもする?

テストコードを書くなどをして、自作のクラスを必要としているところ以外から呼び出さないと、気が付かない内に他のクラスとベッタリ依存するコードを書いたりしそうだが、そこら辺はどう?
2021/02/27(土) 10:03:55.32ID:OfxFNKjU
>>743
テストコード書かないんだから問題ない
テストコードは目的ではない
2021/02/27(土) 10:05:26.57ID:hpJz9JUm
じゃあ目的は?そしてその目的をよりよい方法で解決する手段は?

目的と手段の2つをお答えください(笑)
2021/02/27(土) 10:05:53.12ID:OfxFNKjU
テストコードこそがクソコード、これがこのスレの結論でしょうな
2021/02/27(土) 10:07:23.47ID:OfxFNKjU
>>745
プログラムの目的とはユーザを満足させること
そのための手段として実際に人間が使ってみること
こんなこと聞いてる時点でダメだよね
2021/02/27(土) 10:07:54.07ID:OfxFNKjU
クソコード生産マシンの皆さん
2021/02/27(土) 10:09:22.56ID:hpJz9JUm
>>747
料理の目的は、客を満足させること
料理の手段は、実際に人間が食べてみるとと

さて?料理はどうやって作るんですか?w
2021/02/27(土) 10:09:23.73ID:OfxFNKjU
テストコード実行することが目的の皆さんは底辺コーダです
2021/02/27(土) 10:11:27.64ID:ZW3ZqwOa
>>709
>>748
あんた、オブジェクト指向はクソとか言いまわってた挙げ句に厶板住民から総攻撃を食らって知的障害を起こしながらID真っ赤にして人が罵倒してた人でしょ?
文章がソックリだし、知的障害者を起こして人の話を聞かなくなるところもそっくりだわ

まぁ、1つだけ言えるのは、自分の非を認めず、是正する気のないお前のクソコードなんてテストしても時間の無駄だな
お前がテストは無駄だと感じるのは無理もない
クソコードスレなんで、是非、あんたのコードを晒してほしいものだ
良いクソコード事例として貢献できるぞ
2021/02/27(土) 10:12:27.68ID:OfxFNKjU
>>749
実食を重ねて試行錯誤していくに決まってる
料理の鉄人という番組がありましたね
実食によってどちらが優れた料理か決めてましたね
2021/02/27(土) 10:14:18.32ID:hpJz9JUm
>>752
> 実食を重ねて試行錯誤していくに決まってる

ではきこう。試行錯誤を1日に1000回やるにはどうしたら良いか?
2021/02/27(土) 10:14:34.77ID:OfxFNKjU
>>751
それただの人格攻撃ですね
はあ、論理的に議論できない人プログラマーにもいるんですね
2021/02/27(土) 10:15:32.69ID:OfxFNKjU
>>753
1000回やる根拠がないので質問の意味がない、ナンセンスの塊
2021/02/27(土) 10:16:31.76ID:hpJz9JUm
>>755
自分で実食を重ねると言っておきながら
実食の回数を否定するのか?w
2021/02/27(土) 10:18:22.80ID:OfxFNKjU
>>756
よく読んでください、1000回という数字に根拠がないと言ってます、また手段と目的を見誤ってますね
2021/02/27(土) 10:19:07.52ID:OfxFNKjU
数字を増やすことが目的になっておられる
2021/02/27(土) 10:19:40.92ID:hpJz9JUm
>>757
1000回という回数にこだわってるのはお前
試行錯誤の回数は多いほうが良いと言っている
より多く試行錯誤をするにはどうすればいいか
実食を重ねて試行錯誤していくに決まってる(笑)
2021/02/27(土) 10:19:59.65ID:OfxFNKjU
こんなんだから日本はまともなソフトウェアを作れないんでしょうね
2021/02/27(土) 10:21:58.68ID:OfxFNKjU
>>759
おやおやそれは無理がありすぎでしょうw
1000回という数字を出してそれを達成するにはどうすればよいかを聞いたのはあなたでしょう、他人のせいにしないでください
2021/02/27(土) 10:22:42.60ID:OfxFNKjU
>>753であなたが言ってますよ
2021/02/27(土) 10:24:17.05ID:b2AUxonB
反論できなくなったらこれだから日本は〜ってださすぎるだろ
そもそもIT先進国の方がテスト文化進んでるだろうに
2021/02/27(土) 10:24:31.17ID:OfxFNKjU
日本からユーチューブやツイッターが生まれないのはユーザを見ずにコードを見てるからです
2021/02/27(土) 10:25:42.78ID:ZW3ZqwOa
>>761
単体テストってビルドする度に実行するものだけど、理解できてます?
まさか、そんなことも理解せずに単体テスト批判してたの?
あと、クソコードスレなんで、是非、クソコード事例書いてみて
生産性のないお前の愚痴とか相手を挑発するだけで中身のない批判とかどうでもいいから
2021/02/27(土) 10:26:12.15ID:ZW3ZqwOa
あと、クソコードの話と絡めることができないのなら、隔離スレ行ってくれませんか?
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
クラス毎にファイルを分ける理由は?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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