Ja. Der Code kompiliert. Aber er verletzt das Konzept der Modularität und ist schlecht geschrieben.
public class UnitTestBad { static int N = 10; public static long factorial() { long fct = 1; for (int j=1; j<=N; j++) fct *= j; return fct; } public static void main(String[] args) { System.out.println( "factorial of " + N + ": " + factorial()); } }
public class UnitTestBadBad { static int N = 10; public static long factorialAlt() { long fct = 1; while (N > 0) { fct *= N; N-- ; } return fct; } public static void main(String[] args) { long result = factorialAlt(); System.out.println( "factorial of " + N + ": " + result); } } -------------------------------------- C:\Source> java UnitTestBadBad factorial of 0: 3628800
Der Code kompiliert und läuft sogar korrekt.
Aber jetzt ist der Gültigkeitsbereich der Klassenvariablen N
das gesamte Programm.
Das ist gefährlich.
Eine Variable, deren Gültigkeitsbereich das gesamte Programm ist, wird manchmal als globale Variable bezeichnet.
Globale Variablen verursachen oft unerwartete Interaktionen zwischen Teilen des Programms, die unabhängig sein sollten.
Betrachtet den Code. Achtet auf die alternative Berechnung von factorial()
.
Sieht gut aus. Was könnte schiefgehen?
Was ist falsch gelaufen?