Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 09.03.15 22:34 
Moin,

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden C#-Quelltext
1:
float clippedAmplitude = signal < 5.0 ? signal : 5.0;					

Ist meiner Meinung nach gerade im Gesamtkontext deutlich einfacher zu lesen als
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 09.03.15 22:47 
Zu der Abkürzung: Man kann damit solche Sachen schreiben:

ausblenden C#-Quelltext
1:
while (item = GetNextItem()) // Do something					

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:
ausblenden C#-Quelltext
1:
2:
int len = -1;
while(str[++len]);


Vielleicht nicht ultimativ lesbar, aber kurz :twisted:
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 09.03.15 22:48 
Zitat:
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:
ausblenden C#-Quelltext
1:
float clippedAmplitude = signal < 5.0 ? signal : 5.0;					


Nein. Das hier ist lesbar :P

ausblenden C#-Quelltext
1:
float clippedAmplitude = Math.Min(signal, 5.0f);					


Aber mal im ernst Lesbarkeit ist einfach meist nur ein anderes Wort für Gewohnheit. Wenn ich es gewöhnt bin im Delphi Stil zu programmieren ist Code im Delphi Stil am lesbarsten. Das gilt im gleichen Maß für fast jede andere Sprache (Ausnahmen bestätigen die Regel). Wir sollten immer Vorsichtig sein und aufpassen die eigenen Gewohnheiten nicht mit tatsächlicher Qualität zu verwechseln.

Für diesen Beitrag haben gedankt: jfheins, Narses, Nersgatt, Tastaro
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 433
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 10.03.15 00:56 
Moin!

user profile iconmandras hat folgendes geschrieben Zum zitierten Posting springen:
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... :oops: :zwinker:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 433
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Di 10.03.15 10:10 
ich meinte daß es ihn in DELPHI nicht gibt :)
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 10.03.15 11:30 
Du vermisst ihn, bist aber froh, dass es ihn nicht gibt? :gruebel:
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 10.03.15 12:20 
Zitat:
Ähm, da muss ich dich enttäuschen... :oops: :zwinker:


Trinitäts-Operator :shock: Programmieren hat oft was religöses aber das die PHP Leute gleich mit der der Dreifaltigkeit anrücken ist doch leicht übertrieben :wink: