テストも書かないでリファクタリングとかうけるw
まずな、リファクタリングでは機能追加・修正は行わない。
動作はまったく同じでコードをきれいに書き換えること。
書き換えるといっても、これなら同じ動きだろ?って推測でやってはいけない。
まずテストを書く。ユニットテストをできるように、
単一のクラスでインスタンスを作る。
汚いコードなのだからたいていは依存関係のせいで単一ではクラスが生成できない
それを生成するために、クラスの動作を書き換える。
といっても元のコードは修正しない。継承やプリプロセッサを使って
依存関係を断ち切るために既存のコードを上書きする。
どうしてもそれが不可能な場合には、決められた手順で最小のコード修正を行う
そうやって既存のクラスのユニットテストを行う。
それでやっとリファクタリングが行える。
既存のクラスのユニットテストを通るように新たなコードに修正、
もしくは新規作成して置き換える。
この手順と考え方を守ってないのはリファクタリングではない。
で?
探検
リファクタリングをただのコード修正と思ってる人へ
■ このスレッドは過去ログ倉庫に格納されています
2010/05/29(土) 17:25:56
225デフォルトの名無しさん
2011/11/19(土) 17:30:26.36 汚いコード
ゴミ溜めが如くきったない部屋で過ごしてもなーんにも問題無い
↑
↓
チリ一つも落ちていないようなクリーンルームじゃないと過ごせない
綺麗なコード
って話だろ? 何事もほどほどにしとけって事だよ
ゴミ溜めが如くきったない部屋で過ごしてもなーんにも問題無い
↑
↓
チリ一つも落ちていないようなクリーンルームじゃないと過ごせない
綺麗なコード
って話だろ? 何事もほどほどにしとけって事だよ
226デフォルトの名無しさん
2011/11/19(土) 17:33:20.81 >>225
人の話を良く聞かないで進めちゃって失敗するほうじゃない?
人の話を良く聞かないで進めちゃって失敗するほうじゃない?
227デフォルトの名無しさん
2011/11/19(土) 18:59:16.42 >>224
キミがそのコードをずっとメンテナンスする責任者だとして、
どこかのプログラマが明らかにまとめるべきところまとめてこなかったり、
分けるべきところをを無理やりまとめてきたりした場合、
正しく動くという理由でそのままにしておくのかい?
キミがそのコードをずっとメンテナンスする責任者だとして、
どこかのプログラマが明らかにまとめるべきところまとめてこなかったり、
分けるべきところをを無理やりまとめてきたりした場合、
正しく動くという理由でそのままにしておくのかい?
228デフォルトの名無しさん
2011/11/19(土) 19:28:32.54229デフォルトの名無しさん
2011/11/19(土) 19:33:14.80 ソース=設計書だろ?
230デフォルトの名無しさん
2011/11/19(土) 19:47:12.13 >>229
底辺乙
底辺乙
231デフォルトの名無しさん
2011/11/19(土) 19:51:09.79232デフォルトの名無しさん
2011/11/19(土) 20:14:22.32 最高 綺麗で動く
↑ 汚いが動く
↓ 綺麗で動かない
最低 汚くて動かない
一番下のは捨ててよし
[動く/動かない] と [綺麗/汚い] の相関関係だお
汚いけど動くのは、綺麗だが動かないものより価値がある。
でも綺麗で動かないのを 動く にしやすいし、
汚いけど動くものも、後で何か変更するにあたって、動くのを保ちつつ綺麗にしておくと直しやすい。
「綺麗にする」のがリファクタリング。動かないものを動くようにすることとはイコールではない。関係はあるけど。
↑ 汚いが動く
↓ 綺麗で動かない
最低 汚くて動かない
一番下のは捨ててよし
[動く/動かない] と [綺麗/汚い] の相関関係だお
汚いけど動くのは、綺麗だが動かないものより価値がある。
でも綺麗で動かないのを 動く にしやすいし、
汚いけど動くものも、後で何か変更するにあたって、動くのを保ちつつ綺麗にしておくと直しやすい。
「綺麗にする」のがリファクタリング。動かないものを動くようにすることとはイコールではない。関係はあるけど。
233デフォルトの名無しさん
2011/11/19(土) 20:27:15.16 >>232 使用がバッチィからコードもバッチイって発想はないのか?
234232
2011/11/19(土) 20:45:33.70 仕様が汚いと動かすのが難しい
↑
↓
綺麗な仕様は動かしやすい
って関係はあると思うけど、コードと仕様は直接関係しないんじゃねの?
↑
↓
綺麗な仕様は動かしやすい
って関係はあると思うけど、コードと仕様は直接関係しないんじゃねの?
235デフォルトの名無しさん
2011/11/19(土) 20:55:13.83236デフォルトの名無しさん
2011/11/19(土) 21:31:39.15 コードを綺麗/汚いで語るから話がおかしくなるんじゃないか。
リファクタリングって大なり小なり設計の問題の修正のことだと思うんだが。
オレがずれてるのか。
リファクタリングって大なり小なり設計の問題の修正のことだと思うんだが。
オレがずれてるのか。
237デフォルトの名無しさん
2011/11/19(土) 21:34:18.54238デフォルトの名無しさん
2011/11/19(土) 21:49:35.63 もちろん設計の問題とコードの綺麗/汚いは関係ありますが?
最初にきちんと設計をしたつもりでも、実装段階では想定したとおりに行かなかったり、抜けがあったりすることはよくあることです。
実際に書いているうちにいろいろ思いつくこともあります。ちょこっと例外的な処理を付け加えて、を繰り返し、コードは汚くなっていきます。
そうしてソースがスパゲッティ化し、メンテ不能のソースとなっていきます。
そうならないようにするためにリファクタリングがあります。
リファクタリングとは、仕様を変えることなく、ソースコードを改造することをいいます。
汚いソースコードでもプログラムは動きますが、メンテナンスするのは大変です。
汚いソースコードと綺麗なソースコードではメンテのしやすさが全く違います。
なのできるだけ綺麗なソースを書くように心がけ、汚くなったら速やかに書き直すことです。
後々のことを考えて、わかりやすいソースに直します。
最初にきちんと設計をしたつもりでも、実装段階では想定したとおりに行かなかったり、抜けがあったりすることはよくあることです。
実際に書いているうちにいろいろ思いつくこともあります。ちょこっと例外的な処理を付け加えて、を繰り返し、コードは汚くなっていきます。
そうしてソースがスパゲッティ化し、メンテ不能のソースとなっていきます。
そうならないようにするためにリファクタリングがあります。
リファクタリングとは、仕様を変えることなく、ソースコードを改造することをいいます。
汚いソースコードでもプログラムは動きますが、メンテナンスするのは大変です。
汚いソースコードと綺麗なソースコードではメンテのしやすさが全く違います。
なのできるだけ綺麗なソースを書くように心がけ、汚くなったら速やかに書き直すことです。
後々のことを考えて、わかりやすいソースに直します。
239デフォルトの名無しさん
2011/11/19(土) 22:15:38.43 >>238
> そうならないようにするためにリファクタリングがあります。
そうならないように設計を見直す方が先じゃないか?
小手先でどれだけいじっても, 汚い設計は汚いソースを
再生産するだけじゃないのか?
それだったら, 設計をリファクターすべきだ
ぶっちゃけ, ユーザーインターフェースが変わらなきゃ
仕様の範囲内だ
> そうならないようにするためにリファクタリングがあります。
そうならないように設計を見直す方が先じゃないか?
小手先でどれだけいじっても, 汚い設計は汚いソースを
再生産するだけじゃないのか?
それだったら, 設計をリファクターすべきだ
ぶっちゃけ, ユーザーインターフェースが変わらなきゃ
仕様の範囲内だ
240デフォルトの名無しさん
2011/11/19(土) 23:03:54.10 >>238
コピペはいらんよ。
汚い綺麗で語るとコードの可読性ばかりを問題にしてるように感じるって話。
だからリファクタリングがいらないとか言う奴がいるんじゃないの。
コードが綺麗であっても設計上の問題が存在することは当然あるよね。
コードの綺麗/汚いは設計の一部しか示していないと思うし、
その修正はリファクタリングの一部でしかないと思う。
コピペはいらんよ。
汚い綺麗で語るとコードの可読性ばかりを問題にしてるように感じるって話。
だからリファクタリングがいらないとか言う奴がいるんじゃないの。
コードが綺麗であっても設計上の問題が存在することは当然あるよね。
コードの綺麗/汚いは設計の一部しか示していないと思うし、
その修正はリファクタリングの一部でしかないと思う。
241デフォルトの名無しさん
2011/11/20(日) 07:43:51.29242デフォルトの名無しさん
2011/11/20(日) 08:21:15.92 関数、クラスの仕様は変わっても
システム全体の仕様は変わりません。
なので仕様変更にはあたりません。
システム全体の仕様は変わりません。
なので仕様変更にはあたりません。
243デフォルトの名無しさん
2011/11/20(日) 08:21:59.02 設計変更と仕様変更は別の話といえばよかったか。
244デフォルトの名無しさん
2011/11/20(日) 12:07:12.15 設計を仕様と見なしたら
仕様変更を伴わないコード変更って存在するのか?
仕様変更を伴わないコード変更って存在するのか?
245デフォルトの名無しさん
2011/11/20(日) 12:08:20.66 aとかbとかわけのわからん変数名を
意味がある変数名に変更するとか。
意味がある変数名に変更するとか。
246デフォルトの名無しさん
2011/11/20(日) 13:09:50.85 I/F変更を伴うかどうかっていう観点じゃないの
ユーザに見える部分とか
担当者の異なるモジュール間とか
ユーザに見える部分とか
担当者の異なるモジュール間とか
247デフォルトの名無しさん
2011/11/20(日) 17:10:54.61 オリンパスコーディング
248デフォルトの名無しさん
2011/11/20(日) 17:46:34.19 結局、
外から見た目の振る舞いが変わるか/変わらないかがポイントで、
外から見た目の振る舞い=仕様であって
内部構造≒設計は、リファクタリングの対象
って事でおk?
外から見た目の振る舞いが変わるか/変わらないかがポイントで、
外から見た目の振る舞い=仕様であって
内部構造≒設計は、リファクタリングの対象
って事でおk?
249デフォルトの名無しさん
2011/11/20(日) 18:02:36.08250デフォルトの名無しさん
2011/11/20(日) 18:50:26.97251デフォルトの名無しさん
2011/11/20(日) 18:53:49.64252デフォルトの名無しさん
2011/11/20(日) 21:17:25.23253デフォルトの名無しさん
2011/11/21(月) 09:59:01.46 (この人たち、なんで今さらこんな議論をしてるんだろう)
254デフォルトの名無しさん
2011/11/21(月) 22:35:10.04 最初からずっとこのスレにいるのは
お前だけだよw
お前だけだよw
255デフォルトの名無しさん
2011/11/22(火) 10:39:05.00 そうか、リファクタリング本を読んでるのは俺だけだったか
256デフォルトの名無しさん
2011/11/23(水) 00:32:21.88 >>255
本の受け売りじゃなくて中身をちゃんと理解しろよ
本の受け売りじゃなくて中身をちゃんと理解しろよ
257デフォルトの名無しさん
2011/11/23(水) 01:19:14.75 そういう手合いはおそらくよんですらいない
買っただけ
買っただけ
258デフォルトの名無しさん
2012/02/07(火) 13:45:03.37 改修が必要になったときに初めて
その場で interface をでっちあげて、その後、クラスお取替え
これでいい気がしてきた
その場で interface をでっちあげて、その後、クラスお取替え
これでいい気がしてきた
259デフォルトの名無しさん
2012/02/07(火) 20:02:48.59 それでいい
260デフォルトの名無しさん
2012/03/24(土) 14:35:39.62 リファクタリングを身に付けるとコードレベルでの設計力が上がりますか?
261デフォルトの名無しさん
2012/03/24(土) 16:05:22.68 設計力は下がります
でも組んだ後の問題に対する対応力は上がります
でも組んだ後の問題に対する対応力は上がります
262デフォルトの名無しさん
2012/03/24(土) 17:35:34.20 >>261
何故、設計力は下がるのですか?
何故、設計力は下がるのですか?
263デフォルトの名無しさん
2012/03/24(土) 21:11:33.51 設計力あがるだろ
正しい設計のコードに
変化させるのがリファクタリングだ。
正しい設計のコードに
変化させるのがリファクタリングだ。
264デフォルトの名無しさん
2012/03/24(土) 21:36:47.86265デフォルトの名無しさん
2012/03/24(土) 21:51:30.52 オナニー? 自己満足と言いたいのかもしれないが。
仕事でやるのなら自己満足じゃないぞ。
みんなの満足。
仕事でやるのなら自己満足じゃないぞ。
みんなの満足。
266デフォルトの名無しさん
2012/03/24(土) 22:21:58.07 みんなでオナニー
267デフォルトの名無しさん
2012/03/25(日) 12:10:02.63 分散マスタベーション
268デフォルトの名無しさん
2012/04/22(日) 22:43:46.10 密に結合した処理を処理を疎になるようにするとか
処理が対象になるようにシーケンス直すとか
って意味があるリファクタリングだと思うけど
こういうのはリファクタリングっていわんの?
処理が対象になるようにシーケンス直すとか
って意味があるリファクタリングだと思うけど
こういうのはリファクタリングっていわんの?
269デフォルトの名無しさん
2012/08/05(日) 00:31:39.26 >クラス内部で別のクラスを生成しない
>>4のこの話って完全にはDIでも使わなきゃ無理だけど、
FactoryMethodで解決できるよね。
>publicメソッドの引数には、なるべくクラスを使わない。
完全抽象化クラスに類するもの限定ってなら正しいけど、
intや文字列型だけってのは無いよね。スタブ渡せば済む話だし。
>>4のこの話って完全にはDIでも使わなきゃ無理だけど、
FactoryMethodで解決できるよね。
>publicメソッドの引数には、なるべくクラスを使わない。
完全抽象化クラスに類するもの限定ってなら正しいけど、
intや文字列型だけってのは無いよね。スタブ渡せば済む話だし。
270デフォルトの名無しさん
2012/08/05(日) 01:11:40.91 言葉の揚げ足取りに終始しててウザいだけのスレになっちゃってるなw
271デフォルトの名無しさん
2012/10/14(日) 16:17:10.72 大規模アプリには
必ずリファクタリングが必要。
開発工程の一つに加えていいレベル。
必ずリファクタリングが必要。
開発工程の一つに加えていいレベル。
272デフォルトの名無しさん
2012/10/15(月) 15:52:21.57 VB6で幾度となく機能追加が行われたコードをぼんやり眺めてると
リファクタリング?何それおいしいの?
という気分になってくる。
リファクタリング?何それおいしいの?
という気分になってくる。
273デフォルトの名無しさん
2012/10/16(火) 18:14:20.05 >>272
そういうコードこそ、リファクタリングが楽しいんじゃないの?
そういうコードこそ、リファクタリングが楽しいんじゃないの?
274272
2012/10/16(火) 18:35:14.51 趣味でやるならすごく楽しい。一人でやるのなら絶対リファクタリングしてる。
けど仕事となると時間が取れない。
さらなる機能追加と他言語への移植作業用のドキュメントが優先になってまつorz
移植作業前にリファクタリングできたら解読も楽だろうになあ。
そんなことより成果物(ドキュメント)が優先だってさ。しゃーねーや。
けど仕事となると時間が取れない。
さらなる機能追加と他言語への移植作業用のドキュメントが優先になってまつorz
移植作業前にリファクタリングできたら解読も楽だろうになあ。
そんなことより成果物(ドキュメント)が優先だってさ。しゃーねーや。
276デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN リファク太
278デフォルトの名無しさん
2014/01/21(火) 23:03:30.89 リファクタリング本はかなり勉強になったな。
ぐちゃぐちゃなコードしか書けなかったのが、リファクタリングしまくってたら
最初からオブジェクト指向やらデザインパターンやらを考慮したコードが書けるようになってた。
ぐちゃぐちゃなコードしか書けなかったのが、リファクタリングしまくってたら
最初からオブジェクト指向やらデザインパターンやらを考慮したコードが書けるようになってた。
279デフォルトの名無しさん
2014/07/25(金) 01:44:17.80ID:S+8bjftN リファクタリング中にバグが見つかっても修正しちゃいけないんですか?
振る舞いが変わるわけだし。
リファクタリング原理主義者の方の意見が聞きたいです。
振る舞いが変わるわけだし。
リファクタリング原理主義者の方の意見が聞きたいです。
280デフォルトの名無しさん
2014/07/25(金) 07:34:43.94ID:FDyePLlK 好きにすれば?どうせ個人でやってんだろ
一人ならほんと楽しいよねリファクタ。
業務でリファクタなんかできねーよ
リリースしてから何年も動いてるパッケージに手入れられるわけないだろ!
一人ならほんと楽しいよねリファクタ。
業務でリファクタなんかできねーよ
リリースしてから何年も動いてるパッケージに手入れられるわけないだろ!
281デフォルトの名無しさん
2014/07/25(金) 10:51:25.65ID:nHudeAGx 業務でリファクタリングの時は、バグの種類にもよるけど基本的にはそのまま。
勿論、リファクタリング後に修正することを見越してリファクタリングすることになる。
実は、バグを見つける為にリファクタリングすることもあるので、「できねーよ」で済まない場合もあるのよ。
勿論、リファクタリング後に修正することを見越してリファクタリングすることになる。
実は、バグを見つける為にリファクタリングすることもあるので、「できねーよ」で済まない場合もあるのよ。
282デフォルトの名無しさん
2014/07/25(金) 11:26:11.42ID:PjU5XzSY バグを見つけるためにリファクタリングをすることはあるが
改修はリファクタリング前のコードに対して行うことになるなぁ
改修はリファクタリング前のコードに対して行うことになるなぁ
283デフォルトの名無しさん
2014/07/25(金) 12:21:15.76ID:CQdwbNpj リファクタリングとは
テストの合格を維持したままの
コードの修正でしょ
テストの合格を維持したままの
コードの修正でしょ
284デフォルトの名無しさん
2014/07/25(金) 12:41:48.16ID:mmV7Js8i 上を納得というか安心させるための無駄検証にコストを掛けた後だと
いじくれないというのはわかる
だがサブシステムを小分けして
その範囲内で裁量をもたせられるようにしてないのはアカン
いじくれないというのはわかる
だがサブシステムを小分けして
その範囲内で裁量をもたせられるようにしてないのはアカン
285デフォルトの名無しさん
2014/07/25(金) 13:58:36.59ID:fPj1ZcPi286デフォルトの名無しさん
2014/07/25(金) 20:12:11.75ID:zPq/iOJh リファクタリングしたがる人とは仕事したくないよね
287デフォルトの名無しさん
2014/07/25(金) 20:12:41.10ID:Fz0v1PBn でも実は一発目無計画で作ってリファクタリングするのが一番品質がいい
288デフォルトの名無しさん
2014/07/25(金) 21:18:52.98ID:JraUdqnP 一発目無計画っていうのがありえなさすぎ。
趣味のプログラミングだろそれは。
趣味のプログラミングだろそれは。
289デフォルトの名無しさん
2014/07/25(金) 22:15:52.25ID:Xbv85is1290デフォルトの名無しさん
2014/07/25(金) 23:03:10.49ID:mmV7Js8i 神ならざる身で限界を知りつつも最善を目指す手法ではないか
291デフォルトの名無しさん
2014/07/25(金) 23:24:21.34ID:oKdTZN9u 考え方の違いなんだよね。この業界に「ボーイスカウトの規則」っていう言葉があるらしい。
http://qiita.com/hirokidaichi/items/d6c473d8011bd9330e63
> ボーイスカウトが、来る前よりも帰った後の方が山をきれいにしておくことにちなんだ規則。
> ソフトウェア開発においては「モジュールをチェックインする際には、必ずチェックアウト時よりも美しくする」ことを意味する。
リファクタリングしない人って、ただ動けばいい、コードが怖くて触れない。
他の部分はいじらないですませようとしちゃう。
修正しない部分なら見て見ぬふりもいいが、修正するなら、
そのまわりを綺麗にしろと。
それが出来ない人は、バグも多いんだよ。してシンプルにしてないから。
複雑なものはバグが多い。複雑だからコードを理解していない。
理解してないからバグが出る。当たり前の話。
http://qiita.com/hirokidaichi/items/d6c473d8011bd9330e63
> ボーイスカウトが、来る前よりも帰った後の方が山をきれいにしておくことにちなんだ規則。
> ソフトウェア開発においては「モジュールをチェックインする際には、必ずチェックアウト時よりも美しくする」ことを意味する。
リファクタリングしない人って、ただ動けばいい、コードが怖くて触れない。
他の部分はいじらないですませようとしちゃう。
修正しない部分なら見て見ぬふりもいいが、修正するなら、
そのまわりを綺麗にしろと。
それが出来ない人は、バグも多いんだよ。してシンプルにしてないから。
複雑なものはバグが多い。複雑だからコードを理解していない。
理解してないからバグが出る。当たり前の話。
292デフォルトの名無しさん
2014/07/25(金) 23:31:13.15ID:zPq/iOJh そういう自己満足だけの身勝手な修正が一番たちが悪いんだよ
293デフォルトの名無しさん
2014/07/25(金) 23:33:03.76ID:oKdTZN9u >>292
なんでですか?
まずきれいなコードのほうが、メンテナンス性が高くなり
バグが減り、開発コストも下がります。
ここは、否定しませんよね?
じゃあ、最終目標は「修正」するべきであってます。
あなたは、まったく筋違いの否定をしているのでは?
なんでですか?
まずきれいなコードのほうが、メンテナンス性が高くなり
バグが減り、開発コストも下がります。
ここは、否定しませんよね?
じゃあ、最終目標は「修正」するべきであってます。
あなたは、まったく筋違いの否定をしているのでは?
294デフォルトの名無しさん
2014/07/25(金) 23:42:25.29ID:zPq/iOJh295デフォルトの名無しさん
2014/07/26(土) 00:11:53.24ID:NIQWGSzg コードがスパゲティになってしまって、
簡単な機能追加ですら2週間もかかるようになってしまってた
(しかも、テストを繰り返しても正しさに自身が持てなかった)のが、
3週間ほど時間をかけてリファクタリングした結果
簡単な機能追加なら1時間もかからず行えるようになりました
簡単な機能追加ですら2週間もかかるようになってしまってた
(しかも、テストを繰り返しても正しさに自身が持てなかった)のが、
3週間ほど時間をかけてリファクタリングした結果
簡単な機能追加なら1時間もかからず行えるようになりました
296デフォルトの名無しさん
2014/07/26(土) 01:29:58.80ID:b/ARCjIF 今どきスパゲティコードなど、そうそうお目にかかるもんじゃない
297デフォルトの名無しさん
2014/07/26(土) 02:28:53.78ID:+7Kb6odc リファクタリングするもしないも、そのソフトの特性や現場事情があんだから、
まずそういう情報がないとなんとも言えねーだろ。
共通して言えるのは独断で判断するなってことだよ。
まずそういう情報がないとなんとも言えねーだろ。
共通して言えるのは独断で判断するなってことだよ。
298デフォルトの名無しさん
2014/07/26(土) 08:38:26.34ID:NIQWGSzg >>296
ちゃんとリファクタリングするようになったからね
ちゃんとリファクタリングするようになったからね
299デフォルトの名無しさん
2014/07/26(土) 09:05:17.83ID:EislOxX9 設計の手法が確立してきたからだろw
300デフォルトの名無しさん
2014/07/26(土) 09:15:20.20ID:HnYXSVS2 リファクタリングする前のコードを保存しておいて
リファクタリングしてテストに合格したら
前のコードを消去すれば安全だよ
リファクタリングしてテストに合格したら
前のコードを消去すれば安全だよ
301デフォルトの名無しさん
2014/07/26(土) 09:33:49.93ID:NIQWGSzg302デフォルトの名無しさん
2014/07/26(土) 11:28:39.87ID:lCiymgo1 >>288
神が降りてきて、わぁぁぁぁぁってプログラム書く手が動くような事あるだろ?
神が降りてきて、わぁぁぁぁぁってプログラム書く手が動くような事あるだろ?
303デフォルトの名無しさん
2014/07/26(土) 11:34:58.07ID:EislOxX9 業務ではないなw
304デフォルトの名無しさん
2014/07/26(土) 13:52:30.19ID:F6Vf17wA 最近ソフトウェアが壊れていくプロセスってのが
わかりだしてきたよ。
いくつかパターンがあってね、名前でもつけて
近いうちに何処かで発表したいかなって思ってる。
たとえばモノマネパターン。
周りにあるコードを真似て書こうとするパターン。
このような関数があったとする。
function foo(name) {
var funcTable = {
func1: functioni() {・・・},
func2: functioni() {・・・},
func3: functioni() {・・・},
};
funcTable[name]();
}
それを真似してこんなコードを書く
function bar() {
var name = 'func1';
var funcTable = {
func1: functioni() {・・・},
};
funcTable[name]();
}
もし0からコードを書かせたらこんなアホなコードを書くわけがないのに、
なぜか周りにあるコードを真似して書こうとする。
わかりだしてきたよ。
いくつかパターンがあってね、名前でもつけて
近いうちに何処かで発表したいかなって思ってる。
たとえばモノマネパターン。
周りにあるコードを真似て書こうとするパターン。
このような関数があったとする。
function foo(name) {
var funcTable = {
func1: functioni() {・・・},
func2: functioni() {・・・},
func3: functioni() {・・・},
};
funcTable[name]();
}
それを真似してこんなコードを書く
function bar() {
var name = 'func1';
var funcTable = {
func1: functioni() {・・・},
};
funcTable[name]();
}
もし0からコードを書かせたらこんなアホなコードを書くわけがないのに、
なぜか周りにあるコードを真似して書こうとする。
305デフォルトの名無しさん
2014/07/26(土) 15:29:59.33ID:EislOxX9 クソコード書いて、次は誰かがもっといいコード書くだろうからそれマネしようとか思ってたら
俺のクソがプロジェクト中にコピペされて救いようがなくなってたことならある
俺のクソがプロジェクト中にコピペされて救いようがなくなってたことならある
306デフォルトの名無しさん
2014/07/26(土) 23:32:58.38ID:F6Vf17wA >>305
それそれ、誰もが知ってるコピペパターンw
できれば最初からクソコード書くなって話でもあるが、
それは仕方ない。誰でも成長するものなのだから=後の自分はもっと綺麗に書ける。
なのに、昔の初心者のコードを真似る奴が多い多い。
それやってると、初心者のコードをありがたがって参考にしてどうするの?w
話それたけど、本来はコピペするなら再利用できる形にリファクタリングして
それを呼び出さないといけない。そしてこれは絶対にやるべきリファクタリングの一つ。
ただし、無関係な処理なのに形が似ている(しかしわずかに違う)のを
無理やり共通化して複雑化させるパターンもあるので注意。
そういう場合でもコードはなるべくシンプルになるようにしなくちゃいけないのだが、
モノマネパターンの通り、なぜか同じ形を真似ようとする。
できないわけじゃないのに真似をする。何も考えてないのかねって思う。
それそれ、誰もが知ってるコピペパターンw
できれば最初からクソコード書くなって話でもあるが、
それは仕方ない。誰でも成長するものなのだから=後の自分はもっと綺麗に書ける。
なのに、昔の初心者のコードを真似る奴が多い多い。
それやってると、初心者のコードをありがたがって参考にしてどうするの?w
話それたけど、本来はコピペするなら再利用できる形にリファクタリングして
それを呼び出さないといけない。そしてこれは絶対にやるべきリファクタリングの一つ。
ただし、無関係な処理なのに形が似ている(しかしわずかに違う)のを
無理やり共通化して複雑化させるパターンもあるので注意。
そういう場合でもコードはなるべくシンプルになるようにしなくちゃいけないのだが、
モノマネパターンの通り、なぜか同じ形を真似ようとする。
できないわけじゃないのに真似をする。何も考えてないのかねって思う。
307デフォルトの名無しさん
2014/07/27(日) 02:21:16.13ID:xgsJlmZ9 仕様書が別になってたらどんなに処理が似てても別にするなあ
308デフォルトの名無しさん
2014/07/27(日) 09:42:53.89ID:r3KMo0jq 似てる処理を共通化できないのは設計がきちんと出来てない証拠
仕樣的に別物とか関係ない
仕樣的に別物とか関係ない
309デフォルトの名無しさん
2014/07/27(日) 09:55:49.81ID:xgsJlmZ9 いやあるよ。
だいたい仕様変更が入ったときって、仕様書の画面毎とかだかし、
テストも仕様書毎につくるから、共通化してもテストの工数あんま減らんし。
修正になった仕様書の枚数と、手をいれる工数が一致してるとすごく客に説明しやすい。
>似てる処理を共通化できないのは
断じて違う。「似てる処理」を共通化するんじゃない。部品を共通化するんだ。
このへん誤解してなんど泣いたことか。
おまえのその考え方はスパゲッティまっしぐら。
だいたい仕様変更が入ったときって、仕様書の画面毎とかだかし、
テストも仕様書毎につくるから、共通化してもテストの工数あんま減らんし。
修正になった仕様書の枚数と、手をいれる工数が一致してるとすごく客に説明しやすい。
>似てる処理を共通化できないのは
断じて違う。「似てる処理」を共通化するんじゃない。部品を共通化するんだ。
このへん誤解してなんど泣いたことか。
おまえのその考え方はスパゲッティまっしぐら。
310デフォルトの名無しさん
2014/07/27(日) 09:59:56.78ID:EfhXqtXt311デフォルトの名無しさん
2014/07/27(日) 10:34:57.72ID:xgsJlmZ9 >>310
青いのう
部品を共通化するって考え方が徹底してれば、だいたいの場合は一致するもんだ。
もちろん客に説明するより少ない工数で済むならそれでいいよ?
問題は、「似てる処理」を共通化してると、工数が仕様書の改修量よりずっと膨らむことがあるってことなんだ。
ささいな修正が全体に影響してテストが膨らんだり、結局コピペで新たにクラス作らなくちゃいけなくなったりな
うん、これも共通化してるなら何でも同じとか言われそうだな
現実のブツ無しだと説明が難しいが…
青いのう
部品を共通化するって考え方が徹底してれば、だいたいの場合は一致するもんだ。
もちろん客に説明するより少ない工数で済むならそれでいいよ?
問題は、「似てる処理」を共通化してると、工数が仕様書の改修量よりずっと膨らむことがあるってことなんだ。
ささいな修正が全体に影響してテストが膨らんだり、結局コピペで新たにクラス作らなくちゃいけなくなったりな
うん、これも共通化してるなら何でも同じとか言われそうだな
現実のブツ無しだと説明が難しいが…
312デフォルトの名無しさん
2014/07/27(日) 10:58:40.58ID:EfhXqtXt313デフォルトの名無しさん
2014/07/27(日) 11:02:04.82ID:M1h0x0Bb314デフォルトの名無しさん
2014/07/27(日) 11:19:32.95ID:aZ1TYiI9 func1(){
a b c d
}
↓
func0{
a b
}
func11(){
func0() c d
}
func12()
func0() e f
}
上のような共通化は似てる処理と部品どっちが主張しているんだ?
a b c d
}
↓
func0{
a b
}
func11(){
func0() c d
}
func12()
func0() e f
}
上のような共通化は似てる処理と部品どっちが主張しているんだ?
315デフォルトの名無しさん
2014/07/27(日) 11:22:29.85ID:xgsJlmZ9 >>312
独自理論じゃないよ!みんなそう言ってるよ!
お前こそ本読んで知った気になってるだけだろ!頭でっかちめ
確かに、だいたい初心者向けの本には同じ処理を共通化すべしとか適当に書いてあるから、
実際の経験がないと理解しづらい部分ではある。
独自理論じゃないよ!みんなそう言ってるよ!
お前こそ本読んで知った気になってるだけだろ!頭でっかちめ
確かに、だいたい初心者向けの本には同じ処理を共通化すべしとか適当に書いてあるから、
実際の経験がないと理解しづらい部分ではある。
316デフォルトの名無しさん
2014/07/27(日) 13:06:38.84ID:oB6jVO7Z >>315
「部品」で意味してるのは何なんですか?
「部品」で意味してるのは何なんですか?
317デフォルトの名無しさん
2014/07/27(日) 14:19:58.36ID:xgsJlmZ9318デフォルトの名無しさん
2014/07/27(日) 14:22:31.05ID:5m0dj4Xz 人間は細胞でできているだろ
プログラムも細胞で作れば上手くいく
俺の独自理論だけど
プログラムも細胞で作れば上手くいく
俺の独自理論だけど
319デフォルトの名無しさん
2014/07/27(日) 14:35:22.28ID:b6NTPR2W うだうだ言わずに 60兆個の細胞を持ってこい
320デフォルトの名無しさん
2014/07/27(日) 15:03:56.50ID:kK8gelhu 共通化するときの決まりの一つとして、
全く同じコードの時に共通化するのであって
似ているコードを共通化してはいけない。
似ているコードをむりゃリ共通化しようとすると、
引数で処理を分岐することになる。
aが渡されればAの処理を、
bが渡されればBの処理をみたいに。
引数で分岐しだすとアウトだな。
全く同じコードの時に共通化するのであって
似ているコードを共通化してはいけない。
似ているコードをむりゃリ共通化しようとすると、
引数で処理を分岐することになる。
aが渡されればAの処理を、
bが渡されればBの処理をみたいに。
引数で分岐しだすとアウトだな。
321デフォルトの名無しさん
2014/07/27(日) 15:10:03.90ID:oB6jVO7Z322デフォルトの名無しさん
2014/07/27(日) 18:36:01.67ID:b6NTPR2W 経験的にforの内部、ifの内部は関数にまとめると都合よいことが多い
そして気が付くと xxhelper, xximpl, xxsub といった関数であふれるw
そして気が付くと xxhelper, xximpl, xxsub といった関数であふれるw
323デフォルトの名無しさん
2014/07/27(日) 22:38:54.70ID:j6qWMrth324デフォルトの名無しさん
2014/07/28(月) 00:24:14.35ID:PUM3vemV■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- まみちゃん
- ちっしゃーねーな。俺が習近平のアナルに武力侵攻してきてやるよ
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- Doraemon's Solus
