リファクタリングをただのコード修正と思ってる人へ

■ このスレッドは過去ログ倉庫に格納されています
2010/05/29(土) 17:25:56
テストも書かないでリファクタリングとかうけるw

まずな、リファクタリングでは機能追加・修正は行わない。
動作はまったく同じでコードをきれいに書き換えること。

書き換えるといっても、これなら同じ動きだろ?って推測でやってはいけない。

まずテストを書く。ユニットテストをできるように、
単一のクラスでインスタンスを作る。

汚いコードなのだからたいていは依存関係のせいで単一ではクラスが生成できない
それを生成するために、クラスの動作を書き換える。
といっても元のコードは修正しない。継承やプリプロセッサを使って
依存関係を断ち切るために既存のコードを上書きする。
どうしてもそれが不可能な場合には、決められた手順で最小のコード修正を行う

そうやって既存のクラスのユニットテストを行う。
それでやっとリファクタリングが行える。
既存のクラスのユニットテストを通るように新たなコードに修正、
もしくは新規作成して置き換える。

この手順と考え方を守ってないのはリファクタリングではない。

で?
2014/08/02(土) 02:10:54.57ID:tvZxKsuR
>>375
その責務を果たさない奴が、
行き当たりばったりのコード書くんだよな。
そいつに限ってリファクタリングの意味を理解してないという。
もう技術者として終わってるとしか言いようが無いね。
2014/08/02(土) 08:46:20.40ID:Mu2XuA5N
リファクタリング本を一回読んだとき何を感じるかだよな。
ああそうそう、こういう点で苦しくなってたんだ、って気付くか、
何一つピンとこずに何やってんのこの本?と思うか。
2014/08/02(土) 11:09:34.62ID:nhTOdUsW
クソコードを普通のコードに直す作業をあんまりリファクタと呼びたくないw
2014/08/02(土) 11:27:29.15ID:h5SZ209F
結合テストとかまで進んじゃったら無理だよね
2014/08/02(土) 11:55:25.68ID:nhTOdUsW
リリースした後でバージョンアップのついでにやるもんだろ
2014/08/02(土) 11:59:50.68ID:tvZxKsuR
ボーイスカウトの法則といって、
コードを修正するときは、修正する前よりも
綺麗にするもんです。

これが出来るのと出来ないのが、
初心者と中級者の境目。
もちろん、出来ないほうが初心者ね。
これが許されるのは新卒1年ぐらいなもん。
2014/08/02(土) 12:22:30.70ID:DmU4GxTK
規模が小さいうちは手抜きで簡単なコードを書くだろ?
最初から拡張性とかそういうものを考えて作りこまない。

で、規模が大きくなってきた時に、将来性のことを
考慮して作り変えればいいんだが、
最初の手抜きのコードをそのままに、手抜きを真似して
同じようなコードを追加するやつどうにかならんかね。

規模に応じたコードの書き換えをしない。できない。
発想がない。そういうい奴がクソコードを量産するんだよ。
2014/08/02(土) 12:37:41.39ID:Ydx1jnyI
権限のない末端PGが現場の手続き無視してユニットテストのないコードを
勝手に修正する、自称リファクタリングは非常に迷惑。

日本の受託開発の仕事ではリファクタリングなんてするべきではない。
2014/08/02(土) 12:42:59.05ID:DmU4GxTK
>>383
ユニットテストが無いことが前提になってる時点で、
やっぱり、その程度の所が、リファクタリングを嫌ってるんだなとしか
思えないよ。残念だったね。君のところの技術不足を露呈しただけ。
えと、技術力不足であることを自覚してね?落ち込むところだよ。
2014/08/02(土) 13:29:01.01ID:a3/R4SSz
最初から厳密に書けばいいんだよ
手抜きコピーが多いのは、そういうものかと思ってしまうからだ
自称上級者がスタートアップ書くことが多いが、手抜き繰り返して
しまいには自分自身が変な癖背負い込んでいくだろう
初期段階でよい方向に導くには、最初のやつががんばるしかない
2014/08/02(土) 13:37:36.15ID:DmU4GxTK
人間誰しも、最初は初心者で
一年後には今よりも成長しているという
前提にたつと最初から完璧なコードを書くのは不可能

どんなに優れたコードを書いたとしても
一年後の自分はもっと優れたコードを書ける。
2014/08/02(土) 14:03:04.41ID:nhTOdUsW
>>386
この程度の奴がリファクタしたがるんだよなあ…

リファクタってのはある設計から別の設計に軸足を移すことだ。
書き散らしたクソコードを書き直すのは、リリース前にやっておくべきそれ以前の問題なんだよ。

お前の末端の画面とか帳票とかは、誰も共通機能として使ってないから汚かろうがクソだろうが問題ないよ。
お前の自己満足のためにプロジェクトとめられてたまるか。
どんなクソでも、客の前にひりだしたクソはてめえのクソだ。受け入れて前に進め。
2014/08/02(土) 14:06:28.03ID:nhTOdUsW
大体最初からある程度ちゃんとしたプログラムも書けないやつに
まともなユニットテスト作れるわけないだろうが。
2014/08/02(土) 14:26:29.65ID:1FEiY+vP
理想だけど
組織には逆らえない
2014/08/02(土) 14:42:12.73ID:wGpqnjMj
関数の中身やprivateな関数のインターフェースを修正するようなリファクタリングと、
ライブラリのpublicなインターフェースを変更するような
影響範囲の大きいリファクタリングの話が混じってる気がする

後者はそう簡単じゃないよ
影響範囲に入る全ての開発者と調整が付かない限り変更できない
(勝手に変更したら、ライブラリ使用者側から見たら仕様変更だからリファクタリングにならない)
2014/08/02(土) 14:44:44.99ID:atIEditt
初心者にオススメなのは、派生開発でコードを読むときに、動作確認をテストで書くことかな。これはとっつきやすい。
『レガシーコード改善ガイド』では「仕様化テスト」のところ。
392デフォルトの名無しさん
垢版 |
2014/08/02(土) 14:54:07.48ID:1BrdY1ES
>>380
そんな意識の奴と仕事したくないわ
2014/08/02(土) 15:20:52.89ID:DmU4GxTK
リファクタリングするなっていってる奴がいるけどさ、
時間が十分にあるという前提にたつと
とたんに何も言えなくなってしまう

それってリファクタリングがダメなのではなくて
時間がないという問題だから。

じゃあ、なんで時間が足りないんですか?
今までと同じやり方してるんじゃないですか?って
追い詰めると、泣き出しちゃうw
2014/08/02(土) 15:21:48.08ID:DmU4GxTK
>>390
そういう場合は、旧関数の互換性を保ちながら
新しい関数を作ればいいんだよ。
395デフォルトの名無しさん
垢版 |
2014/08/02(土) 15:32:36.71ID:WtoScNjl
>>390
そういうことのないように依存性を無くすようにプログラミングする
プログラマの規律が無いだけ
2014/08/02(土) 17:35:26.06ID:w2qydRR0
当たり前のことを当たり前に理解してそれを前提としている人と、
当たり前のことなのに全く理解しないでそれを前提とできない人とが会話しているようだ。
2014/08/02(土) 19:06:34.85ID:jgRhK7n4
ウォーターフォールだったり、詳細設計書で日本語プログラミングしたりしてるとこと
リファクタリングは相性悪いよ
開発の全体を見直さないと、一部だけ優れた手法を取り入れようとしても
歪みが出て上手く行かないんだよね
2014/08/02(土) 19:30:03.16ID:DmU4GxTK
うまくいかないんじゃなくて
難しいだけだろ?

それを実行する力が技術力なわけで。
2014/08/02(土) 19:41:02.16ID:q1w4boEu
どうしても自分が書いたコードを書きなおしたい人がいるようだけど
そんなコードはいずれバグで書きなおされるんだから、あまり気にしない方が良い。
その情熱は悪くないけど、もっと前向きに使うべきだよ。
2014/08/02(土) 19:57:31.28ID:DmU4GxTK
前向きって新しいコードを書くってこと?
残念だけど、開発ってのは既存のコードの修正がほとんどだよ。

新しい機能を追加するといっても
前よりも効率よく開発するために既存の部分を、
使いまわす(コピペじゃないからね!)するために
既存の部分を修正して使えるようにするんだから。
2014/08/02(土) 19:57:37.46ID:FIwNTFpf
>>397みたいな事言ってると、拡張を繰り返すうちにコードが保守不能なカオスになって
もう無理だから全部捨てて作り直しだー、ってなるんだよ

でもSIerとしては、それが飯の種だから良いんだけどね
2014/08/02(土) 20:03:28.32ID:DmU4GxTK
全部捨てて作り直しだーまで追い詰めるって馬鹿だと思う。
少しずつ変化させていくことができないからそうなるんだよね。
全部いっぺんに変えるなんて現実的じゃないんだから。

全部いっぺんに変えることは不可能。じゃあどうするか?
それに答えられないから、どんどん壊れていくんだよ。

まあ、少しづつ良くしていくことが出来るのも技術力なわけで。
それを頭でわかっているのと実行するのとは全然違うわけで、
その実行できる力ってのが技術力そのものなわけで。
2014/08/02(土) 20:19:36.36ID:q1w4boEu
>>400
前向きってのは、コード書きの脳からデザイナーの脳に変われるように努力しろって事。
2014/08/02(土) 20:23:43.06ID:DmU4GxTK
>>403
何に逃げてるのさ?

両方できるようになるというのなら正しい意見だが、
別のものに逃げたらだめだろ。

まるでペンもイラレもろくに使えない奴が
発想力とかいうのに逃げているのと同じ。

コードをまともに書けるようになった上でデザイナーになることはできる。
だけど、コードから逃げてもデザイナーにはなれない。
2014/08/02(土) 20:23:58.64ID:J1UwFk0L
よくある設計とコーディングっていう役割分担からしてくるっとる。
プログラミングなんて、設計九割五分なのに。
実装なんざオマケのオマケ。

SEとプログラマ、とわけてプログラマがキーボード叩く役とか、きがくるっとる。
まぁ聡明なお前らの会社は違うだろうけどね。
2014/08/02(土) 20:28:21.78ID:DmU4GxTK
「前向き」って言ってる奴が、
コードとデザインの両方を手に入れるじゃなくて、
コードから逃げてデザインを求めていて笑えるよ。
そういう奴は両方できない。
2014/08/02(土) 20:33:33.15ID:a3/R4SSz
やっぱり自分でコード書かなきゃやってる気がしない
408デフォルトの名無しさん
垢版 |
2014/08/03(日) 00:40:07.16ID:ppjITjjs
もう最近ガチガチの詳細設計やるとこって殆ど無いだろ
コメント的仮想コードとかで詳細は終わらせちゃうところが多い
その方が柔軟だしな
2014/08/03(日) 00:45:38.31ID:CSranqfK
一応UMLでシーケンス図とクラスとPublicメソッドだけはきっちり作ってるな
DBアクセスとかあたりまで
そっから先はprivateで実装して
アプリのフレームワークに依存しないメソッドとかクラスとかはプCommonフォルダに各自放り込んでもらう

で上手くいくと思ったけど
Commonがかなりカオスなことに
2014/08/03(日) 07:51:54.04ID:KHwMExMo
>>408
あー、主に非技術者がやる作業だね。
2014/08/03(日) 07:57:18.76ID:mU4IZymt
>>409
>Commonがかなりカオスなことに

