Behandlung von Booleans
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
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?
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
Gibts in TP nicht auch Prozeduren / Funktionen mit optionalen Parametern?
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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?
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?
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
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
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Zuletzt geändert von Kaeru Gaman am 25.11.2004 02:15, insgesamt 3-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.