image

1: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:05:56.070 ID:E4nEffKhd.net
本当に保守しづらくなるからやめてほしい


2: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:07:21.807 ID:RgMkVWmF0.net
共通化ってなんですか


3: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:08:16.823 ID:SaSPbWy50.net
本物のプログラマはサブルーチンを使わない
main() にすべて詰め込むのが正しいお作法


5: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:10:00.334 ID:E4nEffKhd.net
>>2
同じ処理をするコード・同じパターンを持つコードをクラスや関数にすること

>>3
アホ


6: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:10:18.914 ID:PKgZsTzI0.net
>>3
どこのコボラーだ。


4: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:08:26.932 ID:BadA7VDW0.net
同じコードのコピーがあちこちある方が保守大変なんだが


7: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:10:21.954 ID:E4nEffKhd.net
>>4
共通化しない = コピペじゃないよ


13: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:13:51.311 ID:BadA7VDW0.net
>>7
共通化しないって事は似たような処理作る時に元のコードコピーしてちょっと変えて、みたいな作り方するって事だろ?
そっちの方が保守大変って言ってるんだが


14: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:15:45.005 ID:E4nEffKhd.net
>>13
ほとんどのケースでそっちの方がマシです


8: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:11:28.907 ID:cRQGOIQMd.net
共通化が悪いんじゃなくて、共通化するセンスが絶望的なんだろ


12: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:13:30.258 ID:E4nEffKhd.net
>>8
そもそもセンスの良いプログラマには「共通化」という考え自体がないと思う


9: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:11:46.834 ID:nl0wY5g+0.net
既存処理への影響が大きいので同じような処理をコピペして新たに作成しよう!←これ


36: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:28:15.655 ID:B5bplL350.net
>>9
基本的に変わらない部分はもちろん共通化してるけど、例外的なやつはこれになるよね
そして、例外が多くなると
まぁ、あるあるだよね


10: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:11:49.193 ID:Us9evZDU0.net
明日、プログラミングスレに来て下さい
本物のType-Level Generic Programmingによる共通化を見せてあげますよ


11: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:12:02.063 ID:Ym34BKHLd.net
共通ソースなんてバカなことしない。
使いもしないコードも入れるなんて非効率でバカらしいからな。
必要なコードだけ拾って自分の中に組み込む。
そうすればカスタマイズするにも足を引っ張りも引っ張られもしない。
作業に見合った生産コード数にもなる。


15: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:15:59.564 ID:Us9evZDU0.net
よく分からないけど標準ライブラリとか使わない派閥の人ですか…?


16: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:16:16.339 ID:E4nEffKhd.net
>>15
使うけど


17: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:17:11.093 ID:lCvwSQTd0.net
>>16
つまり標準ライブラリ作者は下手なプログラマだったのか…


18: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:17:41.979 ID:Us9evZDU0.net
じゃあ何を持って共通化を攻撃しているのかこちらには伝わりませんね
もっと深堀りして下さい


19: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:18:21.116 ID:E4nEffKhd.net
共通化しない = コピペ

って考えになるのは、なぜだろう

・良い作法が当たり前に身についているから、共通化の弊害はレベルが低すぎて全く念頭にない
・悪い作法(= 共通化)を良い作法だと勘違いしている

のどちらか。おそらく後者だろう


20: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:19:15.502 ID:Us9evZDU0.net
是非を論じる前にあなたが論じようとしている問題のドメインが極めて不明瞭であることが明らかになりました
ステップを一つ戻って下さい


22: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:19:18.087 ID:BadA7VDW0.net
これはセンスなさそうな奴だな
お前多分プログラマーに向いてないよ


23: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:19:29.793 ID:l/Rsj5T4M.net
まあわかる
テスト範囲洗い出すだけでも大変になる


24: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:19:43.487 ID:CbhmxBZ1M.net
DDDでレイヤー設けるのと純関数作るだけで楽だよ


25: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:20:27.846 ID:nl0wY5g+0.net
どうせ小規模にも満たないような数行のプログラムしか作らないやつなんだろ


26: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:21:34.271 ID:5UEBZmzc0.net
見つけるの面倒だからやめてほしい
処理はちゃんと都度書くべき


27: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:22:50.890 ID:LWMcYj4t0.net
コード修正するたびに類似した箇所を全部修正してまわるつもりなんだろうか
複数人での開発だとメンテナンス不可能だろ


29: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:23:37.663 ID:E4nEffKhd.net
>>27


28: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:23:03.609 ID:E4nEffKhd.net
似たコードを共通化すると、将来プログラムが成長したときに
結局共通化したコードは別の処理だったことが判明

