Autor |
Beitrag |
GuaAck
      
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: So 08.03.15 23:46
Liebe Leute,
als "Pascaler" hatte ich doch kürzlich eine Kleinigkeit mit C zu machen und hatte bei einer If-Abfrage auf Gleichheit "=" statt "==" gesschrieben. Der Compiler hat keine Fehlermeldung gegeben, also ist die Syntax ok, aber es war ja nicht das, was ich wollte. Mein Fehler war schnell gefunden.
Meine Frage: Wenn ich if (a=b) schreibe, wann ist(a=b) TRUE, wann FALSE? Wo nützt so eine Konstruktion?
Der Nutzen, das würde ich gerne wissen, wann ist if (a=b) nützlich?
Gruß
GuaAck
P.S.: An Google habe ich anscheinend immer die falsche Frage gestellt, jedenfalls habe ich nichts gefunden.
|
|
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Mo 09.03.15 00:06
Hallo,
der erste Link wenn man bei Google "C Zuweisung in if Bedingung" eingibt, führt zu Fallstricke bei der C-Programmierung.
Was bei if (a = b) in C passiert ist folgendes:
Die Variable a nimmt den Wert aus b an. Also wird letztendlich der Wert b geprüft. Da in C alles true ist, was nicht 0 ist, kann je nachdem der if Block betreten werden oder halt nicht.
Nach dieser if Anweisung hat a auf jeden Fall den Wert b. Je nachdem ob jetzt b==0 war oder b!=0 wurde der if-Block entweder übersprungen (b==0) oder ausgeführt (b!=0).
Dieses Verfahren hat meiner Ansicht nach überhaupt keinen vorteilhaften Nutzen. Das stiftet höchstens ein haufen Verwirrung.
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Für diesen Beitrag haben gedankt: GuaAck
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 09.03.15 08:39
Es ist eine der abkürzenden Schreibweisen, die den Quelltext kurz aber unleserlicher machen. C ist für Schreibfaule gar nicht schlecht, anders als Delphi.
Ich bin z.B. auch froh, dass es keinen Konditionaloperator in Delphi gibt. Auch der macht den Quelltext kürzer, aber unübersichtlicher.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mo 09.03.15 22:34
Moin,
jaenicke hat folgendes geschrieben : | Ich bin z.B. auch froh, dass es keinen Konditionaloperator in Delphi gibt. Auch der macht den Quelltext kürzer, aber unübersichtlicher. |
Das halte ich für zu pauschalisierend. Gerade dadurch, dass der ternäre Operator einen Rückgabewert hat, lässt sich sehr lesbarer Code erzeugen:
C#-Quelltext 1:
| float clippedAmplitude = signal < 5.0 ? signal : 5.0; |
Ist meiner Meinung nach gerade im Gesamtkontext deutlich einfacher zu lesen als
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| float clippedAmplitude; if(signal < 5.0) { clippedAmplitude = signal; } else { clippedAmplitude = 5.0; } |
Gruß
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Mo 09.03.15 22:47
Zu der Abkürzung: Man kann damit solche Sachen schreiben:
C#-Quelltext 1:
| while (item = GetNextItem()) |
Wobei GetNextItem entweder ein gültiges Objekte oder einen Nullpointer zurückgibt. Innerhalb der while-Schleife kann man also auf item zugreifen, und die Schleife wird automatisch verlassen, falls ein Nullpointer kommt (weil kein nächstes Element mehr da ist)
Da gibt es noch ein paar Sachen, die damit zu Einzeilern werden, auch mal mit einem Semikolon hinter dem while (==> leerer Schleifenkörper) zum Beispiel bei der Längenbestimmung eines null-terminierten Strings:
C#-Quelltext 1: 2:
| int len = -1; while(str[++len]); |
Vielleicht nicht ultimativ lesbar, aber kurz 
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 09.03.15 22:48
Für diesen Beitrag haben gedankt: jfheins, Narses, Nersgatt, Tastaro
|
|
mandras
      
Beiträge: 433
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Di 10.03.15 00:43
Grinsel...
gerade den ternären Operator vermisse ich öfters mal in Delphi.
Bin dann aber wenn ich mit PHP zu tun habe immer wieder froh, daß es ihn dort nicht gibt.
Hierzu verweise ich auf das implizite Type-Casting.
Ja, es hat alles seine Vor- und Nachteile.
Was würde in Delphi sprechen gegen:
A:=B:=C:=0
ist aber auch nicht besser als die C-Version.
Die Idee bei C ist eben ein kleines bissel anders als bei Pascal.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 10.03.15 00:56
Moin!
mandras hat folgendes geschrieben : | gerade den ternären Operator vermisse ich öfters mal in Delphi.
Bin dann aber wenn ich mit PHP zu tun habe immer wieder froh, daß es ihn dort nicht gibt. |
Ähm, da muss ich dich enttäuschen...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
mandras
      
Beiträge: 433
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Di 10.03.15 10:10
ich meinte daß es ihn in DELPHI nicht gibt 
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Di 10.03.15 11:30
Du vermisst ihn, bist aber froh, dass es ihn nicht gibt? 
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 10.03.15 12:20
Trinitäts-Operator  Programmieren hat oft was religöses aber das die PHP Leute gleich mit der der Dreifaltigkeit anrücken ist doch leicht übertrieben 
|
|