関数の一部を取り、個々の関数を作成するプロセスをどのように呼び出しますか?


8

これには専門用語があったことは知っています。それが何だったか思い出せない。

タイトルを明確にする必要がある場合、ここに私が意味します。これが古いコードの場合:

Result foobar(Param1,Param2,Param3) {
  code that does abc
  code that does xyz
  code that does asdf
  more code that does something
}

そしてそれは次のように変更されます:

SomeResult do_xyz(SomeParams) {
  code that does xyz
}
Result foobar() {
  code that does abc
  do_xyz(args);
  code that does asdf
  more code that does something
}

私はそれを「片付け」と呼んでいたでしょう。私は誰かがこれを特別なものと呼ぶことに決めたとは信じられません、彼らは彼らの本のフィラーを必要としたに違いありません。
ジェームズ

@ジェームス:「片付け」はもっと一般的です。頻繁に話す必要のあるものに名前を付けることは理にかなっているので、より効率的に話すことができます。それがパターンの唯一の理由です。
ビットマスク

回答:


21

これの専門用語は抽出法です

http://www.refactoring.com/catalog/extractMethod.htmlを参照してください

フラグメントを、名前がメソッドの目的を説明するメソッドに変換します。

void printOwing() {
    printBanner();

    //print details
    System.out.println ("name:    " + _name);
    System.out.println ("amount    " + getOutstanding());
}

                                                                                                         http://www.refactoring.com/catalog/arrow.gif

void printOwing() {
    printBanner();
    printDetails(getOutstanding());
}

void printDetails (double outstanding) {
    System.out.println ("name:    " + _name);
    System.out.println ("amount    " + outstanding);
}

5
抽出 -それだけです!
ビットマスク

メソッドの抽出。Design Patternsをチェックしてください。
ラリーヘクター

9
@LarryHector:(GoF)デザインパターンかどうかはわかりません。テンプレートメソッドと呼ばれるものが少し似ていますが、もちろんDPは基本的に読み取られますが、抽出メソッドや他の多くのリファクタリングは実際には他の文献にあり、それはマーティンファウラーのリファクタリングです。
ハービー

1
@herby:あなたは正しい、それはFowler's Refactoringで定義されています。Michael Feathersの「レガシーコードの使用」には、多くのリファクタリング方法の方法/理由に関する優れたセクションもあります
ラリーヘクター

8

プロセス自体はコードのリファクタリングと呼ばれ、メソッドはExtract Methodと呼ば れ、SRP(単一責任の原則)をコードに適用するのに適しています。


「リファクチャリング」はタイプミスですか?(正直な質問!)
ビットマスク

@bitmaskおそらくそれは
marktani

はい、それはタイプミスです。リンクから思われるかもしれませんが、「リファクタリング」であることが意図されていました
Yusubov

5
リファクタリングはそれほど具体的ではありません。抽出メソッドは、多くの種類のリファクタリングの1つです。また、どちらも暗黙的にSRPに関連しているわけではありませんが、これはリファクタリングする必要がある多くの理由の1つです。
pdr 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.