kwsk
2014/08/03(日) 10:20:01.47ID:1nxvzFtA
まるで業務系しか仕事がないかの勢いw
2014/08/03(日) 10:36:51.70ID:CSranqfK
>>411
コードが酷いのは予想のうちだけど
あれだけ言ったのに、規約が守られずにアプリのフレームワークに依存が作られてる
最初あたりに誰かがやったせいで後続が真似して、手続きなんとなくまとめただけみたいな処理がいっぱい
関数の共通化もうまくいってなくて
例えば分かりやすいところでは文字列をバイト列に変換してパディングするって処理があるんだけど
SJisStringUtil.ToByte
DBCodeChanger.LeftPaddingByteArray
StringModel.BytesWithSpace
こんな感じでいっぱいできてる
挙句にsTanakaとかフォルダできてるしw
2014/08/03(日) 10:42:19.36ID:KHwMExMo
まあありがちやねw

だから規約を作った人は
必ずコードレビューをしなくてはいけない。
2014/08/03(日) 20:06:25.42ID:lk1xFWmM
>>953
糞設計、糞コード書くような人たちが
集まってコードレビューしてもなんの意味もない
しかもそういう人って声が大きいだけが取り柄みたいな人だろうし
416デフォルトの名無しさん
垢版 |
2014/08/03(日) 21:25:01.28ID:LWW935BO
ロングパスきっちり通せよw
2014/08/03(日) 23:57:33.38ID:tNPEJw6R
A社に発注して作らせた大規模なソフトを、
B社に一時的にメンテナンスさせて、
今はC社に機能拡張させているとか言う例が実際にあるからなー

それぞれがそレなりにちゃんとした会社であっても、
開発者の継続性が0の場合、
中のソースがかなり混乱するのは仕方ないかもしれん。
418デフォルトの名無しさん
垢版 |
2014/08/04(月) 22:06:42.37ID:w1xJJUBp
リファクタリングはアートですよ。
アートは人間が生み出すものではありません。
ある日、天から降りてくるんです。
この感覚がわからない人は、アートしたことが無いんです。
つまり、リファクタリングもわからないってことです。
2014/08/04(月) 22:17:15.14ID:p5AMhKr8
わかる、わかるぜ〜
ソースコードがある書き方になりたがってねだってくるんだぜ〜
俺はそのとおりに書き写してるだけなんだぜ〜
420デフォルトの名無しさん
垢版 |
2014/08/04(月) 22:19:31.15ID:w1xJJUBp
やべえ。
適当ぶっこいてたらマジキチ召喚しちまった。
ちょっと反省。
2014/08/04(月) 22:54:50.48ID:O7gnQe0p
自作自演乙
2014/08/27(水) 12:13:22.10ID:RluTUsi0
他人のコードだと思って、何の前情報もない状態でコードを読み
そこから読み取れる情報だけで、「なんで?」って思う実装を減らしていくのがリファクタリング

もちろん、処理の効率とかをよくする場合もあるけど、
どっちかというと、そういうのよりも第三者が見て読みやすいコードである状態を保つ事のほうが重要
(リファクタリングで大幅に処理コストが改善できるような糞実装が最初にされてることは稀)

ただ、リファクタリングをできるレベルに達していない職場も少なくない
とくに業務系や人売りで奴隷を集めた職場とかは、大抵メンバーのスキルが足りてなさすぎて無理
っていうか設計(という名のゴミファイル作成)段階からそびえ立つうんこを作っていってるから、実装時は既に手遅れ
2014/09/04(木) 15:14:28.47ID:NCM4vLJB
リファクタリングの誤用
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?RefactoringMalapropism

リファクタリングの境界線
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?RefactoringBoundary
424デフォルトの名無しさん
垢版 |
2014/09/13(土) 02:08:52.13ID:Bjr83Kqx
ボキもリファクタリングして欲しいです
https://twitter.com/y_konogi/status/510266774290694144/photo/1
2014/09/13(土) 02:46:33.71ID:99VHFg4q
ちんこの振る舞いを保持したまま変化させる、もちろん性的な意味で。
2014/09/13(土) 03:35:58.05ID:WOkelzJA
インタフェースの変更はリファクタリングか
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?IsChangingInterfacesRefactoring
> 答えは簡単――インタフェースの変更はリファクタリングだ。