・それを利用している箇所をすべて直す(OCPに反する)
・その関数やクラス内で処理を切り替える(SRPに反する)

のいずれかを強いられる
だからコードは共通化してはいけない


40: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:33:06.776 ID:LWMcYj4t0.net
>>28
設計の問題を転嫁すんな
構造化プログラミングも理解できないようなクズに設計させるなよ


30: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:26:18.178 ID:/o0m9gN70.net
場合による
何度もコミットされてその都度レビューに晒されて鍛えられる部分は共通化のメリットが大きい
一度コミットされたら何年もそのままの部分はよく分からなくなるから後で修正する人が困る
共通化したらしたでその処理を他の人も使わなければ意味がない


31: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:26:36.271 ID:lCvwSQTd0.net
ライブラリ使っといて共通化は悪とか矛盾してるだろ
一切使わないで作ってから主張しろよ


35: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:27:43.343 ID:E4nEffKhd.net
>>31
ライブラリは共通化のためのものじゃないぞ


51: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:09:38.425 ID:Us9evZDU0.net
ふむ、ライブラリを使うなと言ったのは>>31で私ではないですが
都合のいいレスにしか応答できないんですかね?w


32: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:26:51.624 ID:Ym34BKHLd.net
結局共通クラス作っても、それのバージョンがまたあるんでしょ?
で、こっちのプロジェクトはバージョンいくつので、こっちのはバージョンいくつので、て結局ファイル単位では丸々コピペになる。
で共通クラスを新しいの使おう、で何だか表示変わっちゃったとか操作変わっちゃったで取説も作り直し。


33: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:27:12.145 ID:Qx8BAd61d.net
設計がクソなだけじゃん


37: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:28:34.296 ID:E4nEffKhd.net
>>33
そうです
「共通化」を基準にすると悲惨な設計になります


34: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:27:22.995 ID:Us9evZDU0.net
なるほど、「似ている」コードを共通化することに問題があるということですね
しかしあなたの気持ちを伝えるにしてもまだ修飾語が足りない気がしますが…


38: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:29:40.186 ID:Us9evZDU0.net
> ライブラリ(英: library)は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。

共通化だと思いますが…極論を言うのはおやめになったほうがいいのでは…


43: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:34:55.283 ID:E4nEffKhd.net
>>38
・再利用のため
・処理の実装を隠蔽するため

ほとんどの人が同意すると思うぞ


41: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:33:42.952 ID:skvoJt3+M.net
「共通化しようとするな!!」
具体的な例も出さずに共通のルールとくろうとしてるお前はそりゃ共通化なんて使わないほうがいいぞ😅


42: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:33:51.056 ID:/o0m9gN70.net
Googleは全てのソースコードが単一のリポジトリで管理されてて、自分が書いたコードを色んな人が再利用するから自然と鍛えられるんだと思う
一人の人間が書いたコードなんてたかがしてれてるんだから、みんなで一つのコードを鍛えていくっていう文化が必要なんだろう


44: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:35:48.438 ID:sztUTFl9M.net
共通化するのはいいけど
共通化する部分のテストくらいは書いてほしい


46: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:41:57.659 ID:Us9evZDU0.net
一般通念として「再利用可能なプログラム」を「共通化されたプログラム」とも呼んでいいと認識しているはずですが…?
ほとんどの人が同意とは?それによってライブラリが共通化のためでないことに同意するんですか?
論理的に回答していただきたいですが…


47: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 11:46:36.451 ID:LWMcYj4t0.net
描画関係のコードとか大きい上に数百回単位で呼ばれるのもザラなのにベタ書きとかどんな嫌がらせなのか


49: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:05:24.177 ID:E4nEffKhd.net
つくづく思うのだが、日本語が読めないことをさも誇らしげにアピールしたがる奴ってのは、何がしたいんだろう

共通化するな
=全部コピペしろ
=ライブラリ使うな

というのは単なるお前の解釈であって、それを言い続けてもお前が馬鹿だと告白することにかならないぞ


61: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:38:48.314 ID:lCvwSQTd0.net
>>49
処理を再利用のため共通化したものがライブラリなんだから
共通化が悪ならライブラリを使うのも悪になるだろ
それ以外どんな解釈があるんだ


67: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:43:30.931 ID:PKgZsTzI0.net
>>61
問題は「共通化」と喪舞の言う「再利用の為の共通化」の差異。


69: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:45:43.503 ID:E4nEffKhd.net
>>67
「コーディング指針としての共通化」を批判しているのであって、結果としてコードが共通化されることがすべて悪いと言っているのではない

普通の国語力のある人なら、こうとしか捉えられないと思うよ


