Aktuelle Zeit: 14.08.2018 17:54

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Inline-If
BeitragVerfasst: 07.03.2016 17:46 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
STARGÅTE hat geschrieben:
@Nino:
>> "Auch wenn man das normale "If" benutzt darf man nicht durch 0 dividieren."
Richtig, aber beim normalen If, frage ich das ja vorher auch ab, ob x<>0 und lasse dann nur 1/x zu!

Ja, sicher. Aber was ich sagen wollte ist, dass du hier an den Fall "x = 0" denken musst, und dich irgendwie darum kümmern musst. Beim Inline-If muss ich das eben auch tun, so what? D.h. in einer Situation in der x = 0 sein kann, würde ich es mit 1/x nicht benutzen. Das waren in meiner bislang über 25-jährigen Programmierpraxis allerdings Ausnahmefälle. Wieso sollte ich nur wegen dieser Ausnahmefdälle das Inline-If generell ablehnen? Man muss immer wissen, welches "Werkzeug" man wo und wie einsetzen kann und darf. Und das gilt eben auch für das normale "If", das wollte ich sagen.
Für das Inline-If gibt es -- wie ich finde -- sehr elegante Anwendungen (s.u.).

mhs hat geschrieben:
Im einem anderen Thread (http://purebasic.fr/german/viewtopic.php?f=8&t=4840&start=10) hatte ich schon mal meine Variante gepostet. Total simpel, dafür nicht komplett Inline, weil die Result Variable mit als Paramter übergeben werden muss... dafür ohne Performanceverlust, doppelter Ausführung der Expression... ist ja schließlich nur ein simples If : Else :lol:

Ich finde, für diese Variante spricht durchaus einiges.
Allerdings funktioniert einer meiner Lieblingsanwendungsfälle nur mit der anderen Variante, die sich wie eine Funktion aufrufen lässt:

Code:
selected = 3
StatusBarText(0, 0, Str(selected) + " Datei" + IifS(selected <> 1, "en", "") + " ausgewählt.")

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inline-If
BeitragVerfasst: 07.03.2016 21:16 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
STARGÅTE hat geschrieben:
Speziell geht es um die Problematik, dass beide Zustände (True und False) immer ausgeführt werden
Es gibt zwei Arten von Inline-If:
  • Funktion: wertet beide Zustände aus
  • Operator: wertet nur den zutreffenden Zustand aus
Das selbst gebastelte Inline-If ist die Funktion-Variante, wie sie auch in Visual Basic implementiert wurde (https://en.wikipedia.org/wiki/%3F:#Visual_Basic).
Die Operator-Variante wird wohl nur Fred per native Implementierung realisieren können.

https://en.wikipedia.org/wiki/%3F:#Usage hat geschrieben:
Note that some languages may evaluate 'both' the true- and false-expressions, even though only one or the other will be assigned to the variable. This means that if the true- or false-expression contain a function call, that function may be called and executed (causing any related side-effects due to the function's execution), regardless of whether or not its result will be used. Programmers should consult their programming language specifications or test the ternary operator to determine whether or not the language will evaluate both expressions in this way. If it does, and this is not the desired behaviour, then an if-then-else statement should be used.


Nino hat geschrieben:
Die numerischew Version lässt sich noch etwas vereinfachen, indem man auf das "Not" verzichtet, und da du in der String-Version für das Trennzeichen eine Variable benutzt, muss es natürlich überall als Variable auftauchen.
Danke für die Hinweise. Ich habe sie im ersten Post übernommen.

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inline-If
BeitragVerfasst: 08.03.2016 08:34 
Offline
Benutzeravatar

Registriert: 11.01.2009 16:30
Wohnort: Langerringen
Nino hat geschrieben:
mhs hat geschrieben:
Im einem anderen Thread (http://purebasic.fr/german/viewtopic.php?f=8&t=4840&start=10) hatte ich schon mal meine Variante gepostet. Total simpel, dafür nicht komplett Inline, weil die Result Variable mit als Paramter übergeben werden muss... dafür ohne Performanceverlust, doppelter Ausführung der Expression... ist ja schließlich nur ein simples If : Else :lol:

Ich finde, für diese Variante spricht durchaus einiges.
Allerdings funktioniert einer meiner Lieblingsanwendungsfälle nur mit der anderen Variante, die sich wie eine Funktion aufrufen lässt:

Code:
selected = 3
StatusBarText(0, 0, Str(selected) + " Datei" + IifS(selected <> 1, "en", "") + " ausgewählt.")


Ja, das geht natürlich nicht, deswegen hatte ich es auch "nicht komplett inline" genannt. In solchen Fällen arbeite ich mit einer zusätzlichen Variable. Mir persönlich ist wichtig, dass das If kurz und kompakt in einer Zeile steht, ohne die Ausführungszeit zu verschlechtern oder dass ich mir Gedanken zur doppelten Ausführung von Funktionen, etc machen muss.

_________________
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inline-If
BeitragVerfasst: 26.05.2016 13:12 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Ich werde beide Varianten ins CodeArchiv hinzufügen:
  • Inline-If: z_Miscellaneous/Inline-If.pbi
  • If-Set: z_Miscellaneous/If-Set.pbi

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inline-If
BeitragVerfasst: 28.06.2016 14:18 
Offline
Benutzeravatar

Registriert: 19.10.2006 12:51
Die If-Politik finde ich schon immer in PB etwas misslungen.

Andere Sprache:
Zitat:
if (a > 255) a = 255;
b = (a = 10 ? 5 : c);


In PB fürchterlich sperrig:
Code:
If a > 255
  a = 255
EndIf
If a = 10
  b = 5
Else
  b = c
EndIf


Das Aufreihen von Codezeilen mit : finde ich persönlich auch unschön.

In QBASIC gab es wenigstens noch:
Code:
IF a > 255 THEN a = 255


Könnte PB ja genauso von Haus aus so machen.

Oder sowas:
b = If a = 0 Then 1 Else 2

_________________
return;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inline-If
BeitragVerfasst: 02.02.2018 00:34 
Offline

Registriert: 20.01.2018 18:24
Wohnort: NRW
STARGÅTE hat geschrieben:
Ist nicht böse gemeint, aber wie ich im englischen Forum schon schrieb, halte ich nichts von diesen Inline-If Sachen (zumindest nicht in diesem selbstgemachten Zustand).
Speziell geht es um die Problematik, dass beide Zustände (True und False) immer ausgeführt werden, was in diesem Fall z.B. zu Problemen führt:
.....
.....
Darum hier meine Bitte, doch bitte lieber auf eine echte Implementierung zu warten, statt "unechte" Tricks zu posten.
Fast 2 Jahre sind nun vergangen... wird es überhaubt eine Implementierung geben? :(
ternary operator, ich vermisse ihn....
Code:
result = a > b ? x : y


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye