AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language [Erledigt ]Logik-Problem mit and/or-Verknüpfung
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Wolfgang Mix · begonnen am 12. Aug 2012 · letzter Beitrag vom 13. Aug 2012
Antwort Antwort
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

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

  Alt 13. Aug 2012, 07:52
Find Ich garnicht so klugscheißerisch... hört sich einfach nach Erfahrung an.

Hilfsvariablen oder "Krückenvariablen" heißen eigentlich ungünstig, weil sie Pflicht-Leseverbesserungs-Variablen heißen sollten und man davon soviele erstellen sollte, wie es für ein besseres Verständnis des Codes förderlich ist.

Angenommen du berechnest in einer Funktion:

Delphi-Quellcode:

Border := 10 * Parameter;
Result := Border + Width;

// Könntest du das auch ohne Border und in 1 Zeile abwickeln

Result := (10 * Parameter) + Width
Wenn du jenes allerdings in komplexeren Methoden ohne weitere Bezeichner machst, wird der Code wieder ein Stückchen unübersichtlicher -> schwerer zu warten.

Ich würde Klammern immer setzen, weil sie der Gleichnung verschiedene menschliche Interpretationsmöglichkeiten aberkennen, denn eigentlich ist das Problem, dass du scheinbar nicht genau weißt was passiert wenn sie nicht da sind:

Dazu gibts einen kleinen Bereich in der Referenz:
http://docwiki.embarcadero.com/RADSt....29_Operatoren

Zitat:
Das Kurzschlussverfahren geht streng von links nach rechts vor und wird beendet, sobald das Ergebnis des gesamten Ausdrucks feststeht

Delphi-Quellcode:

If (IsLeapYear()) and (month in [January, February]) Then
Nach unserem Styleguide würde die Bedingung zwanghaft nochmals eingeklammert werden aber das ist was hausinternes.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!

Geändert von Jonas Shinaniganz (13. Aug 2012 um 08:41 Uhr)
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#2

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

  Alt 13. Aug 2012, 10:54
Es ist etwas OT, aber eine interessante Diskussion.
Ich persönlich verzichte gerne auf Überflüssiges im Code, wobei ich bei der Klammersetzung dazu tendiere, komplexe Ausdrücke durch Funktionen oder Hilfsvariablen verständlich zu machen.

Ich persönlich finde es aber einen Overkill, einen Funktionsaufruf in Klammern zu setzen. Ich setze beim Leser meines Codes voraus, das er Delphi kann.

Was allerdings grenzwertig wäre, wäre ein Konstrukt wie

if not ((a>=1) and (a<=10)) or not((b>=-2) and (b<=15)) then // habe ich Klammern vergessen? .

Das ist zwar schön kompakt, aber man muss schon genauer hinschauen, um zu erkennen, das a und b auf 'außerhalb einer Toleranz' geprüft werden (also eigentlich ja negiertes 'innerhalb der Toleranz' ). Also wieso nicht gleich

Delphi-Quellcode:
if Not InTolerance(a,1,10)) or not InTolerance(b,-2,15) then// garantiert keine Klammer vergessen
// oder nach Umformung (leichter zu lesen????)
if Not (InTolerance(a,1,10)) and InTolerance(b,-2,15)) then
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.211 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 13. Aug 2012, 11:43
if Not InTolerance(a,1,10)) or not InTolerance(b,-2,15) then// garantiert keine Klammer vergessen
Doch, da fehlt ein (
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Aug 2012 um 12:04 Uhr)
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#4

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

  Alt 13. Aug 2012, 11:44
:rofl: Aber da fehlt keine, das ist eine zu viel.
Herrlich ins Knie geschossen!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz