Schrift
[thread]6329[/thread]

Kommas: Loeschen (Seite 4)



<< |< 1 2 3 4 5 6 >| >> 51 Einträge, 6 Seiten
sri
 2004-06-17 15:56
#83286 #83286
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also Dieter, tu dir selbst einen Gefallen und schau dir die perldocs an!

Es geht hier wirklich nur um die Rangordnung der Operatoren, da haben Taulmarill und Crian absolut recht!!!

P.S.: Wäre dies ein Lisp forum wärst du unser Held! ;)
Antworten mit Zitat
Gast Gast
 2004-06-17 16:13
#83287 #83287
[quote=sri,17.06.2004, 13:56]Also Dieter, tu dir selbst einen Gefallen und schau dir die perldocs an!

Es geht hier wirklich nur um die Rangordnung der Operatoren, da haben Taulmarill und Crian absolut recht!!!

P.S.: Wäre dies ein Lisp forum wärst du unser Held! ;)[/quote]
Ähhmmm - ich denke wirklich daß mir die Rangordnung der Operatoren bestens bekannt ist - daher habe ich dazu geschrieben ;)
Beim Einsatz von &&, || usw. ist nun mal besondere Sorgfalt auf die Klammerung zu verwenden; beim Einsatz von and, or usw. ist in 'bestimmten' Fällen besondere Sorfalt auf die Klammerung zu verwenden.
Beim Einsatz einer Mischung aus &&/and, ||/or usw. sollte unbedingt alles geklammert werden um den Code dann noch 'lesbar' zu halten.
Antworten mit Zitat
sri
 2004-06-17 16:19
#83288 #83288
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Dieter,17.06.2004, 14:13][quote=sri,17.06.2004, 13:56]Also Dieter, tu dir selbst einen Gefallen und schau dir die perldocs an!

Es geht hier wirklich nur um die Rangordnung der Operatoren, da haben Taulmarill und Crian absolut recht!!!

P.S.: Wäre dies ein Lisp forum wärst du unser Held! ;)[/quote]
Ähhmmm - ich denke wirklich daß mir die Rangordnung der Operatoren bestens bekannt ist - daher habe ich dazu geschrieben ;)
Beim Einsatz von &&, || usw. ist nun mal besondere Sorgfalt auf die Klammerung zu verwenden; beim Einsatz von and, or usw. ist in 'bestimmten' Fällen besondere Sorfalt auf die Klammerung zu verwenden.
Beim Einsatz einer Mischung aus &&/and, ||/or usw. sollte unbedingt alles geklammert werden um den Code dann noch 'lesbar' zu halten.[/quote]
Lesbarkeit ist halt subjektiv, wer die Rangordnung kennt sollte bei drei operatoren noch nicht die Übersicht verlieren.

P.S.: Genau für solche Sachen wäre ein IRC Channel besser! ;)\n\n

<!--EDIT|sri|1087474891-->
Antworten mit Zitat
Gast Gast
 2004-06-17 16:31
#83289 #83289
[quote=sri,17.06.2004, 14:19]Lesbarkeit ist halt subjektiv, wer die Rangordnung kennt sollte bei drei operatoren noch nicht die Übersicht verlieren.[/quote]
Das war jetzt aber 'ziemlich' polemisch :)
Ich war der Meinung wir reden hier abstrakt über ein potentielles Problem der Klammerung innerhalb von hypothetischen Bedingungsanweisungen. ;)
Antworten mit Zitat
sri
 2004-06-17 16:46
#83290 #83290
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Dieter,16.06.2004, 17:09]Im Falle von
if ( ((( ($a && $b) || ($c && $d) ))) || $e ) {...}
sorgt es nicht nur für Klarheit sondern ist sogar zwingend erforderlich ;)[/quote]
Und ich dachte es ginge darum das die Klammern nötig sind. ;)\n\n

<!--EDIT|sri|1087476379-->
Antworten mit Zitat
Gast Gast
 2004-06-17 17:08
#83291 #83291
[quote=sri,17.06.2004, 14:46]Und ich dachte es ginge darum das die Klammern nötig sind. ;)[/quote]
Denken ist eben manchmal reine Glücksache ;)
Antworten mit Zitat
renee
 2004-06-17 17:10
#83292 #83292
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@sri und Dieter: kommt mal bitte wieder runter...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Antworten mit Zitat
Gast Gast
 2004-06-17 17:14
#83293 #83293
Ready for touch down :)
Antworten mit Zitat
Taulmarill
 2004-06-17 18:01
#83294 #83294
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
also, um zur konstruktiven diskussion zurück zu kommen...
es ging mir ja ursprünglich um die nicht-existente notwendigkeit von klammerungen.
ich hab hier mal nen schönes beispiel:
Code: (dl )
1
2
3
4
5
6
peters@ronin:~> perl -MO=Deparse -e 'if ( ((( ($a && $b) || ($c && $d) ))) || $e ) {}'
if ($a and $b or $c and $d or $e) {
();
}
-e syntax OK
peters@ronin:~>

