Kortere if mogelijk?
Code (php)
1
2
3
2
3
<?php
if ( ( $s == 'a' AND !$b ) OR ( $s == 'b' AND !$b2 ) OR ( $s != 'a' AND $s != 'b' ) )
?>
if ( ( $s == 'a' AND !$b ) OR ( $s == 'b' AND !$b2 ) OR ( $s != 'a' AND $s != 'b' ) )
?>
Gewijzigd op 01/01/1970 01:00:00 door K i p
Code (php)
1
2
3
2
3
<?php
if ( ( $s == 'a' AND !$bLid ) OR ( $s == 'b' AND !$bLid2 ) OR ( $s != 'a' AND $s != 'b ) )
?>
if ( ( $s == 'a' AND !$bLid ) OR ( $s == 'b' AND !$bLid2 ) OR ( $s != 'a' AND $s != 'b ) )
?>
je zou eventueel een waarheidstabel kunnen maken.. en op basis hiervan kijken of het korten kan of niet.
Yearupie schreef op 09.01.2010 23:55:
Het kan in ieder geval beter, je bent een quote vergeten:
Code (php)
1
2
3
2
3
<?php
if ( ( $s == 'a' AND !$bLid ) OR ( $s == 'b' AND !$bLid2 ) OR ( $s != 'a' AND $s != 'b ) )
?>
if ( ( $s == 'a' AND !$bLid ) OR ( $s == 'b' AND !$bLid2 ) OR ( $s != 'a' AND $s != 'b ) )
?>
in dat geval, jij ook!
Code (php)
1
2
3
2
3
<?php
if ( ( $s == 'a' AND !$bLid ) OR ( $s == 'b' AND !$bLid2 ) OR ( $s != 'a' AND $s != 'b' ) )
?>
if ( ( $s == 'a' AND !$bLid ) OR ( $s == 'b' AND !$bLid2 ) OR ( $s != 'a' AND $s != 'b' ) )
?>
ik bedoel eigenlijk meer of het logisch gezien korter kan worden opgeschreven omdat ik nu drie OR's gebruik
En je kunt beter || gebruiken. OR en AND zijn echt SQL dingen.
Gerben schreef op 10.01.2010 13:20:
Waarschijnlijk niet.
En je kunt beter || gebruiken. OR en AND zijn echt SQL dingen.
En je kunt beter || gebruiken. OR en AND zijn echt SQL dingen.
Idd,
AND = &&
OR = ||
<=>
Code (php)
1
2
3
2
3
<?php
if(($s == 'a' && !$bLid) || ($s == 'b' && !$bLid2) || ($s != 'a' && $s != 'b'))
?>
if(($s == 'a' && !$bLid) || ($s == 'b' && !$bLid2) || ($s != 'a' && $s != 'b'))
?>
Als het werkt dan bevorderd dat de leesbaarheid boven de cryptische || & tekens
Gerben schreef op 10.01.2010 13:20:
Waarschijnlijk niet.
En je kunt beter || gebruiken. OR en AND zijn echt SQL dingen.
En je kunt beter || gebruiken. OR en AND zijn echt SQL dingen.
Nee hoor, je kunt gewoon and, or, &&, en || gebruiken. Het heeft te maken met de de volgorde (links en rechts en boven naar beneden). Zie operators.precedence (ja, beetje vaag).
Verder denk ik dat als je een waarheidstabel wilt gebruiken dat je dan de boel om moet zetten naar binair e.d. dus daar wordt het langer van.
John schreef op 10.01.2010 13:30:
Ben ik het niet mee eens. De || en && operators horen gewoon bij de programmeertaal en iedereen die een klein beetje ervaring heeft, herkent ze direct en weet dus direct wat de code doet.Werkt OR en AND ook ? of werkt dat slechter of helemaal niet ?
Als het werkt dan bevorderd dat de leesbaarheid boven de cryptische || & tekens
Als het werkt dan bevorderd dat de leesbaarheid boven de cryptische || & tekens
Hoewel OR en AND zullen werken, is het niet gebruikelijk om dat binnen PHP toe te passen. Het zal eerder onduidelijkheid opleveren dan bovengenoemde methode als je bijvoorbeeld (om welke gekke reden dan ook) zou werken met variabelen $OR en $AND.
Zomaar een gek voorbeeldje...
ps. @Ooievaar: de werking van AND en OR en respectievelijk && en || is identiek. Daar zit geen verschil tussen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Blanche schreef op 10.01.2010 13:36:
ps. @Ooievaar: de werking van AND en OR en respectievelijk && en || is identiek. Daar zit geen verschil tussen.
Neen!
Er is wel een verschil. Verschil in volgorde. Die pagina waar ik naar toe link zou in het Nederlands iets als 'Operator voorrang' moeten heten.
Het gaat er over om de volgorde van belang. && is belangrijker dan AND. Dus als je && en AND door elkaar gebruikt gaat het erom welke eerder is.
Er is dus wel degelijk een verschil. Met dat verschil kan je er dus ook voor zorgen dat je geen haakjes nodig hebt.
Zie ook deze comment op php.net.
En dit stond dus ook gewoon uitgelegd op operators.precedence.
Blanche: Je houdt teveel vast aan "oude waarden" met "horen gewoon bij de programmeertaal". Alle programmeertalen worden meer een meer beschrijvend en helder leesbaar en zelfs OOP. Over een tijdje zijn || en && deprecated. Juist daarom zijn AND en OR nu ook mogelijk in plaats van || &&. Jouw voorbeeld is leuk maar niet triviaal. "Iemand die een klein beetje ervaring heeft weet direct wat || en && betekenen" zeg je maar iemand die die ervaring niet heeft weet wel meteen wat AND en OR betekenen en doen, dus voordeel: leesbaarheid.
Ooievaar schreef op 10.01.2010 13:49:
Neen!
Er is wel een verschil. Verschil in volgorde. Die pagina waar ik naar toe link zou in het Nederlands iets als 'Operator voorrang' moeten heten.
Het gaat er over om de volgorde van belang. && is belangrijker dan AND. Dus als je && en AND door elkaar gebruikt gaat het erom welke eerder is.
Er is dus wel degelijk een verschil. Met dat verschil kan je er dus ook voor zorgen dat je geen haakjes nodig hebt.
Zie ook deze comment op php.net.
En dit stond dus ook gewoon uitgelegd op operators.precedence.
Blanche schreef op 10.01.2010 13:36:
ps. @Ooievaar: de werking van AND en OR en respectievelijk && en || is identiek. Daar zit geen verschil tussen.
Neen!
Er is wel een verschil. Verschil in volgorde. Die pagina waar ik naar toe link zou in het Nederlands iets als 'Operator voorrang' moeten heten.
Het gaat er over om de volgorde van belang. && is belangrijker dan AND. Dus als je && en AND door elkaar gebruikt gaat het erom welke eerder is.
Er is dus wel degelijk een verschil. Met dat verschil kan je er dus ook voor zorgen dat je geen haakjes nodig hebt.
Zie ook deze comment op php.net.
En dit stond dus ook gewoon uitgelegd op operators.precedence.
Ooievaar: je stelling is onjuist. De precedence is gelijk:
http://www.php.net/manual/en/language.operators.precedence.php
Left associativity means that the expression is evaluated from left to right, right associativity means the opposite.
Gewijzigd op 01/01/1970 01:00:00 door John D
John schreef op 10.01.2010 13:50:
Blanche: Je houdt teveel vast aan "oude waarden" met "horen gewoon bij de programmeertaal". Alle programmeertalen worden meer een meer beschrijvend en helder leesbaar en zelfs OOP. Over een tijdje zijn || en && deprecated. Juist daarom zijn AND en OR nu ook mogelijk in plaats van || &&.
Lees mijn bericht. Er is een verschil in voorrang. && gaat boven AND.
John schreef op 10.01.2010 13:53:
Ooievaar: je stelling is onjuist. De precedence is gelijk:
http://www.php.net/manual/en/language.operators.precedence.php
Ooievaar schreef op 10.01.2010 13:49:
Neen!
Er is wel een verschil. Verschil in volgorde. Die pagina waar ik naar toe link zou in het Nederlands iets als 'Operator voorrang' moeten heten.
Het gaat er over om de volgorde van belang. && is belangrijker dan AND. Dus als je && en AND door elkaar gebruikt gaat het erom welke eerder is.
Er is dus wel degelijk een verschil. Met dat verschil kan je er dus ook voor zorgen dat je geen haakjes nodig hebt.
Zie ook deze comment op php.net.
En dit stond dus ook gewoon uitgelegd op operators.precedence.
Blanche schreef op 10.01.2010 13:36:
ps. @Ooievaar: de werking van AND en OR en respectievelijk && en || is identiek. Daar zit geen verschil tussen.
Neen!
Er is wel een verschil. Verschil in volgorde. Die pagina waar ik naar toe link zou in het Nederlands iets als 'Operator voorrang' moeten heten.
Het gaat er over om de volgorde van belang. && is belangrijker dan AND. Dus als je && en AND door elkaar gebruikt gaat het erom welke eerder is.
Er is dus wel degelijk een verschil. Met dat verschil kan je er dus ook voor zorgen dat je geen haakjes nodig hebt.
Zie ook deze comment op php.net.
En dit stond dus ook gewoon uitgelegd op operators.precedence.
Ooievaar: je stelling is onjuist. De precedence is gelijk:
http://www.php.net/manual/en/language.operators.precedence.php
Bekijk even die pagina die je geeft. Lees die uitleg die er boven staat.
En dan de tabel bekijken.
&& staat hoger in de tabel dan AND
&& gaat voor AND.
Ik heb niet gezegd dat je het "door elkaar" moet gebruiken en ik raad dat zelfs altijd af!! Dat werkt juist optimaal verwarrend. Je probeert je gelijk te halen op verkeerde argumenten. Ik heb gesteld dat de leesbaarheid beter is wanneer je afstapt van het cryptische gedoe van || && en AND en OR gebruikt. Niet meer en niet minder.
Je hebt echter wel gelijk en dat geeft mij bovendien nog een extra reden om AND en OR af te raden. Die operators doen niet wat je zou verwachten, zie dit voorbeeld van php.net:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))
$g = true && false;
// The constant true is assigned to $h and then false is ignored
// Acts like: (($h = true) and false)
$h = true and false;
?>
// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))
$g = true && false;
// The constant true is assigned to $h and then false is ignored
// Acts like: (($h = true) and false)
$h = true and false;
?>
Waar je dus zou verwachten dat $h het resultaat van de expressie 'true and false' (dus false) bevat, krijgt $h de waarde true. Als je daar niet op bedacht bent, wordt het leuk debuggen!
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Ieder blijkbaar zijn eigen mening. Ik gebruik altijd OR en AND omdat ik dat veel duidelijker vind. Deze worden ook in diverse programmeertalen gebruikt.
SanThe: Dank and I rest my case!!
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
if($res = mysql_query($sql) && $continue) {
// Wordt uitgevoerd als query gelukt is en $continue TRUE is
}
if($res = mysql_query($sql) AND $continue) {
// Wordt uitgevoerd als query gelukt is, ongeacht de waarde van $continue!
}
?>
if($res = mysql_query($sql) && $continue) {
// Wordt uitgevoerd als query gelukt is en $continue TRUE is
}
if($res = mysql_query($sql) AND $continue) {
// Wordt uitgevoerd als query gelukt is, ongeacht de waarde van $continue!
}
?>
Ik houd het voorlopig gewoon bij || en && :-)
Je code moet dus zijn:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if(mysql_query($sql) && $continue) {
}
if(mysql_query($sql) AND $continue) {
}
?>
if(mysql_query($sql) && $continue) {
}
if(mysql_query($sql) AND $continue) {
}
?>
En die wordt in beide gevallen hetzelfde geevalueerd.
SanThe schreef op 10.01.2010 14:06:
Ieder blijkbaar zijn eigen mening. Ik gebruik altijd OR en AND omdat ik dat veel duidelijker vind. Deze worden ook in diverse programmeertalen gebruikt.
Kleine aanvulling: Ik gebruik in situaties die Blanche aangeeft dan ook altijd haakjes om de verschillende prioriteiten aan te geven.