if statement - क्यों कई मूल्यों के खिलाफ एक चर की गैर-समानता जांच हमेशा सही देता है?




if-statement language-agnostic (2)

मेरे पास मेरे प्रोग्राम में एक चर v है, और यह मूल्यों के सेट से कोई भी मान ले सकता है

"a", "b", "c", ..., "z"

और मेरा लक्ष्य केवल कुछ वक्तव्य निष्पादित करना है, जब v "x" , "y" या "z"

मैं प्रयास कर चुका हूं,

  • सी-जैसी भाषाओं के लिए (जहां समानता ऑपरेटर वास्तविक स्ट्रिंग मानों की तुलना करते हैं, जैसे सी # , जावास्क्रिप्ट , पीएचपी )

    if (v != "x" || v != "y" || v != "z")
    {
        // the statements I want to be executed
        // if v is neither "x", nor "y", nor "z"
    }
  • पास्कल जैसी भाषाओं के लिए (उदाहरण के लिए पीएलएसएकल )

    IF (v != 'x' OR v != 'y' OR v != 'z') THEN
        -- the statements I want to be executed
        -- if v is neither "x", nor "y", nor "z"
    END IF;

अगर कंडीशन के अंदर स्थितियां हमेशा निष्पादित होती हैं क्या मैं गलत हूं?


आप ऐसा कुछ इस्तेमाल कर सकते हैं, PHP के लिए:

if(strpos('xyz',$v[0])===false)//example 1
//strpos returns false when the letter isn't in the string
//returns the position (0 based) of the substring
//we must use a strict comparison to see if it isn't in the substring

if(!in_array($v[0],array('x','y','z')))//example 2

//example 3
$out=array('x'=>1,'y'=>1,'z'=>1); //create an array
if(!$out[$v[0]]) //check if it's not 1

if(!preg_match('/^[xyz]$/',$v))//example 4, using regex

if(str_replace(array('x','y','z'),'',$v[0]))//example 5


if(trim($v[0],'xyz'))//example 6

जावास्क्रिप्ट के लिए:

if(~'xyz'.search(v[0]))//example 1(.indexOf() works too)

if(!(v[0] in {x:0,y:0,z:0}))//example 2

if(~['x','y','z'].indexOf(v[0]))//example 3, incompatible with older browsers.

if(!/^[xyz]$/.match(v))//example 4

if(v.replace(/^[xyz]$/))//example 5

MySQL के लिए:

Select not locate(@v,'xyz'); -- example 1

select @v not in ('x','y','z'); -- example 2

-- repetition of the same pattern for the others

सी के लिए:

if(!strstr('xyz',v))//example 1, untested

अधिक तरीके हैं, मैं बस बहुत आलसी हूं।

अपनी कल्पना का प्रयोग करें और सिर्फ एक लिखो जिसे आप अधिक पसंद करते हैं!


उपयोग करें && / AND / and , नहीं || / OR / or :

v != "x" && v != "y" && v != "z"


अगर एक ब्लॉक हमेशा निष्पादित होता है, तो ब्लॉक के लिए शर्त हमेशा true मूल्यांकन करती है true तार्किक अभिव्यक्ति गलत होना चाहिए।

आइए हम v != "x" || v != "y" || v != "z" विचार करें v != "x" || v != "y" || v != "z" v != "x" || v != "y" || v != "z" v != "x" || v != "y" || v != "z" के प्रत्येक मान के लिए v != "x" || v != "y" || v != "z"

  • जब v = "x" ,

    v != "x" हो जाता है "x" != "x" , जो देता है वह गलत है
    v != "y" हो जाता है "x" != "y" , जो देता है सच है
    v != "z" "x" != "y" v != "z" हो जाता है "x" != "y" , जो देता है सच है

    अभिव्यक्ति false || true || true मूल्यांकन करता false || true || true false || true || true false || true || true , जो सच है


  • जब v = "y" , अभिव्यक्ति हो जाता है

    "y" != "x" || "y" != "y" || "y" != "z"
    

    या true || false || true true || false || true true || false || true , जो सच है


  • जब v = "z" , अभिव्यक्ति हो जाता है

    "z" != "x" || "z" != "y" || "z" != "z"
    

    या true || true || false true || true || false true || true || false , जो सच है


  • v लिए किसी अन्य मूल्य के लिए, अभिव्यक्ति true || true || true मूल्यांकन करती true || true || true true || true || true true || true || true , जो सच है


वैकल्पिक रूप से, सत्य-तालिका पर विचार करें:

       │     A          B          C      │
  v    │  v != "x"   v != "y"   v != "z"  │  A || B || C
───────┼──────────────────────────────────┼──────────────
 "x"   │    false      true       true    │     true
 "y"   │    true       false      true    │     true
 "z"   │    true       true       false   │     true
other  │    true       true       true    │     true

जैसा कि आप देख सकते हैं, आपका तर्कसंगत अभिव्यक्ति हमेशा true मूल्यांकन करती है

आप क्या करना चाहते हैं, एक तार्किक अभिव्यक्ति पाते हैं जो true लिए मूल्यांकन करती true जब

(v is not "x") and (v is not "y") and (v is not "z")

सही निर्माण है,

  • सी-जैसी भाषाओं के लिए (उदाहरण के सी # , जावास्क्रिप्ट , पीएचपी )

    if (v != "x" && v != "y" && v != "z")
    {
        // the statements I want to be executed
        // if v is neither "x", nor "y", nor "z"
    }
  • पास्कल जैसी भाषाओं के लिए plsql

    IF (v != 'x' AND v != 'y' AND v != 'z') THEN
        -- the statements I want to be executed
        -- if v is neither "x", nor "y", nor "z"
    END IF;

मॉर्गन के कानून के अनुसार , अभिव्यक्ति को फिर से लिखा जा सकता है (सी वाक्यविन्यास का उपयोग करके)

!(v == "x" || v == "y" || v == "z")

अर्थ

not ((v is "x") or (v is "y") or (v is "z"))

यह तर्क थोड़ा और अधिक स्पष्ट बनाता है

कुछ भाषाओं में सेट में सदस्यता परीक्षण के लिए विशिष्ट निर्माण होते हैं, या आप सरणी / सूची संचालन का उपयोग कर सकते हैं।

  • एसक्यूएल : v NOT IN ('x', 'y', 'z')

  • जावास्क्रिप्ट : ["x", "y", "z"].indexOf(v) == -1

  • अजगर : v not in {"x", "y", "z"}





multiple-languages