Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 13. Aug 2012, 06:39
Achtung, Klugscheißerkommentar!

Ist kompakter Code strebenswert oder lesbarer? Soll man das noch verstehen, wenn man in ein paar Jahren drüberschaut oder einfach übersehen, weil es ja so herrlich kompakt ist?

Zunächst fällt auf, das Monate durch numerische Werte repräsentiert werden. Das ist ungünstig, denn für welchen Monat steht die 1? Immer für Januar? Was ist, wenn wir mit Fiskaljahren rechnen und der erste Monat des Fiskaljahres ist der Juli? Was bedeutet dann die 1?

Ich würde daher den Monaten eine Enumerationsliste spendieren und den Monat durch seinen Namen repräsentieren. Dann ist das unmißverständlich.

DeddyH ist schon auf dem richtigen Weg, indem er auf magische Konstanten verzichtet, aber stellt sich über seinen 'Correctionvalue' selbst ein Bein: Das macht den Ansatz dann wieder schwerer Lesbar. Wolfgang will doch nur den einfachen Satz ins delphianische übersetzt haben:
"Wenn Januar oder Februar im Schaltjahr vorliegt, soll eine Schaltjahreskorrektur vorgenommen werden (1), andernfalls 0."
In Englisch wäre das
"A correctionvalue should be 1, if and only if the year is a leapyear and the month is a january and 0 otherwise".

Fast am Ziel (Delphi kennt das so ja nicht)
Delphi-Quellcode:
If IsLeapYear() and month in [January, February] Then
  CorrectionValue := 1
else
  CorrectionValue := 0;
Dieser Code liest sich fast so wie Wolfgangs Aufgabenstellung. Fast wortwörtlich, ergo verständlich.

Wenn man nun die Eigenschaft 'Schaltjahr und Januar oder Februar' noch beschreiben möchte (z.B. weil das eine Bedingung ist, die Fred Rembremerdinger in seiner Gleichung aufgestellt hat) dann kann man das noch in eine Funktion auslagern und dieser Funktion einen aussagekräftigen Namen geben. Muss aber nicht.

Das Einzige, was mich noch stören würde, ist der Name dieses Korrekturfaktors. Was korrigiert er? Wenn Wolfgang mehr Code zeigen würde, dann könnte man diesen Faktor noch umbenennen. Aber in dieser Aufgabenstellung reicht diese Bezeichnung aus.

@Hobbyprogrammierer: Ist 1/0 gleichbedeutend mit einem Boolean

Geändert von Furtbichler (13. Aug 2012 um 06:43 Uhr)
  Mit Zitat antworten Zitat