なぜ、下手なプログラマはコードを共通化したがるのか
2021年04月25日
本当に保守しづらくなるからやめてほしい
共通化ってなんですか
本物のプログラマはサブルーチンを使わない
main() にすべて詰め込むのが正しいお作法
>>
同じ処理をするコード・同じパターンを持つコードをクラスや関数にすること
>>
アホ
>>
どこのコボラーだ。
同じコードのコピーがあちこちある方が保守大変なんだが
>>
共通化しない = コピペじゃないよ
>>
共通化しないって事は似たような処理作る時に元のコードコピーしてちょっと変えて、みたいな作り方するって事だろ?
そっちの方が保守大変って言ってるんだが
>>
ほとんどのケースでそっちの方がマシです
共通化が悪いんじゃなくて、共通化するセンスが絶望的なんだろ
>>
そもそもセンスの良いプログラマには「共通化」という考え自体がないと思う
既存処理への影響が大きいので同じような処理をコピペして新たに作成しよう!←これ
>>
基本的に変わらない部分はもちろん共通化してるけど、例外的なやつはこれになるよね
そして、例外が多くなると
まぁ、あるあるだよね
明日、プログラミングスレに来て下さい
本物のType-Level Generic Programmingによる共通化を見せてあげますよ
共通ソースなんてバカなことしない。
使いもしないコードも入れるなんて非効率でバカらしいからな。
必要なコードだけ拾って自分の中に組み込む。
そうすればカスタマイズするにも足を引っ張りも引っ張られもしない。
作業に見合った生産コード数にもなる。
よく分からないけど標準ライブラリとか使わない派閥の人ですか…?
>>
使うけど
>>
つまり標準ライブラリ作者は下手なプログラマだったのか…
じゃあ何を持って共通化を攻撃しているのかこちらには伝わりませんね
もっと深堀りして下さい
共通化しない = コピペ
って考えになるのは、なぜだろう
・良い作法が当たり前に身についているから、共通化の弊害はレベルが低すぎて全く念頭にない
・悪い作法(= 共通化)を良い作法だと勘違いしている
のどちらか。おそらく後者だろう
是非を論じる前にあなたが論じようとしている問題のドメインが極めて不明瞭であることが明らかになりました
ステップを一つ戻って下さい
これはセンスなさそうな奴だな
お前多分プログラマーに向いてないよ
まあわかる
テスト範囲洗い出すだけでも大変になる
DDDでレイヤー設けるのと純関数作るだけで楽だよ
どうせ小規模にも満たないような数行のプログラムしか作らないやつなんだろ
見つけるの面倒だからやめてほしい
処理はちゃんと都度書くべき
コード修正するたびに類似した箇所を全部修正してまわるつもりなんだろうか
複数人での開発だとメンテナンス不可能だろ
>>
逆
似たコードを共通化すると、将来プログラムが成長したときに
結局共通化したコードは別の処理だったことが判明
・それを利用している箇所をすべて直す(OCPに反する)
・その関数やクラス内で処理を切り替える(SRPに反する)
のいずれかを強いられる
だからコードは共通化してはいけない
>>
設計の問題を転嫁すんな
構造化プログラミングも理解できないようなクズに設計させるなよ
場合による
何度もコミットされてその都度レビューに晒されて鍛えられる部分は共通化のメリットが大きい
一度コミットされたら何年もそのままの部分はよく分からなくなるから後で修正する人が困る
共通化したらしたでその処理を他の人も使わなければ意味がない
ライブラリ使っといて共通化は悪とか矛盾してるだろ
一切使わないで作ってから主張しろよ
>>
ライブラリは共通化のためのものじゃないぞ
ふむ
都合のいいレスにしか応答できないんですかね?w
結局共通クラス作っても、それのバージョンがまたあるんでしょ?
で、こっちのプロジェクトはバージョンいくつので、こっちのはバージョンいくつので、て結局ファイル単位では丸々コピペになる。
で共通クラスを新しいの使おう、で何だか表示変わっちゃったとか操作変わっちゃったで取説も作り直し。
設計がクソなだけじゃん
>>
そうです
「共通化」を基準にすると悲惨な設計になります
なるほど、「似ている」コードを共通化することに問題があるということですね
しかしあなたの気持ちを伝えるにしてもまだ修飾語が足りない気がしますが…
共通化だと思いますが…極論を言うのはおやめになったほうがいいのでは…
>>
・再利用のため
・処理の実装を隠蔽するため
ほとんどの人が同意すると思うぞ
「共通化しようとするな!!」
具体的な例も出さずに共通のルールとくろうとしてるお前はそりゃ共通化なんて使わないほうがいいぞ😅
Googleは全てのソースコードが単一のリポジトリで管理されてて、自分が書いたコードを色んな人が再利用するから自然と鍛えられるんだと思う
一人の人間が書いたコードなんてたかがしてれてるんだから、みんなで一つのコードを鍛えていくっていう文化が必要なんだろう
共通化するのはいいけど
共通化する部分のテストくらいは書いてほしい
一般通念として「再利用可能なプログラム」を「共通化されたプログラム」とも呼んでいいと認識しているはずですが…?
ほとんどの人が同意とは?それによってライブラリが共通化のためでないことに同意するんですか?
論理的に回答していただきたいですが…
描画関係のコードとか大きい上に数百回単位で呼ばれるのもザラなのにベタ書きとかどんな嫌がらせなのか
つくづく思うのだが、日本語が読めないことをさも誇らしげにアピールしたがる奴ってのは、何がしたいんだろう
共通化するな
=全部コピペしろ
=ライブラリ使うな
というのは単なるお前の解釈であって、それを言い続けてもお前が馬鹿だと告白することにかならないぞ
>>
処理を再利用のため共通化したものがライブラリなんだから
共通化が悪ならライブラリを使うのも悪になるだろ
それ以外どんな解釈があるんだ
>>
問題は「共通化」と喪舞の言う「再利用の為の共通化」の差異。
>>
「コーディング指針としての共通化」を批判しているのであって、結果としてコードが共通化されることがすべて悪いと言っているのではない
普通の国語力のある人なら、こうとしか捉えられないと思うよ
共通化って言葉にコンセンサスのない独自の概念織り交ぜて狭義的に取り扱ってるお前かまずガイジ
「問題のある共通化には問題がある」
レベルのバカ構文で話してるんじゃないのなら
まず共通化という言葉が指す範囲を明確化したうえで問題提起してね
似てるけど本質が違う処理を一纏めにするなって言いたいのか?
>>
どうもそうらしいけど
そんなトリビアルなことを言うのにここまで誤解を積み重ねることが出来るとは思えないしなぁ…
ゲームプログラミングにおいて、Enemyクラスみたいなものを作り、個別の敵クラスはそれを継承する
Enemyクラスには各種パラメータや、攻撃時に呼び出すメソッドなどが定義されており、サブクラスはそれらをオーバーライドする
こういうのは、一見するとテンプレートメソッドパターンの正しい使い方に思えるが、多くのケースで破綻する
改修を重ねるにつれて例外的に、攻撃メソッドを持たない敵だとか、死ぬ前に何かしてく敵とかが現れると対応できなくなるから
結局、最善のプラクティスは、「攻撃メソッドを持つ」などの細かな(実際にはもっと細かな)インタフェースを定義し、それを各クラスに実装していくこと
一つのプログラムに全部まとめるとバグが見つけにくい定期
一緒に働きたくないレベルだわこれは
なるほど、何かの本とかで知ってこじらせちゃった感じねw
・10%の消費税を加える処理
・10%の金利を加える処理
はともに数値を1.1倍する全く同じ処理だが、これらを共通化すると
仮に消費税が変わったときに、金利計算をしている箇所をすべて変更しなければいけなくなる
という事態に陥る
この場合のベストプラクティスはこう
消費税を加える処理・金利を加える処理を別々に実装し、その中身は全く同じにする(0.1という定数2つは定義しておく方が良いかもしれない)
こんな簡単なことは間違えないと思っている奴ほど迷惑プログラマだったりするから困る
>>
関数2つ作る気か?
>>
「その場合は」共通化すべきではないだけであって共通化すべき場面は無数に存在する
その一例から共通化自体が悪い作法というのは無理がある
>>
> 共通化自体が悪い作法
って書いてないじゃん
引数で倍率渡すんじゃダメなん?
すでに多くの人は、俺の主張を理解していて、レスバで意固地になっているだけだと思うが
>>
まあ共通化するということ自体が目的になって無理に共通化しようとする奴多い
何かと思えば、馬鹿が馬鹿を指さして馬鹿だと叫んでいるだけじゃないか。
インターフェイスはスパゲッティになるからなあ
攻撃メソッドをキャラクラスに持たせるのはベストプラクティスでもなんでもない
つぶしあえー
ポンコツツールを使って全く共通化されずに類似ロジックが大量に存在してバグの塊となったM銀行の新システムというものがあってだな
って
良く見たら誰もイッチの疑問に応えて無いな。