| 

.NET C# Java Javascript Exception

2
Hallo, Source Code sagt ja bekanntlich mehr wie 1000 Wörter.

Habe eine Variable bVar die entweder an dieser Stelle true / false sein kann.


Bool bVar = true | false
if (Bool == 1) {
if (bedingungen1 && bedingungen2) {
//Anweisungsblock 10 Zeilen lang
}
} else {
if (bedingungen1) {// ist die exakt gleiche wie die bedingungen1 von oben.
//Gleicher Anweisungsblock wie oben 10 Zeilen lang
}
}

So habe ich es implementiert und es funktioniert. Habe aber 2 mal den gleichen Code. Wie bekomme ich das schöner hin ohne den gleichen Code 2 mal verwenden zu müssen ?
News:
29.04.2014
Blackstore 113 5
luedi 2,2k 1 9
6 Antworten
3
Ich würde das Überprüfen der Bedingungen in eine Funktion mit aussagekräftigen Namen auslagern, die dir True oder False liefert. Zusätzlich könnte man, wie luedi schon vorschlug auch die Anweisungen selber in eine Methode mit aussagekräftigen Namen extrahieren.

if (MussAnweisungenAusfuehren) {
FuehreAnweisungenAus();
}

bool MussAnweisungAusfuehren() {
if (Bool == 1) {
return bedingungen1 && bedingungen2;
} else {
return bedingungen1;
}
}

void FueherAnweisungenAus() {
// Anweisungsblock 10 Zeilen lang...
}


Die Methodennamen sollten noch an deine Domänen-Logik angepasst werden.

Das liest sich imho wesentlich angenehmer als verschachtelte If-Anweisungen, die erfahrungsgemäß im Laufe der Zeit nicht einfacher werden...
29.04.2014
Andreas Richter 1,7k 1 2 8
1
Ich habe deinen Code ein wenig umformatiert, damit das Problem klarer wird. Ohne Einrückungen könnte man meinen, dass sich das "else" auf "if (bedingungen1..." bezieht.

Ich würde den Code in den If-Blöcken in eine Funktion auslagern und diese dann aufrufen.

Gruß
Klaus
29.04.2014
luedi 2,2k 1 9
1
if ( (1==bVar && bedingungen1 && bedingungen2)
|| (0==bVar && bedingungen1) ) {
//Anweisungsblock 10 Zeilen lang
}


Bedingungen in eine Funktion/Methode packen, die dann nur für eine Abfrage benötigt wird?
Darum bin ich nur bedingt teamfähig!

Nachtrag:
Ggf. Gleiches nur einmal prüfen.
if ( bedingung1 ) {
if ( (1==bVar && bedingungen2)
|| 0==bVar ) {
//Anweisungsblock 10 Zeilen lang
}
}
06.05.2014
Patrick-Oliver 81 1 1
1
"Bedingungen in eine Funktion/Methode packen, die dann nur für eine Abfrage benötigt wird?"
Ob es sinnvoll ist, Bedingungen in eine Methode auszulagern, hängt mMn weniger von der Anzahl der Aufrufe ab als von der Komplexität der Bedingung. Selbst in einem 1-Mann-Team kann ich bei einem Wiedersehen mit meinem eigenen Code nach längerer Pause

if (isLeapYear(year)) {
//Anweisungen
}

schneller und sicherer lesen als

if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
//Anweisungen
}
Matthias Hlawatsch 06.05.2014
0
Meine Betonung lag unbewusst auf "einer".
In deinem konkreten Beispiel löst du eine Aufgabe, die gerne in verschiedenen Projekten gelöst werden soll. Wenn die Sprache nicht bereits fertige Lösungen bietet, kann man sich das Leben mit Helfer-Bibliotheken (DRY) leichter machen, ACK.

Wird die Funktion isLeapYear aber nur einmal in deinem Leben von dir und/oder deinen Kollegen benötigt (in deinem Beispiel sehr unwahrscheinlich), reicht ein Kommentar im Quelltext.

