ProcedureReturn Not [Variable] = Fehler
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: ProcedureReturn Not [Variable] = Fehler
das ist völlig richtig, das ist ja auch die logische Verwendung.
aber sowie du eine Zuweisung eines Wertes durchführen willst, brauchst du eine arithmetische Operation.
auf eine Wertübergabe trifft das ebenso zu.
also zu schreiben
ProcedureReturn [Funktion]
ist so wie
Ergebnis = [Funktion]
aber ganz anders als
If [Funktion]
in den ersten beiden Fällen fungiert die Funktion als [Wert], im letzten als [Ausdruck].
aber sowie du eine Zuweisung eines Wertes durchführen willst, brauchst du eine arithmetische Operation.
auf eine Wertübergabe trifft das ebenso zu.
also zu schreiben
ProcedureReturn [Funktion]
ist so wie
Ergebnis = [Funktion]
aber ganz anders als
If [Funktion]
in den ersten beiden Fällen fungiert die Funktion als [Wert], im letzten als [Ausdruck].
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: ProcedureReturn Not [Variable] = Fehler
ich wollte mich eigentlich auch zurückhalten, da das thema schon mal diskutiert worden ist. ich kann eueren aussagen aber noch immer überhaupt nicht folgen. was meint ihr, was mit den bedingungen hinter einer if anweisung passiert?
ob da ein <, =, <>, AND, NOT oder sonst was steht, ist doch vollkommen egal. es sind alles vergleiche, die ein true oder false liefern. in welcher priorität die vergleiche ausgeführt werden, ist in der hilfe eindeutig beschrieben. das ganze wird so lange aufgelöst, bis zwei möglichkeiten über bleiben:
if #true
if #false
ihr könnt es ja leicht selber testen. AND, OR, XOR, NOT liefern einen eindeutigen boolschen wert, wenn ein paar regeln eingehalten werden. der rückgabewert muss ein integer sein (ich nehme mal an, dass es ein integer ist und kein long, kann es auf einem x64 nicht probieren). reine zahlen funktionieren nicht immer, also müssen die in einen eindeutigen variablentyp überführt werden. welchen ist egal. ganz sicher bin ich mir nicht, aber ich glaube, wenn die beiden werte schon boolsche werte sind, ist auch der variablentyp des rückgabewertes egal.
eine kleine ausnahme bildet der NOT operator. aber auch hier lässt sich die hilfe eindeutig aus, nämlich dass der wert auf der rechten seite verwendet wird. also kann es nach meiner logik auch einen wert auf der linken seite geben und genau so ist es auch. der ausdruck x NOT y liefert einen eindeutiges true oder false, wobei der wert auf der linken seite einfach ignoriert wird. da man ja über jeden vergleich beliebig eine klammer setzen kann, ist es für mich auch erklärlich, warum das in klammer dann auch ohne den ersten wert funktioniert.
die andere ausnahme ist generell ein eigenheit von basic. das zeichen = kann halt als vergleichs und als zuweisungsoperator dienen. wenn es in einer if-anweisung steht, dann ist es eindeutig ein vergleichsoperator. aber vieleicht spendiert uns fred ja noch mal einen richtigen == vergleichsoperator.
ob da ein <, =, <>, AND, NOT oder sonst was steht, ist doch vollkommen egal. es sind alles vergleiche, die ein true oder false liefern. in welcher priorität die vergleiche ausgeführt werden, ist in der hilfe eindeutig beschrieben. das ganze wird so lange aufgelöst, bis zwei möglichkeiten über bleiben:
if #true
if #false
ihr könnt es ja leicht selber testen. AND, OR, XOR, NOT liefern einen eindeutigen boolschen wert, wenn ein paar regeln eingehalten werden. der rückgabewert muss ein integer sein (ich nehme mal an, dass es ein integer ist und kein long, kann es auf einem x64 nicht probieren). reine zahlen funktionieren nicht immer, also müssen die in einen eindeutigen variablentyp überführt werden. welchen ist egal. ganz sicher bin ich mir nicht, aber ich glaube, wenn die beiden werte schon boolsche werte sind, ist auch der variablentyp des rückgabewertes egal.
eine kleine ausnahme bildet der NOT operator. aber auch hier lässt sich die hilfe eindeutig aus, nämlich dass der wert auf der rechten seite verwendet wird. also kann es nach meiner logik auch einen wert auf der linken seite geben und genau so ist es auch. der ausdruck x NOT y liefert einen eindeutiges true oder false, wobei der wert auf der linken seite einfach ignoriert wird. da man ja über jeden vergleich beliebig eine klammer setzen kann, ist es für mich auch erklärlich, warum das in klammer dann auch ohne den ersten wert funktioniert.
die andere ausnahme ist generell ein eigenheit von basic. das zeichen = kann halt als vergleichs und als zuweisungsoperator dienen. wenn es in einer if-anweisung steht, dann ist es eindeutig ein vergleichsoperator. aber vieleicht spendiert uns fred ja noch mal einen richtigen == vergleichsoperator.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: ProcedureReturn Not [Variable] = Fehler
hä? woduwolle?
es wird schon seit jahren gepredigt, dass PureBasic keine Bool'schen Berechnungen unterstützt.
so etwas wie a = ( b > a ) ist schlichtweg nicht möglich.
also, es ist völlig belanglos, was du da versuchst zu argumentieren mit der Verarbeitung einer If-Anweisung.
wenn du logische Operationen irgendwo hin packst, wo Purebasic nur arithmetische Operationen akzeptiert, dann baust du Scheiße!
... ist denn das so schwierig zu verstehen ...?
es wird schon seit jahren gepredigt, dass PureBasic keine Bool'schen Berechnungen unterstützt.
so etwas wie a = ( b > a ) ist schlichtweg nicht möglich.
also, es ist völlig belanglos, was du da versuchst zu argumentieren mit der Verarbeitung einer If-Anweisung.
wenn du logische Operationen irgendwo hin packst, wo Purebasic nur arithmetische Operationen akzeptiert, dann baust du Scheiße!
... ist denn das so schwierig zu verstehen ...?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: ProcedureReturn Not [Variable] = Fehler
bei den vergleichsoperatoren hast du auf jeden fall recht, dass diese pb genau wie das IstGleich nur innerhalb der if-anweisung aktzeptiert.Kaeru Gaman hat geschrieben:so etwas wie a = ( b > a ) ist schlichtweg nicht möglich
im christentum wird schon seit 2000 jahren gepredigt, aber der wahrheitsgehalt ist sicher kein thema für hier.Kaeru Gaman hat geschrieben:es wird schon seit jahren gepredigt, dass PureBasic keine Bool'schen Berechnungen unterstützt.
wo steht, dass ich meine logischen operatoren nicht hinpappen darf, wo ich will? in der hilfe steht:Kaeru Gaman hat geschrieben:wenn du logische Operationen irgendwo hin packst, wo Purebasic nur arithmetische Operationen akzeptiert, dann baust du Scheiße!
"Das Resultat dieses Operators wird der umgekehrte Wert des logischen Ausdrucks auf RS sein. Der Wert wird entsprechend der nachfolgenden Tabelle gesetzt. Dieser Operator kann nicht mit Strings verwendet werden."
es steht zwar bei den vergleichsoperatoren auch nichts näher dabei, aber da ist zumindest ein beispiel mit einer if-anweisung.
JAKaeru Gaman hat geschrieben:... ist denn das so schwierig zu verstehen ...?
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: ProcedureReturn Not [Variable] = Fehler
genau.Josh hat geschrieben:in der hilfe steht:
"Das Resultat dieses Operators wird der umgekehrte Wert des logischen Ausdrucks auf RS sein. Der Wert wird entsprechend der nachfolgenden Tabelle gesetzt. Dieser Operator kann nicht mit Strings verwendet werden."
es steht zwar bei den vergleichsoperatoren auch nichts näher dabei, aber da ist zumindest ein beispiel mit einer if-anweisung.
mit If, nicht mit = oder Zahlen.
Programmieren darf man selbstverständlich wo dass hinpappen will Alles doch ist da nicht wo beim...Josh hat geschrieben:wo steht, dass ich meine logischen operatoren nicht hinpappen darf, wo ich will?
dass man beim Programmieren nicht Alles da hinpappen darf wo man will ist doch selbstverständlich...
gell? der Satz fängt irgendwie logisch an und verliert sich dann in totalem Chaos.
... so Programme sieht man auch ab und zu mal...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: ProcedureReturn Not [Variable] = Fehler
wo steht in der hilfe was von if? da steht genau das, was ich oben zitiert habe, nicht mehr und nicht weniger. das mit dem if hast du dazugedichtet.Kaeru Gaman hat geschrieben:genau.
mit If, nicht mit = oder Zahlen.
also zusammenfassend für die logischen operatoren:
- es funktioniert, sofern es ein definierter variablentyp ist und der rückgabewert ein integer ist
- in der hilfe steht nichts, dass man logische operatoren nur in einer if-anweisung einsetzen darf
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: ProcedureReturn Not [Variable] = Fehler
Josh hat geschrieben:wo steht in der hilfe was von if? da steht genau das, was ich oben zitiert habe, nicht mehr und nicht weniger. das mit dem if hast du dazugedichtet.
Josh hat geschrieben: in der hilfe steht: ...
aber da ist zumindest ein beispiel mit einer if-anweisung.
weißt du, das ist mir zu doof.Josh hat geschrieben:- in der hilfe steht nichts, dass man logische operatoren nur in einer if-anweisung einsetzen darf
entweder du lernst, was PB kann und was PB nicht will,
oder du schreibst dir deinen eigenen Compiler.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: ProcedureReturn Not [Variable] = Fehler
Josh hat geschrieben:es steht zwar bei den vergleichsoperatoren auch nichts näher dabei, aber da ist zumindest ein beispiel mit einer if-anweisung.
und warum zitierst du nur den zweiten teil meines satzes und reißt es vollkommen aus dem zusammenhang? ich habe geschrieben, dass bei vergleichsoperatoren was von einer if-anweisung steht. fakt ist noch immer, dass in der hilfe bei den logischen operatoren nichts steht, dass sie nur in if-anweisungen eingesetzt werden dürfen.Kaeru Gaman hat geschrieben:Josh hat geschrieben: in der hilfe steht: ...
aber da ist zumindest ein beispiel mit einer if-anweisung.
klar will ich lernen, was PB kann und will. PB kann logische operatoren auch außerhalb von if-anweisungen verwenden und die hilfe sagt nichts gegenteiliges. die argumente dagegen haben sich hier eigentlich nur darauf beschränkt, dass es falsch ist, dass es nicht vogesehen ist und dass es schon seit jahren gepredigt wird.Kaeru Gaman hat geschrieben:entweder du lernst, was PB kann und was PB nicht will,
oder du schreibst dir deinen eigenen Compiler.
aber ich glaube auch, dass es besser ist das thema einfach zu belassen. soll jeder verwenden oder nicht wie er will.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: ProcedureReturn Not [Variable] = Fehler
dann schreib halt einen Bericht darüber, inwieweit die Help unvollständig ist.
du kannst auch mal das englische und das deutsche Forum durchsuchen,
nach Postings wo Freak und Fred selber schreiben, dass Bool'sche Ausdrücke nicht
verwendet werden sollen, weil PB nicht darauf ausgelegt ist, sie vernünftig auszuwerten.
also, von mir aus darfst du gerne schreiben was du willst,
du wirst lachen, der Workaround stammt von mir.
Aber wenn deine codes dann in zukünftigen PB-Versionen nicht mehr funktionieren, beschwehr dich nicht.
und btw ist geplant, eine Boolean()-Funktion zu implementieren, die #True oder #False als Zahlenwerte zurückgibt.
du kannst auch mal das englische und das deutsche Forum durchsuchen,
nach Postings wo Freak und Fred selber schreiben, dass Bool'sche Ausdrücke nicht
verwendet werden sollen, weil PB nicht darauf ausgelegt ist, sie vernünftig auszuwerten.
also, von mir aus darfst du gerne schreiben was du willst,
du wirst lachen, der Workaround stammt von mir.
Code: Alles auswählen
bool = ( ( a > b ) Or #False )
und btw ist geplant, eine Boolean()-Funktion zu implementieren, die #True oder #False als Zahlenwerte zurückgibt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: ProcedureReturn Not [Variable] = Fehler
Stimmt, da war was...
ASM
P.S. War bestimmt von Fred nicht so gedacht. Aber manchmal machen Programme sachen die man nicht erwartet und trotzdem funktionieren.
Code: Alles auswählen
Macro BOOL(assert)
((assert) Or #False)
EndMacro
a = 10
b = 20
c = BOOL(a > b)
Debug c
c = BOOL(a < b)
Debug c
c = BOOL(a = b)
Debug c
Code: Alles auswählen
;
; Macro BOOL(assert)
;
; a = 10
MOV dword [v_a],10
; b = 20
MOV dword [v_b],20
;
; c = BOOL(a > b)
MOV ebx,dword [v_a]
CMP ebx,dword [v_b]
JG Ok0
JMP No0
Ok0:
MOV eax,1
JMP End0
No0:
XOR eax,eax
End0:
MOV dword [v_c],eax
; Debug c
; c = BOOL(a < b)
MOV ebx,dword [v_a]
CMP ebx,dword [v_b]
JL Ok1
JMP No1
Ok1:
MOV eax,1
JMP End1
No1:
XOR eax,eax
End1:
MOV dword [v_c],eax
; Debug c
; c = BOOL(a = b)
MOV ebx,dword [v_a]
CMP ebx,dword [v_b]
JE Ok2
JMP No2
Ok2:
MOV eax,1
JMP End2
No2:
XOR eax,eax
End2:
MOV dword [v_c],eax
; Debug c
;
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive