IT-Berufe-Podcast

Don’t Repeat Yourself (DRY) – Wissenshäppchen #1


Listen Later

In der ersten Episode meiner "Wissenshäppchen" widme ich mich einem der wichtigsten Prinzipien der Softwareentwicklung: Don’t Repeat Yourself (DRY). Doppelter Code ist der Feind jedes Entwicklers! :-)
Every piece of knowledge must have a single, unambiguous, authoritative representation within a system. (DontRepeatYourself)
Am Beispiel einer weit verbreiteten Programmierübung zeige ich den Weg von doppeltem zu "trockenem" (DRY) Code.
Inhalt
Doppelter Code ist ein Code Smell.
Er tritt meistens auf, wenn Entwickler Zeit sparen wollen und mit Copy/Paste arbeiten.
Doppelter Code führt zu Inkonsistenzen und damit zu Fehlern im Programm.
Er äußert sich durch Shotgun Surgery, das Anpassen mehrerer Stellen im Code für die Änderung eines einzigen Features.
Es existieren viele Refactorings, die doppelten Code vermeiden sollen.
Die Aufgabe: FizzBuzz
Das hier ist die Beschreibung des zu lösenden Problems:
Print a list of the numbers from 1 to 100 to the console. For numbers that are multiples of 3 print "Fizz" instead. For numbers that are multiples of 5 print "Buzz" instead. For numbers that are both multiples of 3 and 5 print "FizzBuzz" instead. These are the first 15 values the program should print:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
Lösung der Azubis
Die Implementierung der Azubis sieht dann meistens so aus:
public static void main(String[] args)
{
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0 && i % 5 == 0)
{
System.out.println("FizzBuzz");
}
else
if (i % 3 == 0)
{
System.out.println("Fizz");
}
else
if (i % 5 == 0)
{
System.out.println("Buzz");
}
else
{
System.out.println(i);
}
}
}
Diese Implementierung ist recht komplex (drei verschachtelte if-Statements) und enthält auch sehr viel doppelten Code:
Die auszugebenden Strings. Würden wir das Spiel auf Deutsch übersetzen, müssten wir die Strings an mehreren Stellen verändern.
Die Prüfung auf Fizz und Buzz (Modulo-Rechnung). Würden sich die Regeln ändern (z.B. 7 und 11 statt 3 und 5 oder zusätzlich Fizz bei "enthält die Ziffer 3"), müssten sie an mehreren Stellen angepasst werden.
Die Ausgabe auf der Konsole. Soll das Spiel in einer Webanwendung oder einer Windows-Applikation eingesetzt werden, müsste die Ausgabe an mehreren Stellen korrigiert werden.
Refactorings
Um die Komplexität und den doppelten Code zu entfernen, können verschiedene, relativ einfache Refactorings angewendet werden:
Werte in Variablen oder Konstanten auslagern, die nur einmalig definiert werden.
Variable für das Ergebnis einführen und diese nur einmalig ausgeben, anstatt jedes Ergebnis separat.
Ergebnisse der einzelnen Prüfungen verketten, anstatt doppelt zu prüfen.
Schritt 1: Doppelte Werte in Variablen auslagern
Fizz und Buzz sollen als Wert nur noch einmalig vorkommen. So sieht eine mögliche Lösung aus:
public static void main(String[] args)
{
String fizz = "Fizz"; // <--- HIER
String buzz = "Buzz"; // <--- HIER
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0 && i % 5 == 0)
{
System.out.println(fizz + buzz); // <--- HIER
}
else
if (i % 3 == 0)
{
System.out.println(fizz); // <--- HIER
}
else
if (i % 5 == 0)
{
System.out.println(buzz); // <--- HIER
}
else
{
System.out.println(i);
}
}
}
Schritt 2: Variable für Endergebnis einführen
Anstatt viermal die Ausgabe mit System.out.println() durchzuführen, soll das Ergebnis "gesammelt" und nur einmal ausgegeben werden. Das könnte dann so aussehen:
public static void main(String[] args)
{
...more
View all episodesView all episodes
Download on the App Store

IT-Berufe-PodcastBy Stefan Macke

  • 5
  • 5
  • 5
  • 5
  • 5

5

1 ratings


More shows like IT-Berufe-Podcast

View all
Chaosradio by Chaos Computer Club Berlin

Chaosradio

7 Listeners

Computer und Kommunikation by Deutschlandfunk

Computer und Kommunikation

10 Listeners

IQ - Wissenschaft und Forschung by Bayerischer Rundfunk

IQ - Wissenschaft und Forschung

46 Listeners

ZEIT WISSEN. Woher weißt Du das? by ZEIT ONLINE

ZEIT WISSEN. Woher weißt Du das?

45 Listeners

c’t uplink - der IT-Podcast aus Nerdistan by c’t Magazin

c’t uplink - der IT-Podcast aus Nerdistan

5 Listeners

Eine Stunde History - Deutschlandfunk Nova by Deutschlandfunk Nova

Eine Stunde History - Deutschlandfunk Nova

109 Listeners

Smarter leben by DER SPIEGEL

Smarter leben

50 Listeners

Kampf der Unternehmen by Wondery

Kampf der Unternehmen

16 Listeners

kurz informiert by heise online by heise online

kurz informiert by heise online

2 Listeners

Quarks Science Cops by Quarks

Quarks Science Cops

19 Listeners

Terra X History - Der Podcast by ZDF - Terra X

Terra X History - Der Podcast

9 Listeners

Aha! Zehn Minuten Alltags-Wissen by WELT

Aha! Zehn Minuten Alltags-Wissen

25 Listeners

KI verstehen by Deutschlandfunk

KI verstehen

8 Listeners

Wirecard: 1,9 Milliarden Lügen by Süddeutsche Zeitung

Wirecard: 1,9 Milliarden Lügen

3 Listeners

Passwort - der Podcast von heise security by Dr. Christopher Kunz, Sylvester Tremmel

Passwort - der Podcast von heise security

3 Listeners