未知のバグフィックスはリファクタリングか?
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?IsFixingAnUnknownBugRefactoring
> 私はリファクタリングと呼べると思う。 バグを含んだ振る舞いを知らなかった(あるいは気にしなかった)わけだから、
> これは「外部から見たときの振る舞い」ではないのだ。 たとえバグに気付いていたとしても、
> それが気にするようなバグでなければ、 リファクタリングと呼んでもよいと思う。

最適化はリファクタリングか?
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?IsOptimizationRefactoring
> 最適化とリファクタリングはどちらも変化を伴うものだが(なかには最適化かつリファクタリングとなる変化もあるが)、
> 両者は別物だと私は考えている。なぜなら、両者の目的が異なるからである。リファクタリングは、
> コードを理解しやすくするためである。最適化は、プログラムを速くするためである。
> つまり、リファクタリングと最適化は似ており、共通する変更がありはするものの、目的が異なるため、両者は別物であると私は考えている。

宣言の順序変更はリファクタリングか?
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?IsDeclarationOrderingRefactoring
> 宣言(Javaで言うメソッドやフィールド)の順序を変更することは、リファクタリングと呼べるのか?
> リファクタリングの定義で、 「理解や修正が簡単になるように」というフレーズを使った。
> 宣言部分を変更すると、理解や修正が簡単になるのだろうか? 私は、そういう場合もあると思う。
> ソフトウェアの内部構造を変更しないという点が紛らわしいかもしれない。 リネームしても実行内容は変化しない。
> だがリネームは、プログラムの理解度を向上させる 非常に重要なリファクタリングの一種である。
2014/09/13(土) 13:49:13.80ID:9aicrkfD
あれもこれも取り入れた「オブジェクト指向」とまるっきり同じパターンだな
どんどん曖昧な意味になりそう
2014/09/13(土) 14:14:43.12ID:Fgrmdz5F
すべてリファクタリングの結果発生する作業だろ。
まったく理解できていないな。まさに本末転倒
429デフォルトの名無しさん
垢版 |
2014/09/13(土) 16:14:30.25ID:WJGPx/6o
要件を仕様にまとめるのもリファクタリングですか?
2014/09/13(土) 20:28:39.39ID:Y1nBtaE7
>>429
リファクタリングの一部ではあるな
2014/09/13(土) 20:33:35.66ID:zttb1Mfl
OpenSSLがリファクタリングされまくっているな
2014/09/14(日) 00:35:49.32ID:a/rqPd2y
>>429
違う

> リファクタリング中に2,3日システムが動かなくなっちゃってーなどと言ってる奴がいたら、
> んなもんリファクタリングじゃあなーいと言ってやれ。 ドキュメントをリファクタリングしちゃるとか言ってる奴、
> それもリファクタリングじゃねーぞコラ。 そういうのは、リストラクチャリング(再構築)というのだッ
433デフォルトの名無しさん
垢版 |
2014/09/14(日) 02:43:07.06ID:XHTMIvTT
客の要件はそのままプログラムにできるけど、
それじゃあ最適化できてないから
外面の挙動は変わらない範囲で最適化を行う。
コードの実体だけがリファクタリングの対象じゃないだろ。
2014/09/14(日) 03:54:19.00ID:a/rqPd2y
>>433
それこそがリファクタリングの誤用で
リファクタリングではないと述べられていること。
2014/09/14(日) 10:24:07.39ID:NZ+I8Nx6
最適化じゃないんだよ
最適化なんかできるわけねーだろってのが大前提なんだよ
436デフォルトの名無しさん
垢版 |
2014/09/14(日) 13:02:21.11ID:bjSSfYoR
バグも含めて機能そのままで、構造だけ変える(良くするつもり)ができるっていうのが結構単純な
還元主義的な思い込みで、実際の構造物は両者は一体というか、都合良くできないと思うんだよね。

テスト駆動とかもそうだけど、この種のスローガンが胡散臭いのは、物作りの本質的な困難を直視
しないで、小手先の技法を当てはめれば解決みたいに喧伝しすぎるところにあるんじゃないかと思う。
2014/09/14(日) 14:21:12.62ID:TJC+Xrrg
別に胡散臭いとは思わないが、真に受けちゃったバカが「リファクタリング最強!」とか言い出すのはかなりうざい。
2014/09/14(日) 15:42:46.67ID:a/rqPd2y
>>436
> バグも含めて機能そのままで、構造だけ変える(良くするつもり)ができるっていうのが結構単純な
> 還元主義的な思い込みで、

できるよ。

というか、リファクタリングは構造を良くしましょう(終わり)じゃなくて、
構造を良くするのは当然の話しとして、機能をそのままにするためにはどうすればいいか?
って所が出発点で、

機能をそのままにするために、編み出された様々なテクニックが
リファクタリング手法なんだよ。

できないというのなら、リファクタリング手法(それには名前が付いている)
一つ一つに対して出来ない根拠を述べてみてよ。

君は単に、リファクタリングに手法があることを知らないで、
闇雲に自己流でなおそうとしてみて失敗しただけでしょう?
2014/09/14(日) 15:44:54.17ID:a/rqPd2y
なんだ、自分で自白してるじゃんかw

> この種のスローガン

スローガンとしか認識していないw

リファクタリングは、数学的な証明と
なんらかわらないんだが。
2014/09/14(日) 18:12:37.41ID:d9eejC+C
ダメなコードは直すことでよくできる
という公理が大前提
1000行もあるようなおバカ関数を数学的に定式化して改善するのは無意味なこと
見れば何をすべきかわかる
2014/09/14(日) 18:52:51.74ID:a/rqPd2y
>>440
つまりどういうこと?
リファクタリングすればいいって話を
言葉を変えていってるだけだよね?
2014/09/14(日) 19:25:36.36ID:3Rt2m2d6
リファクタリングを知らない人は、
リファクタリングを一気に直してしまおうと
思っているに違いない。

リファクタリングが問題が起きることがありえない
小さな修正の繰り返しであることをしらない。
2014/09/14(日) 19:30:47.61ID:NZ+I8Nx6
デザパタ信者みたいなのが暴走して悪評を広めてるんだろう
2014/09/14(日) 19:32:04.00ID:3Rt2m2d6
その悪評を鵜呑みにしているのが
頭悪いと言われる所以なわけで。

自分の頭で考えろよとw
2014/09/14(日) 21:08:34.07ID:oiv3svus
リファクタリング
446デフォルトの名無しさん
垢版 |
2014/09/15(月) 00:27:34.64ID:irRiVyM3
流石に数学の定理と同等か言い過ぎだろ。
パターンと同じでさ、セオリーやメソッドじゃない、ちょっとしたコツの集積だろ

オブジェクト指向、CMMI、PMBOKとかと同じでさ、アメリカ人の教授とかはそういうのまとめて
自分が言い出しっぺになって、学会ごっこしたり、資格試験の元締めやろうとしたりするのが好きなんだよ。

そういう商売に乗せられているだけなのに、さも学術的な根拠があるものとして「勉強」したりするのが
偉いと思っている奴はどっかオツムが弱いとしか言いようがないw
2014/09/15(月) 00:37:25.87ID:9UWhhSIJ
>>446
数学の定理じゃなくて、数学の証明だろ?

a + b = c を b = c - a
に置き換えるようなもの。

式の変形だよ。

リファクタリングのテクニックっていうのはどれも
この式の変形と同じようなもの。

一部の人が勘違いしているように、ぶっ壊して同じように作りなおすことじゃなくて、
項の移動のように、全く同じ結果になる変形をしているにすぎないんだよ。
2014/09/15(月) 00:39:47.71ID:9UWhhSIJ
>>446
あと警告として、自分が知らないことを
勉強している奴は生意気だっていうのやめたほうがいいよ。
中学生かよ。あいつ勉強なんかしてるんだぜーってw
449デフォルトの名無しさん
垢版 |
2014/09/15(月) 00:43:11.40ID:irRiVyM3
何が「警告」だよ
笑わせるな
2014/09/15(月) 00:44:52.76ID:9UWhhSIJ
いや、普通に恥ずかしいでしょ?

ガリ勉ガリ勉いって勉強しない悪ガキ。
自分が後で困るというのに。

警告してあげないといつまでたっても
気づかないよ。
451デフォルトの名無しさん
垢版 |
2014/09/15(月) 01:15:03.90ID:WaQuX0Y8
ぶっ壊して同じ結果が得られるように作り直すこととの違いを教えてください。
2014/09/15(月) 01:41:27.21ID:j8xvklWY
イチから作り直したい病と
現実の範囲で出来る事だけやる工夫の違い
453デフォルトの名無しさん
垢版 |
2014/09/15(月) 02:07:53.50ID:WaQuX0Y8
機能やクラスを抽出するのだって破壊を伴うんじゃないの。
リスクが少ない範囲での変更もあれば、
時には大胆なリファクタリングもあると思うけど。
2014/09/15(月) 04:21:21.27ID:9UWhhSIJ
>>451
> ぶっ壊して同じ結果が得られるように作り直すこととの違いを教えてください。
たとえば数学で、3x - 11 = 4 のxを求めるという問題があった時

1. 移項とい手法を使って、3x = 4 + 11 にして、
2. 足し算という手法を使って、3x = 15 にして
3. 両辺を同じ数で割るという手法を使って、x = 5
という風に、変形をしても等しいと証明されている
安全な手法を使ってシンプルな形に変形していくのがリファクタリング


>>453
大胆なリファクタリングって何よ?

まずさ、数学の式の変形のやり方と一緒で、
リファクタリング手法には名前があるって知ってる?

一覧見つけてきたから、これのどれが大胆で破壊を伴うのかちゃんと説明してくれ。
http://d.hatena.ne.jp/asakichy/20100607/1275877997
2014/09/15(月) 04:22:40.33ID:9UWhhSIJ
>>453が言ってる、
大胆なリファクタリングというのは、

これらの手法を使わずに
いきなり最終的な答えを
だそうとしていることでしょ?

それはリファクタリングじゃない。
2014/09/15(月) 04:24:53.24ID:9UWhhSIJ
>>452も少し勘違いしているね。

リファクタリングを「ソースコードを綺麗にしましょう」ということを
英語で言ったものとしか認識していないようだ。

リファクタリングというのは、安全に変形できるという
手法を使って、いっぽずつ書き換えていくもの。

手法を使わない書き換えはリファクタリングじゃない。
2014/09/15(月) 10:57:57.36ID:z+pQ6G77
>>456
それな
その手法の確立というか
その手法の念押しというか
そういう面も大きい
2014/09/15(月) 11:09:38.77ID:pNNQiIbO
これがリファクタ信者の暴走か
2014/09/15(月) 11:28:39.31ID:kUSteVkT
リファクタリングの「関数の抽出」をやったら
増えた関数呼び出し分の実行コストが無視出来なくて
仕様を満たさなくなってしまいました
2014/09/15(月) 11:46:22.25ID:9UWhhSIJ
>>459
そしたら「関数のインライン化」という
リファクタリングをすれば
動作を変えることなく、仕様を満たせるようになるよ。

