Schrift
[thread]6656[/thread]

if anweisung (Seite 2)

Leser: 2


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Kathrin
 2005-01-24 15:09
#51209 #51209
User since
2004-12-15
158 Artikel
BenutzerIn
[default_avatar]
uuuupsssss :D
wieder einmal peinlich!
wieso denn einfach wenns auch schwierig geht :D (JOKE)
danke renee du hast natürlich recht
Strat
 2005-01-24 18:47
#51210 #51210
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
nebenbei: schreibe bei
Code (perl): (dl )
if ($de==0 && $en==0 && $fr==0)  {          #Zeile 171

besser "and" anstelle von &&
Code (perl): (dl )
if ($de==0 and $en==0 and $fr==0)  {          #Zeile 171

weil || bzw. && eine viel hoehere bindung hat als 'or' und 'and', und es kann passieren, dass || oder &&, wenn du da weitere rechenoperationen oder funktionen reinfuegst, ploetzlich eine hoehere bindungskraft bekommen als die rechenoperation und dann schwierig zu findende probleme verursachen, siehe auch
Code (perl): (dl )
1
2
my $file = 0;
open FH, $file || die "Error";

. alternativ kannst du da auch klammern einfuegen:
Code (perl): (dl )
if ( ($de==0) && ($en==0) && ($fr==0) )  {          #Zeile 171


oder kuerzer:
Code (perl): (dl )
unless ($de or $en or $fr) {
\n\n

<!--EDIT|Strat|1106585383-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Kathrin
 2005-01-24 22:36
#51211 #51211
User since
2004-12-15
158 Artikel
BenutzerIn
[default_avatar]
schon wieder was dazu gelernt ;-)
danke dir strat
format_c
 2005-01-25 10:55
#51212 #51212
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@Strat: Da stimme ich dir nicht ganz zu.
Die Bindung der Operatoren kommt IMHO nur in Verbindung mit Funktionen die als Argument eine Liste erwarten zum tragen da die Bindung des ,-Operators schwächer ist als die von && und ||. In einer Bedingung macht && genau das selbe wie and und || wie or solange der ,-Operator nicht im Spiel ist. Korrigier mich bitte falls ich falsch liege.

Allerdings stimmt es, dass and die lesbarkeit intuitiver macht

Gruß Alex\n\n

<!--EDIT|format_c|1106643415-->
Dubu
 2005-01-26 11:36
#51213 #51213
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Da bin ich der gleichen Meinung wie format_c. Es gibt nur wenige Operatoren, die eine geringere Praezedenz haben als && und ||, und keiner davon sollte in einer Bedingung auftauchen. Es sind nur ".."/"...", "?:", die Zuweisungs- und die Listenoperatoren.

Mein Faustregel ist: In einer Bedingung immer && und ||, bei Ablaufsteuerung "and" und "or".
Ein Ausdruck wie "open (...) or die" ist dabei ein Beispiel fuer eine Ablaufsteuerung mit einer logischen Verknuepfung.
In Bedingungen ergibt sich hier auch der Vorteil, das man eine C aehnlichere Syntax erhaelt.
Strat
 2005-01-27 00:30
#51214 #51214
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@format_c: da hast du recht; es gibt uebrigens noch ein paar weitere, die eine niedrigere bindung als && bzw. || haben:
Code: (dl )
.. ... ?: = += -= *= .= usw. , => listenoperatoren not, and, or, xor

(ich hoffe, ich habe so ziemlich alle erwischt)

das ganze zeug braucht man sich aber nicht merken, weil 'or' die niedrigeste bindungskraft hat, und 'and' ein klein bisschen hoeher, und da kann man sich klammern so gut wie immer sparen und ist normalerweise auf der sicheren seite.

Ich verwende || bzw. && nur in konstrukten wie z.B.
Code: (dl )
1
2
3
my $value = shift || 'defaultValue'; # ev. achtung auf 0... warte ungeduldig auf // bzw. //=
# oder
$value ||= 'defaultValue'; # ev. achtung auf 0

sonst verwende ich || bzw. && nie; perl kann eh schon ein arger zeichensalat sein:
Code (perl): (dl )
if ($x && $y || $z && $r || $p) {

finde ich haesslich, auch wenn es ein C-Programmierer schneller kapiert; aber die sprache heisst Perl und nicht C, und Perl ist viel reicher an syntax als C... warum die dann nicht zur besseren lesbarkeit einsetzen?
Code (perl): (dl )
if ($x and $y or $z and $r or $p) {

finde ich besser lesbar, aber das wuerde ich sogar mit klammern schreiben

Code (perl): (dl )
if ( ($x and $y) or ($z and $r) or $p) {

dann sieht man schon auf den ersten blick alles, und braucht nicht mehr nachzudenken...\n\n

<!--EDIT|Strat|1106778826-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
esskar
 2005-01-27 00:41
#51215 #51215
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
auf der reinen logischen ebene bindet && immer stärker als or...
also ist
Code: (dl )
$x && $y || $z && $r || $p
und
Code: (dl )
($x && $y) || ($z && $r) || $p
oder gar
Code: (dl )
($x and $y) or ($z and $r) or $p
gäbe in jeder logik-klausur punktabzug :)
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-01-24 12:34.