Umgedrehtes if

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Dienstag 24. Juni 2008, 16:00

Das ist auch ganz nützlich und übersichtlicher bei Verwendung in längeren Zeilen, zb sowas mit ner for schleife:

Code: Alles auswählen

somefunction("blabla bla bla %s %s" % (",".join(obj.var for obj in someobjlist, y)))
Und unrecht hat sechsrad mit der 34 45 + Sache nicht, eigentlich ist es schon logischer erst die "festen" Werte zu nehmen und dann erst einen Operator drauf anzuwenden.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 24. Juni 2008, 16:15

str1442 hat geschrieben:Und unrecht hat sechsrad mit der 34 45 + Sache nicht, eigentlich ist es schon logischer erst die "festen" Werte zu nehmen und dann erst einen Operator drauf anzuwenden.
Seine Argumentation beist sich aber in den Schwanz:
if wahr dann print "wahr"
was ist daran logisch, verstehe ich nicht.

print "wahr" wenn if wahr !
was ist an dieser fragestellung unlogisch?
Vor allem wenn er dann mit Assembler argumentiert, wo man ja auch erst einen bedingten Sprung hat und dann erst den Code und nicht erst Code dann die Bedingung unter der er ausgeführt werden soll.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 24. Juni 2008, 17:35

"Mache ... wenn ..."-Konstrukte sind in normaler Sprache schon recht ungünstig, warum sollte sie man dann bei Programmiersprachen einführen. So ein typischer unglücklicher Satzbau ist "Langer Satz..., viele Nebensätze, ... nicht." Der eigentliche Sinn des Satzez ergibt sich erst ganz zum Ende. Selbiges würde sich ergeben, wenn man das "wenn" ans Ende stellt.

Den Operator hinter die Operanden zu stellen ist einfach nur menschenverachtend ;-) Wie soll man das denn noch lesen? Und nur weil ein Rechner erst die Operanden laden muss um dann die Operation auszuführen ist kein Grund es so zu schreiben, dass die Übersicht verloren geht. Infixnotation ist eben für den Menschan am lesbarsten.

Vielleicht tut eine Priese Haskell mal ganz gut, dort kann man Operationen auch partiell ausführen. Da sind die Operationen auch vor den Operanden da.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 24. Juni 2008, 18:41

EyDu hat geschrieben: Den Operator hinter die Operanden zu stellen ist einfach nur menschenverachtend ;-)
Oha ... mach doch mal ne Eingabe bei der UN-Menschenrechtskommission ;-) SCNR
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Dienstag 24. Juni 2008, 18:43

@ maxip:

In Perl geht das (vielleicht hast du es da gesehen?)

print 'foo!' if $Wort eq 'foo'; # eq für equal

statt

if( $Wort eq 'foo' ){
print 'foo!'
}

Was ich auch gut finde, was es aber scheinbar nicht in Python gibt, ist 'unless': print 'foo!' unless $Wort ne 'foo'; # nq für not equal

Ich verwend' das manchmal um die hässlichen Klammern weglassen zu können.
Das ganze ist allerdings schlechter lesbar, wie EyDu bereits geschrieben hat
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 24. Juni 2008, 18:59

epsilon, ab Python 2.5 geht das auch:

Code: Alles auswählen

>>> print wort if (wort == "foo") else "bar"
foo
Wurde in diesem Thread auch schon gesagt.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 24. Juni 2008, 19:35

epsilon hat geschrieben:In Perl geht das (vielleicht hast du es da gesehen?)
Das ist auch ein Standardkonstrukt in Ruby. Ich habe mich nie entscheiden können ob ich es gut finde. Es ist zwar kurz aber die Syntax wird davon komplizierter ohne das das Konstrukt wirklich wesentliche Vereinfachungen bietet. Deswegen gibt es wohl in Python nicht so etwas.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Dienstag 24. Juni 2008, 19:43

Rebecca hat geschrieben:epsilon, ab Python 2.5 geht das auch:

Code: Alles auswählen

>>> print wort if (wort == "foo") else "bar"
foo
Wurde in diesem Thread auch schon gesagt.

Hab ich das Gegenteil behauptet?
Ich habe gelesen, was audax geschrieben hat. print wort if wort == "foo" geht in Python aber trotzdem nicht (Und genau das hab ich und maxip geschrieben).
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Dienstag 24. Juni 2008, 19:53

Leonidas hat geschrieben:Es ist zwar kurz aber die Syntax wird davon komplizierter ohne das das Konstrukt wirklich wesentliche Vereinfachungen bietet. Deswegen gibt es wohl in Python nicht so etwas.
Du hast Recht. Damian Conway¹ rät in 'Perl Best Practices' auch davon ab die Schreibweise zu benutzen. Manchmal finde ich es aber ganz praktisch.


¹ http://de.wikipedia.org/wiki/Damian_Conway
Antworten