// is leap year?
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
//Anweisungen
}


Wer den Abschnitt dann nicht versteht, sollte auch nicht am Quelltext fummeln.
Imo.

Nachtrag:
Vielleicht kann ich hiermit deutlich machen, was mich stört.
if ( (1==bVar && isLeapYear(2014) && bedingungen2)
|| (0==bVar && isLeapYear(2014)) ) {
//Anweisungsblock 10 Zeilen lang
}

Bool bedingung1=isLeapYear(2014);
if ( (1==bVar && bedingung1 && bedingungen2)
|| (0==bVar && bedingung1) ) {
//Anweisungsblock 10 Zeilen lang
}

Wenn man nun noch an Stelle von "bedingung1" einen selbsterklärenden Variablennamen wählt, ist die Welt für mich in Ordnung ;-)
07.05.2014
Patrick-Oliver 81 1 1
Ich empfehle einmal das Buch Clean Code von Martin Fowler zu lesen. Insbesondere den Abschnitt über die Kommentare: Wenn ich in meinem Code kommentieren muss, was er tut, dann sollte ich mir überlegen was schief gelaufen ist ... ;)
Xantiva 07.05.2014
Wer Kommentare _grundsätzlich_ schlecht findet, hat meiner Meinung nach bei der Berufswahl gepennt.
Ich habe das Gefühl, ich drehe mich hier im Kreis.
Daher schlage ich abschließend vor:
Es gibt viele Wege zum Ziel. Nutze den, der in deiner Umgebung in möglichst jeder Hinsicht zum Erfolg führt.
Patrick-Oliver 07.05.2014
Patrick-Oliver: Ich verstehe Dich; bis vor kurzem hätte ich auch so argumentiert.
Leute, die immer von "Ich bin Programmierer", kein Buchautor kommen, die haben wirklich oft bei der Berufswahl gepennt, zumal es oft die gleichen sind, die eben auch keine Unit-Tests schreiben und glauben, dass Testen die Sache von Testern und auch nicht ihre ist.

Jedoch hast Du Dich vermutlich mit "Clean Code" noch nicht beschäftigt (?); nachdem ich Buch gelesen habe, sehe ich vieles auch anders. Es gibt nur wenige (gute) Entwickler, die sich den dort vorgeführten Argumenten komplett enziehen können.. ein Muss
Philm 09.05.2014
1
Sicher sind Kommentare nicht per se schlecht, eine verkürzte Kernaussage aber lautet, dass es viele Wege gibt, direkt im Code die Klarheit zu erhöhen, so dass viele Kommentare unnötig werden. In Bezug auf Funktionen wird die Aussage getroffen, dass man sie eben nicht nur einsetzen soll, um Code-Duplizierungen zu vermeiden, sondern auch um den "Programmers's intent" klar zu machen. Das Argument "Wer's nicht versteht, soll es lassen." ist da zu schwach, das kann man genau so schlecht auch in "Wem eine Funktion mehr zu kompliziert scheint, der soll's lassen." ummünzen.
Philm 09.05.2014
0
Noch ein Tipp: Ich habe mir das Video zu "Clean Code" auf Pluralsight.com angesehen, dass hat auch richtig Spaß gemacht. Ist natürlich eine kostenpflichtige Site, aber es gibt ja auch eine kostenlose 1-monatige Probezeit.
09.05.2014
0
Letzte Aussage zu Clean Code: Nichts ist das Evangelium, aber das Buch setzt einen Standard alleine durch seine Akzeptanz in der Community, ähnlich wie Unit-Testing oder Patterns davor. Früher musste ich z.B. oft mit Kollegen rumdiskutieren, wenn ich Code-Duplizierungen vermeiden wollte, heute fühle ich mich in guter Gesellschaft, und muss nicht alles nur als eine einzige Privatmeinung abtun lassen.
09.05.2014

Stelle deine Cplusplus-Frage jetzt!