damit sollte erwiesen sein, dass eine klammerung hier nicht "zwingend erforderlich" ist. wie das jeder für sich löst ist mir natürlich egal.

no offense!
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Antworten mit Zitat
Crian
 2004-06-18 03:34
#83295 #83295
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Dieter,17.06.2004, 13:42]Sorry - aber es ist müßig darüber weiter zu diskutieren.
Jeder kann seine IF-Bedingungen so formulieren wie er mag - entscheidend ist allein das Ergebnis ... (und dann kann man ja immer noch nachbessern) ;)[/quote]
Ups, da hab ich ja ganz unbeabsicht Abgründe in Deinem Wissen über boolsche Algebra aufgetan :-O

Denn wie Taulmarill schon sagte:

[quote=Taulmarill,17.06.2004, 11:14]da and stärker bindet als or kann man die klammern um die and schon mal weg lassen, auch die "dreifach-klammern" sind unnötig. damit sind wir bei
Code: (dl )
if ( ( a and b or c and d ) or e ) {}

ich behaupte nun, dass
Code: (dl )
( a or b ) or c

identisch ist mit
Code: (dl )
a or b or c

damit können wir auch das letzte klammernpaar weglassen und haben nur noch die klammern vom if.
Code: (dl )
if ( a and b or c and d or e ) {}
[/quote]

liefern alle drei Ausdrücke

Code: (dl )
((( a or b ))) or c

Code: (dl )
( a or b ) or c

Code: (dl )
a or b or c


genau dann wahr, wenn mindestens eine der Bedingungen a, b oder c wahr ist. (Sowas lässt sich leicht nachprüfen über Wahrheitstabellen, falls man mit der Logik dahinter noch Probleme hat.

Und aufgrund der Kurzschlußtechnik wird b und c nicht weiter geprüft, falls a schon wahr ist. Deshalb muss man es auch anders machen, wenn da nicht einfache Ausdrück stehen, sondern Funktionsergebnisse, und man möchte, dass alle drei Funktionen auf jeden Fall ausgeführt werden.

In diesem Fall führt man die Funktionen erst aus, wobei man sich die Ergebnisse merkt und testet dann mit if.


[quote=Dieter,17.06.2004, 12:52]Kommt drauf an was man mit der Bedingung sagen will
print "true\n" if ($a and $b) or $c;
prüft erst ob $a und $b sich in einem definierten Zustand befinden und sieht sich in jedem Falle auch $c an.
print "true\n" if ($a and $b) || $c;
sieht sich $c nur dann an wenn die geklammerte Bedingung nicht zutrifft.
print "true\n" if $a and $b or $c;
liefert true wenn $a oder $b oder $c definiert ist
usw.[/quote]

Falsch, in allen drei Fällen wird $c nur genau dann geprüft, wenn $a oder $b falsch sind. Sind beide richtig, wird $c nicht angesehen.
Insbesondere Deine letzte Aussage

> print "true\n" if $a and $b or $c;
> liefert true wenn $a oder $b oder $c definiert ist

Ist ganz falsch, was passiert denn wohl, wenn $b wahr und $a und $c falsch sind? Richtig, der Gesamtausdruck ist dann falsch, im Gegensatz zu Deiner Aussage.
Und wieso überhaupt "definiert" - hier geht es um wahr oder falsch, und undef ist nur einer der möglichen falschen Werte.


[quote=Dieter,16.06.2004, 17:09]Im Falle von
if ( ((( ($a && $b) || ($c && $d) ))) || $e ) {...}
sorgt es nicht nur für Klarheit sondern ist sogar zwingend erforderlich ;)[/quote]

Diese Aussage ist schlicht falsch, es sei denn, sie bezog sich nicht auf das Beispiel, sondern auf alle möglichen Fälle von Abfragen (natürlich gibt es Abfragen, wo ohne Klammern eine andere Logik entsteht als mit Klammern).




So, ich möchte hiermit keinesfalls die Stimmung anheizen, ich denke nur, dass es wichtig ist, sich hierüber gut auszukennen als Programmierer. Als Mathematiker lernt man das halt schon ausführlich im Studium, aber auch sonst sollte man sich in boolscher Algebra auskennen.

Also bitte nicht angegriffen fühlen und nicht aufregen, sondern die Anregung aufnehmen, nachlesen und nachlernen.


(Oder halt dauernd redundante Klammern setzen, aber ich hasse das ;-)\n\n

<!--EDIT|Crian|1087516558-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Antworten mit Zitat
<< |< 1 2 3 4 5 6 >| >> 51 Einträge, 6 Seiten



View all threads created 2004-06-11 16:54.