Problem bei Vergleichen (z.B.: a=3)

Previous topic - Next topic

OzzardOfWiz

Hallo erstmal, bin neu hier.

Mit meiner Demo-Version von GLBasic SDK 7.341 ist mir ein Problem bei Vergleichen innerhalb von Ausdrücken aufgefallen. Beispiel:

Statt

IF a>4
a=1
else
a=0
endif

könnte man ja auch kurz schreiben:

a=(a>4)



funktioniert auch wunderbar mit  > und <. Aber leider nicht mit =

Beispiel:

a=(a=4) führt zu einem Fehler beim precompilen.

Grund:

das zweite Gleichheitszeichen müsste nach c++ in == umgewandelt werden, da dort sonst eine (sinnlose) Zuweisung statt einem Vergleich entsteht.





Schranz0r

#1
Macht keine Basicsprache... (sofern ich das mitbekommen habe)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

OzzardOfWiz

funktioniert z.B. Beispiel in VBA und VB.Net: (Hier ergibt wahr jedoch -1 und falsch=0, kann einfach mit ABS gelöst werden)

(Auch in Qbasic und Quickbasic)

einfach mal
a=3

b=5 *(a=3)

probieren

bei welchen Basic gehts denn nicht?

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

OzzardOfWiz

*LOL* disregard? Schranz0r war eben noch enttäuscht, was aus der Community geworden ist. Vielleicht mit verknautschten 3-Wort-Sätzen weg-disregarded?
Naja, aber ich werde den "Tip" wohl beherzigen.

Schranz0r

Quote from: OzzardOfWiz on 2010-May-12
*LOL* disregard? Schranz0r war eben noch enttäuscht, was aus der Community geworden ist. Vielleicht mit verknautschten 3-Wort-Sätzen weg-disregarded?
Naja, aber ich werde den "Tip" wohl beherzigen.



Stimmt so nicht ganz, die Community ist super! Das ist mal Fakt.
Nur bin ich enttäuscht, dass die deutschen hier bei uns lieber ins englische schreiben... :(

Finde nur das wir es nutzen sollten, wenns schon für 2 Sprachen hier Bereiche gibt, und so nix gesplittet ist wie bei den anderen Basic-Sprachen :(
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

OzzardOfWiz

Quote from: Ocean on 2010-May-12
...Also hab' ich's gelöscht...

upsala, dann sorry. Habs in den falschen Hals bekommen.

Quote from: Schranz0r on 2010-May-12
die Community ist super! Das ist mal Fakt.
Nur bin ich enttäuscht, dass die deutschen hier bei uns lieber ins englische schreiben...

Ja ich habe hier irgendwo mal zum deutschen GLBasic-Forum "Alleinstellungsmerkmal" gelesen. Das ist auch für mich ein wichtiges Feature. Erreicht meine deutsche Fehlermeldung denn überhaupt die Macher? Oder muss ichs dafür ins englische Forum posten?

Also laut der GLBasic Hilfe ("Operatoren Reihenfolge"), sollte das vergleichende = wirklich funktionieren (die anderen Vergleiche funktionieren ja auch).


(ich habe solche kurzen Schreibweisen gerne bei den Interpretern benutzt, war dann neben der ersparten Tipparbeit teilweise auch ein Performance-Schub) Bei GL-Basic ist es zwar genau umgekehrt (satte 10% Leistungseinbuße bei < und >) aber unter Umständen kann man mit einem kleinen -7*((a=4)+3) oder sowas einen ganzen Haufen Zeilen sparen und damit den Code zwar nicht lesbarer, aber dafür umso übersichtlicher halten.

OzzardOfWiz

na das wird dann vielleicht zu offtopic aber "weniger lesbar" soll bedeuten, das ein anderer den Code schwerer lesen könnte, "übersichtlicher" heißt, der Code ist "eingedampft" und hat vielleicht nur noch 100 statt 400 Zeilen, ich muss nicht ständig von einer Function zur nächsten scrollen. Weißt schon, die Portionen im 5-Sterne-Restaurant sind ebenfalls "übersichtlich".

Quentin

Au weia, jetzt wirds hier elitär :)) Ocean, wat heisst denn dat? Hab nur einen Baumschulabschluss.

