php ऑपरेटर के रूप में 'और' बनाम '&&'




coding-style operators (8)

मेरे पास एक कोडबेस है जहां डेवलपर्स ने && और || बजाय AND और OR का उपयोग करने का निर्णय लिया है ।

मुझे पता है कि ऑपरेटर की प्राथमिकता में एक अंतर है ( && पहले and आगे जाता है), लेकिन दिए गए ढांचे के साथ ( PrestaShop सटीक होना) यह स्पष्ट रूप से एक कारण नहीं है।

आपके द्वारा कौन सा संस्करण उपयोग किया जा रहा है? and && से अधिक पठनीय है? या कोई फर्क नहीं पड़ता है?


प्राथमिकता && और ( और && की तुलना में अधिक प्राथमिकता है) के बीच भिन्न होती है, जो कुछ टर्नरी ऑपरेटर के साथ मिलकर भ्रम का कारण बनता है। उदाहरण के लिए,

$predA && $predB ? "foo" : "bar"

जबकि एक स्ट्रिंग वापस करेगा

$predA and $predB ? "foo" : "bar"

एक बुलियन लौटाएगा।


मुझे "और" - "&&" - "&" के बीच के अंतर को समझाएं।

"&&" और "और" दोनों तार्किक और संचालन हैं और वे वही काम करते हैं, लेकिन ऑपरेटर प्राथमिकता अलग है।

ऑपरेटर की प्राथमिकता (प्राथमिकता) निर्दिष्ट करती है कि कैसे "कसकर" यह दो अभिव्यक्तियों को एक साथ जोड़ता है। उदाहरण के लिए, अभिव्यक्ति 1 + 5 * 3 में, उत्तर 16 है और 18 नहीं है क्योंकि गुणा ("*") ऑपरेटर के अतिरिक्त ("+") ऑपरेटर की तुलना में अधिक प्राथमिकता है।

उन्हें एक ही ऑपरेशन में एक साथ मिलाकर, आपको कुछ मामलों में अप्रत्याशित परिणाम मिल सकते हैं, मैं हमेशा && का उपयोग करने की सलाह देता हूं, लेकिन यह आपकी पसंद है।

दूसरी तरफ "और" थोड़ा सा और ऑपरेशन है । इसका उपयोग पूर्णांक मान के भीतर विशिष्ट बिट्स के मूल्यांकन और हेरफेर के लिए किया जाता है।

उदाहरण यदि आप करते हैं (14 और 7) परिणाम 6 होगा।

7   = 0111
14  = 1110
------------
    = 0110 == 6

चूंकि and इसकी तुलना में कम प्राथमिकता है = आप इसे शर्त असाइनमेंट में उपयोग कर सकते हैं:

if ($var = true && false) // Compare true with false and assign to $var
if ($var = true and false) // Assign true to $var and compare $var to false

आपके द्वारा कौन सा संस्करण उपयोग किया जा रहा है?

यदि विशेष कोडबेस के लिए कोडिंग मानक मैं कोड लिख रहा हूं यह निर्दिष्ट करने के लिए कि कौन से ऑपरेटर का उपयोग किया जाना चाहिए, तो मैं निश्चित रूप से इसका उपयोग करूंगा। यदि नहीं, और कोड निर्देशित करता है कि किस का उपयोग किया जाना चाहिए (अक्सर नहीं, आसानी से काम किया जा सकता है) तो मैं इसका उपयोग करूंगा। अन्यथा, शायद &&

'और' से अधिक पढ़ने योग्य है?

क्या यह आपके लिए अधिक पठनीय है । जवाब हां और नहीं है ऑपरेटर के चारों ओर कोड और वास्तव में इसे पढ़ने वाले व्यक्ति सहित कई कारकों के आधार पर!

|| ~ अंतर है?

हाँ। के लिए तार्किक ऑपरेटरों देखें || और ~ लिए bitwise ऑपरेटरों ~


मुझे लगता है कि यह स्वाद का विषय है, हालांकि (गलती से) उन्हें मिलाकर कुछ अवांछित व्यवहार हो सकते हैं:

true && false || false; // returns false

true and false || false; // returns true

इसलिए, && और || का उपयोग करना उनके लिए सुरक्षित है क्योंकि उनके पास सबसे ज्यादा प्राथमिकता है। पठनीयता के संबंध में, मैं कहूंगा कि ये ऑपरेटर सार्वभौमिक हैं।

अद्यतन : टिप्पणियों के बारे में कह रहे हैं कि दोनों परिचालन झूठे लौटते हैं ... वास्तव में, उपर्युक्त कोड कुछ भी वापस नहीं करता है, मुझे अस्पष्टता के लिए खेद है। स्पष्टीकरण के लिए: दूसरे मामले में व्यवहार इस बात पर निर्भर करता है कि ऑपरेशन का परिणाम कैसे उपयोग किया जाता है। देखें कि ऑपरेटर की प्राथमिकता यहां कैसे खेलती है:

var_dump(true and false || false); // bool(false)

$a = true and false || false; var_dump($a); // bool(true)

कारण $a === true है क्योंकि किसी भी लॉजिकल ऑपरेटर पर असाइनमेंट ऑपरेटर की प्राथमिकता है, जैसा कि पहले से ही अन्य उत्तरों में बहुत अच्छी तरह से समझाया गया है।


यहां एक छोटा काउंटर उदाहरण दिया गया है:

$a = true;
$b = true;
$c = $a & $b;
var_dump(true === $c);

उत्पादन:

bool(false)

मैं कहूंगा कि इस प्रकार का टाइपो खतरनाक समस्याओं का कारण बनने की अधिक संभावना है (वैसे ही = बनाम == ) और adn / ro typos की तुलना में बहुत कम होने की संभावना है जो वाक्यविन्यास त्रुटियों के रूप में ध्वजांकित होगा। मुझे भी पढ़ने और / या पढ़ने के लिए बहुत आसान है। एफडब्ल्यूआईडब्ल्यू, अधिकांश PHP ढांचे जो प्राथमिकता व्यक्त करते हैं (अधिकतर नहीं) निर्दिष्ट करते हैं और / या। मैंने कभी भी वास्तविक, गैर-प्रदूषित मामले में भाग नहीं लिया है जहां यह महत्वपूर्ण होगा।


सुरक्षा के लिए, मैं हमेशा अपनी तुलना को संतुलित करता हूं और उन्हें बाहर निकाल देता हूं। इस तरह, मुझे ऑपरेटर प्राथमिकता पर भरोसा नहीं करना है:

if( 
    ((i==0) && (b==2)) 
    || 
    ((c==3) && !(f==5)) 
  )

जिस भाषा का आप उपयोग कर रहे हैं उसके आधार पर, आम तौर पर यह && और || का उपयोग करने के लिए बेहतर अभ्यास है पाइथन जैसी भाषाओं को छोड़कर, and कहां and और इसके बजाय उपयोग किया जाता है और && और || मौजूद नहीं है।







operators