やっぱり問題が起きた時にやるのは
リファクタリングだね(笑)
2014/09/15(月) 11:49:22.77ID:kUSteVkT
つまり途中で一回ぶっ壊して同じ結果が得られるように作り直すわけね
良いと思うよ
2014/09/15(月) 12:21:05.22ID:NXR59SQz
リファクタリングがゲシュタルト崩壊しそうなスレだ。
2014/09/15(月) 12:43:17.41ID:zrs0o34A
安全を過信しすぎだな
2014/09/15(月) 12:46:23.34ID:9UWhhSIJ
>>461
一回ぶっ壊したらだめだろw
それではリファクタリングになっていない。

リファクタリングは壊さずに直すことであり
壊さないで直すための手法がまとめられている。
http://d.hatena.ne.jp/asakichy/20100607/1275877997
2014/09/15(月) 13:45:51.89ID:kUSteVkT
>>464
>>459の操作で一回ぶっ壊れてるじゃん
少なくとも「関数の抽出」はリファクタリングの操作としてアトミックじゃない
2014/09/15(月) 15:20:24.10ID:4lL49qVx
慌てずリファクタリングの公式に沿って変更すれば副作用は一切ない。
2014/09/15(月) 15:20:49.07ID:9UWhhSIJ
>>465
> 少なくとも「関数の抽出」はリファクタリングの操作としてアトミックじゃない

アトミックだけど?

リファクタリング本を見ればしっかり書いてあるよ。
アトミックに作業する方法。

どうせあんたは関数を消して書きなおす(書き直してる間
元の関数がなくなってる状態)が起きるって思ってるんだろうけど。


ほんと、やり方をしらんのね。しらんから壊れるって言ってる。
わかりやすい。
2014/09/15(月) 15:21:50.80ID:9UWhhSIJ
ちなみに、リファクタリングブラウザを使えばもっと簡単に行える。
もちろん、リファクタリング本にはそういうツールを使わないやり方も書いてある。
2014/09/15(月) 15:45:17.66ID:wmpEGwKw
>>459>>460の間に一回壊れてるよね
2014/09/15(月) 15:51:22.11ID:wmpEGwKw
>>467
手で書き直したとかじゃなくて、メソッドの抽出することで
仕様を満たさなくなるケースもあるって話だろう

その直後にインライン化したとしても、一旦仕様を満たさない状態になったのは事実
2014/09/15(月) 15:53:23.99ID:KlWrYY91
まあ俺ぐらいリファクタリングに精通すると、最初からリファクタリング後の最終形になるように最初からコーディングできちゃうわけで、あえてリファクタリングを意識しなくていいわけなんだけどね。

中島敦の「名人伝」にでてくる「弓ってなに?」といった弓の名手のごとし。
2014/09/15(月) 15:55:47.97ID:9UWhhSIJ
>>469
壊れてないよw
ばかなのかな?
人の話きかないよね。
2014/09/15(月) 15:57:45.71ID:9UWhhSIJ
>>470
> 手で書き直したとかじゃなくて、メソッドの抽出することで
> 仕様を満たさなくなるケースもあるって話だろう

メソッドの抽出で仕様を満たさなくなることはありません。

> その直後にインライン化したとしても、一旦仕様を満たさない状態になったのは事実

あんたの言ってる「仕様」って関数呼び出し○ナノ秒以内で
あることっていう要件の話だよね?w
それは仕様ではない。
2014/09/15(月) 16:00:52.19ID:9UWhhSIJ
>>471
それは過剰な設計になってるよ。

コードの規模に応じて、適切な設計というのは異なる。

コードに修正が入る、それがバグの修正でない限り
機能化拡張だろう。

機能拡張にともなって規模が増るというような時にリファクタリングをするんだ。
機能追加とリファクタリングはわけてやるものだから、
機能追加前、もしくは機能追加後にリファクタリングね。

最初から過剰な拡張性をもたせるのはよくない。
2014/09/15(月) 16:31:02.56ID:9UWhhSIJ
今更ながら>>1が言っていたことって正しいんだなって思った。

ソースコードを綺麗に作りなおすのがリファクタリングだって
思っている奴が多いこと多いこと。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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