Ist das schlimm wenn man ein Script/Code komplizierter schreibt als es sein könnte?
Hallo,
Ich bin Programmieranfänger und habe eine Frage bezüglich dem Titel und zwar habe ich um mehr Praxiserfahrung zu sammeln ein simplen Kalkulator für die Konsole programmiert (in Java). Dieser ist jedoch spürbar komplizierter geworden als es sein müsste.
import java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
calculate();
}
public static void calculate() {
System.out.println("Rechenart:");
Scanner scanner = new Scanner(System.in);
String arithmeticMethod = scanner.next();
if (Objects.equals(arithmeticMethod, "addition") || Objects.equals(arithmeticMethod, "+")) {
addition();
} else if (Objects.equals(arithmeticMethod, "subtraction") || Objects.equals(arithmeticMethod, "-")) {
subtraction();
} else if (Objects.equals(arithmeticMethod, "multiplication") || Objects.equals(arithmeticMethod, "*") || Objects.equals(arithmeticMethod, "x")) {
multiplication();
} else if (Objects.equals(arithmeticMethod, "division") || Objects.equals(arithmeticMethod, ":") || Objects.equals(arithmeticMethod, "/")) {
division();
} else if (Objects.equals(arithmeticMethod, "stop")) {
System.out.println("Program ended.");
}
}
public static void addition() {
Scanner scanner = new Scanner(System.in);
int firstSummand;
int secondSummand;
System.out.println("1. Summand: ");
firstSummand = scanner.nextInt();
System.out.println("2. Summand: ");
secondSummand = scanner.nextInt();
System.out.println("Ergebnis: ");
System.out.println(firstSummand + secondSummand);
calculate();
}
public static void subtraction() {
Scanner scanner = new Scanner(System.in);
int minuend;
int subtrahend;
System.out.println("Minuend: ");
minuend = scanner.nextInt();
System.out.println("Subtrahend: ");
subtrahend = scanner.nextInt();
System.out.println("Ergebnis: ");
System.out.println(minuend - subtrahend);
calculate();
}
public static void multiplication() {
Scanner scanner = new Scanner(System.in);
int firstFactor;
int secondFactor;
System.out.println("1. Factor: ");
firstFactor = scanner.nextInt();
System.out.println("2. Factor: ");
secondFactor = scanner.nextInt();
System.out.println("Ergebnis: ");
System.out.println(firstFactor * secondFactor);
calculate();
}
public static void division() {
Scanner scanner = new Scanner(System.in);
int dividend;
int divisor;
System.out.println("Dividend: ");
dividend = scanner.nextInt();
System.out.println("Divisor: ");
divisor = scanner.nextInt();
System.out.println("Ergebnis: ");
System.out.println(dividend / divisor);
calculate();
}
}
(Entschuldigung dass ich es nicht über ein Bild zeigen kann da nicht alles auf ein Bild passt.) Ist das schlimm? Sollte ich mir das schnell abgewöhnen?
Schonmal Danke im voraus.
2 Antworten
Code sollte vor allem lesbar sein – und das auch noch in ein paar Wochen, wenn du nicht mehr genau weißt, was du da gemacht hast. Faustregel: So kurz wie möglich und so lang wie nötig. Sinnvolle Teilbereiche sollten in Funktionen oder Klassen ausgelagert werden, damit diese einfacher wiederverwendet oder geändert werden können.
Dein Code ist jetzt nicht zu lang und die einzelnen Berechnungen in Methoden auszulagern ist absolut in Ordnung. Persönlich hätte ich jetzt noch eine (oder mehrere) extra Methode(n) für die Dateneingabe gemacht aber das ist hier auch nicht unbedingt nötig. Beim Dividieren musst du aber noch die 0 abfangen.
Dein Code ist an sich nicht sonderlich kompliziert, sondern sogar recht strukturiert und ordentlich.
Nur wirst du wegen der Endlosrekursion einen Stackoverflow bekommen wenn du zu oft Eingaben tätigst. Statt "calculate" in den Unterfunktionen aufzurufen bau einfach eine Schleife in der "calculate"-Funktion.
Weitere Anmerkungen:
- Den Scanner solltest du einmal erstellen und wiederverwenden.
- Die Eingaben sollten verifiziert werden.
- Zum Parsen von Input bieten sich Parser und Parsergeneratoren an. (Für Fortgeschrittene.)
- Kommentare hinzufügen.