Kortere if mogelijk?
Kan dit korter?
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
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 ) )
?>
je zou eventueel een waarheidstabel kunnen maken.. en op basis hiervan kijken of het korten kan of niet.
'Yearupie:
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' ) )
?>
wat is een waarheidstabel
ik bedoel eigenlijk meer of het logisch gezien korter kan worden opgeschreven omdat ik nu drie OR's gebruik
ik bedoel eigenlijk meer of het logisch gezien korter kan worden opgeschreven omdat ik nu drie OR's gebruik
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.
'Gerben:
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'))
?>
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
'Gerben:
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:
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:
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:
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:
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:
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:
Ooievaar: je stelling is onjuist. De precedence is gelijk:
http://www.php.net/manual/en/language.operators.precedence.php
'Ooievaar:
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:
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.
@Ooievaar: dat is alleen van belang in de IMO onlogische situatie dat je && en AND door elkaar gebruikt. Waarom zou je dat willen doen?
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:
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!
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!!
Natuurlijk is ook dit een kwestie van smaak en gebruik van methoden waaraan je gewend bent. Alleen bij het gebruik van AND en OR zul je er dan dus wel voor moeten zorgen dat je bedacht bent op de 'functionaliteit' die ik in mijn vorige post al aangaf. Het werkt niet altijd zoals je zou verwachten!
Ik houd het voorlopig gewoon bij || en && :-)
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 && :-)
Blanche: je beide voorbeelden zou ik sowieso al nooit gebruiken. Ik vind het nogal gezocht, de $res is overbodig: mysql_query() returns TRUE on success.
Je code moet dus zijn:
En die wordt in beide gevallen hetzelfde geevalueerd.
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:
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.




