Seite 2 von 3
Verfasst: 23.11.2004 00:09
von Kaeru Gaman
mit deinem beispiel hast du den wundesten punkt getroffen. gerade, wenn ein bool-flag gesetzt werden soll durch ein boolean ist es absolut schotter, das in ein IF zu packen.
im grunde wollte ich halt nicht zu fordernd sein, aber mir wäre es auch lieber, wenn boolsche ausdrücke auf jeden fall implementiert würden.
zu dem anderen thema ProcName ( a.l, b=3, c.w)
ich bin mir nicht ganz sicher, aber ich glaube es wäre nur ein boolescher ausdruck, wenn er in klammern steht.
mal ganz abgesehen davon, das in einer proc-definition nichts relatives stehen darf, damit wäre diese syntax sowieso eindeutig.
das geht ja nur darum, dass der compiler versteht, was hier gemeint ist. hier könnte jedes beliebige sonderzeichen stehen.
Verfasst: 23.11.2004 22:50
von bluejoke
Ich hab mich schon gefragt, ob man irgendwie Default-Ausrücke in eine Procedure-Declaration packen kann

- Jetzt weiß ichs...
In PHP ist es so gelöst (soll jetzt kein Lösungsvorschlag oder so sein, sondern nur ne Nebenbei-Information), dass ein Defaultwert mit 1 Gleichzeichen, der boolsche Operand mit zwei Gleichheitszeichen geschrieben wird.
Das hat mich anfangs verwirrt, dann hab ich mich aber an TurboPascal erinnert

- und wusste überhaupt nicht mehr, wie es da gelöst war.
Gibts in TP nicht auch Prozeduren / Funktionen mit optionalen Parametern?
Verfasst: 24.11.2004 02:53
von Kaeru Gaman
@bluejoke
wenn ich dich richtig verstehe: das ist C-konvention.
würde aber in PB nicht so gut passen, da es ja auch sonst keine C-konvention verwendet.
Verfasst: 24.11.2004 12:47
von Zaphod
das ist nicht c konvention, das macht die mehrheit der programmiersprachen so. muß aber nicht rein in pb, würde viel probleme mit altem code produzieren und ist auch nicht sehr DAU kompatibel.
Verfasst: 24.11.2004 17:48
von bluejoke
Ich wollte es explizit nicht als Lösungsmöglichkeit anbieten, weils mir auch zuviele Probleme wären.
Eine Lösungsmöglichkeit: Man könnte den Defaultwert durch ":=" zuweisen.
Das wäre in meinen Augen auch relativ logisch und einfach zu merken, da es in Mathe ja auch sowas wie "wird definiert mit" bedeutet, oder?
Verfasst: 24.11.2004 19:38
von ts-soft
In BASIC hat das "=" zwei verschiedene Bedeutungen.
Früher so
Let a = 1
Heute so
a=1
In diesem Fall ist das "=" ein Zuweisungs-Operator
If a = 1
oder
While a=1
In diesen Fällen ist "=" ein Vergleichsoperator
Dies ist in Basic so um eine leichte, an der engl. Sprache angelehnte Syntax zu erreichen. Wenn dieses geändert wird, haben wir nur noch einen BASIC-ähnlichen Dialekt. Außerdem würden 99,9 % aller Codes nicht mehr Funktionieren.
Eine alternative wäre vielleicht ein zusätzliches einzeiliges if
If a=b then d=a
Wäre vom Compiler effektiver zu Übersetzen
als
If a=b : d=a : endif
Verfasst: 24.11.2004 22:40
von Kaeru Gaman
grundsätzlich hast du recht mit zuweisung/vergleich.
in diesem speziellen fall ging es um funktionsdefinitionen mit default-wert, nicht um eine veränderung von if.
die frage war, ob man in der def. FunctionName(x.f, y.f,z.l=3) schreiben kann, ohne dass es als boolscher ausdruck interpretiert wird.
Verfasst: 24.11.2004 22:45
von NetSlayer
Kiffi hat geschrieben:In VB ist es zumindest so, daß beispielsweise ein Select-Case schneller ist als eine If-Else-Endif-Abfrage. In PB ist es genau umgekehrt.
Bei mir ist laut deinem Code die Switch-Abfrage schneller...
Verfasst: 24.11.2004 22:45
von MLK
ich glaube dass das zu unterscheiden nicht die fähigkeiten von Fred überschreiten wird

Verfasst: 25.11.2004 01:58
von Kaeru Gaman
@Zaphod
es ist C-Konvention. neuere sprachen lehnen sich in der syntax lediglich häufig an C an.
@ts-soft
hoppla, jetzt hab ich das erst vollständig geschnallt. es ist mit absicht kein THEN implementiert. dem compiler ist es egal, ob du Bedingung-Anweisung-Ende in drei verschiedene zeilen schreibst, oder durch doppelpunkt trennst. in diesem fall 'ersetzt' der erste doppelpunkt das THEN, genauso, wie es sonst die zeilenschaltung macht.
ich benutze oft einzeilige If's, wenn es ne ganz kurze anweisung ist, finde ich den code so übersichtlicher
als 37 verschiedene Blöcke.