Behandlung von Booleans

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Ich hab mich schon gefragt, ob man irgendwie Default-Ausrücke in eine Procedure-Declaration packen kann :D - 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 :D - und wusste überhaupt nicht mehr, wie es da gelöst war.
Gibts in TP nicht auch Prozeduren / Funktionen mit optionalen Parametern?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag 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?
Benutzeravatar
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

Beitrag 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
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.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
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.
NetSlayer
Beiträge: 117
Registriert: 21.09.2004 21:18
Kontaktdaten:

Beitrag 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...
...MfG, NetSlayer
"No, I ain't got a problem. It's you with the problem!"
http://netslayer.scpn.net
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

ich glaube dass das zu unterscheiden nicht die fähigkeiten von Fred überschreiten wird :-)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten