20 Jahre Erfahrung FreeCall 0800 tutegos

Methoden zusammenstellen (Composing Methods)

Methode extrahieren (Extract Method)

Ein Codefragment kann zusammengefasst werden.

Setze die Fragmente in eine Methode, deren Namen den Zweck kennzeichnet.

	void printOwing() {
		printBanner();

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

[ARROW]

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

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

Für mehr Informationen siehe Seite 110 von Refactoring.

Methode inline setzen (Inline Method)

Der Rumpf einer Methode ist so klar wie der Methodenname.

Setze den Rumpf der Methode für den Methodenaufruf ein und entferne die Methode.

	int getRating() {
		return (moreThanFiveLateDeliveries()) ? 2 : 1;
	}
	boolean moreThanFiveLateDeliveries() {
		return _numberOfLateDeliveries > 5;
	}

[ARROW]

	int getRating() {
		return (_numberOfLateDeliveries > 5) ? 2 : 1;
	}

Sie auch Seite 117 in Refactoring.

Temporäre Variable entfernen (Inline Temp)

Eine temporäre Variable wird nur mit einem einfachen Ausdruck initialisiert und die Variable stört andere Refactorings.

Ersetzte Verweise auf die Variable mit dem Ausdruck.

		double basePrice = anOrder.basePrice();
		return (basePrice > 1000)

[ARROW]

		return (anOrder.basePrice() > 1000)

Für weitere Informationen siehe Seite 119 in Refactoring.

Ersetze temporäre Variable durch Anfragemethode (Replace Temp with Query)

Eine temporäre Variable wird benutzt um das Ergebnis eines Ausdrucks zu halten.

Extrahiere den Ausdruck in eine Methode. Ersetze alle Referenzen auf die temporäre Variable mit dem Ausdruck. Die neue Methode kann dann auch von anderen Methoden verwendet werden.

double basePrice = _quantity * _itemPrice;
if (basePrice > 1000)
  return basePrice * 0.95;
else
  return basePrice * 0.98;

[ARROW]

if (basePrice() > 1000)
  return basePrice() * 0.95;
else
  return basePrice() * 0.98;
...
double basePrice() {
  return _quantity * _itemPrice;
}

Für weitere Informationen siehe Seite 120 in Refactoring.

Beschreibende Variable einführen (Extract Variable)

Es gibt einen komplizierten Ausdruck.

Setze das Ergebnis des Ausdrucks (oder Teile) in eine Zwischenvariable. Der Name der temporären Variable erklärt den Zweck.

if ( (platform.toUpperCase().indexOf("MAC") > -1) &&
      (browser.toUpperCase().indexOf("IE") > -1) &&
       wasInitialized() && resize > 0 )
 {
   // do something
 }

[ARROW]

	final boolean isMacOs     = platform.toUpperCase().indexOf("MAC") > -1;
	final boolean isIEBrowser = browser.toUpperCase().indexOf("IE")  > -1;
	final boolean wasResized  = resize > 0;

	if (isMacOs && isIEBrowser && wasInitialized() && wasResized)
	{
		// do something
	}

Für weitere Informationen siehe Seite 124 in Refactoring.

Trenne temporäre Variable (Split Temporary Variable)

Der Wert einer temporäre Variable ändert sich mehr als einmal und die Variable ist kein Schleifenzähler oder temporärer Iterator.

Erstelle eine neue temporäre Variable für jede Zuweisung.

		double temp = 2 * (_height + _width);
		System.out.println (temp);
		temp = _height * _width;
		System.out.println (temp);

[ARROW]

		final double perimeter = 2 * (_height + _width);
		System.out.println (perimeter);
		final double area = _height * _width;
		System.out.println (area);

Für mehr Informationen siehe Seite 128 von Refactoring.

Entferne Zuweisung an Parametervariable (Remove Assignments to Parameters)

Programmcode belegt Parametervariablen.

Nutze eine temporäre Variable.

	int discount (int inputVal, int quantity, int yearToDate) {
		if (inputVal > 50) inputVal -= 2;

[ARROW]

	int discount (int inputVal, int quantity, int yearToDate) {
		int result = inputVal;
		if (inputVal > 50) result -= 2;

Mehr Informationen auf Seite 131 von Refactoring.

Ersetze eine Methode durch ein Methoden-Objekt (Replace Method with Method Object)

Eine lange Methode verwendet lokale Variablen auf solche Art und Weise, dass ein extrahieren in eine Methode nicht möglich ist.

Nutze eine temporäre Variable.

class Order...
double price() {
  double primaryBasePrice;
  double secondaryBasePrice;
  double tertiaryBasePrice;
  // long computation;
  ...
}

[ARROW]

Mehr Informationen auf Seite 135 von Refactoring.

Ersetze Algorithmus (Substitute Algorithm)

Der Algorithmus soll gegen einen verständlicheren ausgetauscht werden.

Ersetze den Körper einer Methode mit dem neuen Algorithmus.

	String foundPerson(String[] people){
		for (int i = 0; i < people.length; i++) {
			if (people[i].equals ("Don")){
				return "Don";
			}
			if (people[i].equals ("John")){
				return "John";
			}
			if (people[i].equals ("Kent")){
				return "Kent";
			}
		}
		return "";
	}

[ARROW]

	String foundPerson(String[] people){
		List candidates = Arrays.asList(new String[] {"Don", "John", "Kent"});
		for (int i=0; i<people.length; i++)
			if (candidates.contains(people[i]))
				return people[i];
		return "";
	}

Für mehr Informationen siehe Seite 139 in Refactoring.