50: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:09:33.199 ID:hlyXlIVCr.net
共通化って言葉にコンセンサスのない独自の概念織り交ぜて狭義的に取り扱ってるお前かまずガイジ


52: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:12:23.054 ID:hlyXlIVCr.net
「問題のある共通化には問題がある」
レベルのバカ構文で話してるんじゃないのなら
まず共通化という言葉が指す範囲を明確化したうえで問題提起してね


53: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:12:45.209 ID:RgMkVWmF0.net
似てるけど本質が違う処理を一纏めにするなって言いたいのか?


54: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:14:50.746 ID:Us9evZDU0.net
>>53
どうもそうらしいけど
そんなトリビアルなことを言うのにここまで誤解を積み重ねることが出来るとは思えないしなぁ…


55: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:27:44.223 ID:E4nEffKhd.net
まともなソフトウェア設計の本に多く載っている例:

ゲームプログラミングにおいて、Enemyクラスみたいなものを作り、個別の敵クラスはそれを継承する
Enemyクラスには各種パラメータや、攻撃時に呼び出すメソッドなどが定義されており、サブクラスはそれらをオーバーライドする

こういうのは、一見するとテンプレートメソッドパターンの正しい使い方に思えるが、多くのケースで破綻する
改修を重ねるにつれて例外的に、攻撃メソッドを持たない敵だとか、死ぬ前に何かしてく敵とかが現れると対応できなくなるから

結局、最善のプラクティスは、「攻撃メソッドを持つ」などの細かな(実際にはもっと細かな)インタフェースを定義し、それを各クラスに実装していくこと


56: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:33:04.156 ID:Oc9N5Grlp.net
一つのプログラムに全部まとめるとバグが見つけにくい定期


57: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:34:14.901 ID:c/k95OE4a.net
一緒に働きたくないレベルだわこれは


58: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:35:10.006 ID:cRQGOIQMd.net
なるほど、何かの本とかで知ってこじらせちゃった感じねw


59: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:35:12.999 ID:E4nEffKhd.net
もっと極端な例:

・10%の消費税を加える処理
・10%の金利を加える処理

はともに数値を1.1倍する全く同じ処理だが、これらを共通化すると

仮に消費税が変わったときに、金利計算をしている箇所をすべて変更しなければいけなくなる

という事態に陥る
この場合のベストプラクティスはこう

消費税を加える処理・金利を加える処理を別々に実装し、その中身は全く同じにする(0.1という定数2つは定義しておく方が良いかもしれない)

こんな簡単なことは間違えないと思っている奴ほど迷惑プログラマだったりするから困る


62: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:39:23.036 ID:K62/H7Cia.net
>>59
関数2つ作る気か?


68: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:44:55.616 ID:lCvwSQTd0.net
>>59
「その場合は」共通化すべきではないだけであって共通化すべき場面は無数に存在する
その一例から共通化自体が悪い作法というのは無理がある


70: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:46:22.474 ID:E4nEffKhd.net
>>68
> 共通化自体が悪い作法

って書いてないじゃん


60: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:38:27.894 ID:K62/H7Cia.net
引数で倍率渡すんじゃダメなん?


66: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:43:03.532 ID:E4nEffKhd.net
すでに多くの人は、俺の主張を理解していて、レスバで意固地になっているだけだと思うが
>>60>>62みたいに本気で勘違いしている奴がいる、ということは注意すべきではないかと思う


63: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:39:30.356 ID:V4aJUm7sd.net
まあ共通化するということ自体が目的になって無理に共通化しようとする奴多い


64: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:41:52.018 ID:PKgZsTzI0.net
何かと思えば、馬鹿が馬鹿を指さして馬鹿だと叫んでいるだけじゃないか。


65: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:42:02.691 ID:vTJ1S63O0.net
インターフェイスはスパゲッティになるからなあ
攻撃メソッドをキャラクラスに持たせるのはベストプラクティスでもなんでもない


71: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:47:14.293 ID:zjHZf6Qd0.net
つぶしあえー


74: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:56:10.693 ID:4o46N5w6r.net
ポンコツツールを使って全く共通化されずに類似ロジックが大量に存在してバグの塊となったM銀行の新システムというものがあってだな


77: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:58:43.849 ID:PKgZsTzI0.net
って書いたら>>74が書かれてた。OTL


76: 以下、?ちゃんねるからVIPがお送りします 2021/03/31(水) 12:57:49.928 ID:PKgZsTzI0.net
良く見たら誰もイッチの疑問に応えて無いな。


元スレ: https://viper.2ch.sc/test/read.cgi/news4vip/1617156356/