Was diese verkürzten Schreibweisen angeht. Kenne das eigentlich nur von C. Muss gestehen, ich wusste gar nicht, daß
das auch in GLBasic geht. Aber ich sehe das doch richtig, daß diese Kurzschreibweise nur für logische Vergleiche verwendbar ist?

Abgesehen davon, daß solche Konstrukte möglicherweise chic aussehen, tragen sie imho weder der besseren ÃÅ"bersichtlichkeit
noch der besserern Lesbarkeit bei.

OzzardOfWiz

#9
Naja, Lesbarkeit liegt im Auge des Betrachters. Als Basic-Freak wird man Basic schon generell für eine gut lesbare Sprache halten. Für andere ist sie möglicherweise etwas zu "geschwätzig". Es kommt auch immer auf den speziellen Fall an. Gerade wenn man ohnehin schon einen Ausdruckswust vor sich hat, schaden zwei drei logische Vergleiche auch nicht mehr unbedingt der Lesbarkeit.
Und auch sonst finde ich beispielsweise

Getfontsize fontbreite, fonthoehe
for i = 1 to 20
Print i, 100+Fontbreite*(i<10), i*fonthoehe
next

nicht unbedingt schwerer lesbar als:

Getfontsize fontbreite, fonthoehe
for i = 1 to 20
if i<10
print " "+i, 100, i*fonthoehe
else
print i,100,i*fonthoehe
endif
next

Ja, ich kriege bei der 2. Möglichkeit alles logische quasi vorgekaut, muss aber auch doppelt soviele Zeilen lesen. Mit etwas Gewöhnung habe ich aber auch bei der kurzen Schreibweise den gleichen Effekt. Die Vergleiche springen einem Quasi genauso ins Auge wie "If i<10" und dann ist schon ohne viel lesen zu müssen alles klar.


Quentin

natürlich. Das Empfinden, was gut/besser lesbar ist, ist subjektiv und es hat ja auch eine gewisse Eleganz, das so zu formulieren.

allerdings bleibe ich bei meiner Behauptung, weil man beim Lesen dieses Stück Codings erst einmal einen gewissen Gedankensprung
durchführen muss, um zu erfassen, was dort vor sich geht, während das bei der zweiten "umständlicheren" Variante schneller klar wird.

aber ich will jetzt nicht filosofisch werden :)

OzzardOfWiz

okay  ;)

Jetzt wäre es nur noch toll, wenn sich einer der Macher des Problems, das ich scheinbar ganz alleine habe, annehmen würde. Lesen die überhaupt deutsch? Oder hat mir hier schon einer der Verantwortlichen geantwortet? (Ich kenne ja die Leute noch nicht so)

Quentin

soviel ich weiss, gibt es nur einen Verantwortlichen und das ist Gernot (Kitty Hello).
So er denn wieder hier auftaucht (eigentlich täglich), wird er sich wohl auch dazu äußern.
Ansonsten einfach noch mal drauf rumreiten :)

Kitty Hello

Bei meinem Compiler geht:
Code (glbasic) Select

IF a=(b=5) THEN PRINT "XXX",0,0
IF b=(b=5) THEN PRINT "XXX",0,0
IF a=(b=a) THEN PRINT "XXX",0,0


Also, abwarten bis zur V8, dann geht's.

OzzardOfWiz

Quote from: Kitty Hello on 2010-May-13
Also, abwarten bis zur V8, dann geht's.

Vielen vielen Dank.
:good:

Quote from: Ocean on 2010-May-12
noch weniger Buchstaben weist eine Sprache namens APL auf.  Lesbar?  Hmmm....

noch mehr Buchstaben weist eine Sprache namens COBOL auf. Lesbar? Hmmm....

Basic:

a=b/c+d-e*f

COBOL:

DIVIDE b BY c GIVING g
MULTIPLY e By f GIVING h
ADD d TO g GIVING i
SUBTRACT h FROM i GIVING a   :blink: