dedlfix: Pro/Contra Break in Schleifen

Beitrag lesen

echo $begrüßung;

Falls ich den Code richtig verstanden haben, kann deine answers-Liste durch eine einfache boolsche Variable ersetzt werden:

Ja, das wäre eine Vereinfachung (für den geposteten Fall), aber das goto ist immer noch drin.

Allerdings fällt mit gerade auf, dass ich beim Übertragen ins Forum schon eine undurchdachte Vereinfachung eingebaut habe, so dass meine ursprüngliche Aufgabenstellung nicht mehr erfüllt wird, was daran zu sehen ist, dass der Kommentar

// either Allowed or at least one constraint has to vote, but nobody must veto.

nicht mehr zum Code passt [1]. So sah das ursprünlich aus:

case Constraint.Results.Allowed:
        answers.Clear(); // discard all other answers
        answers.Add(true); // only one vote for true
        goto Allowed; // and break out of foreach
...
Allowed:
  // either Allowed or at least one constraint has to vote, but nobody must veto.
  if (answers.Count > 0 && answers.TrueForAll(delegate(bool answer) { return answer; }))
    this.elements.Add(element);

Und in dem Fall brauchts dann meiner Meinung nach schon zwei bools. Eins das anzeigt, ob ein Veto existiert und eins das bei einem Vote auf true geht. Den Allowed-Fall kann man mit veto=false; vote=true; goto Allowed; erledigen. Und die Auswertung wird auch einfacher:

if (vote && !veto)
    this.elements.Add(element);

Insgesamt schon resourcenschonender als die bool-Liste - danke für die Anregung - aber leider noch mit goto.

Man könnte das switch durch eine if-else-if-Kette ersetzen und hätte dann das break frei für das foreach, aber das gefällt mir auch nicht besser als das goto.

[1] Mit TDD wär das nicht passiert.[2]
[2] Ausrede: Unit Tests sind in dem mir zur Verfügung stehenden VS 2005 noch nicht eingebaut.

echo "$verabschiedung $name";