रूबी में प्रश्न चिह्न ऑपरेटर का उद्देश्य क्या है?
कभी-कभी ऐसा प्रतीत होता है:
assert !product.valid?
कभी-कभी यह एक if
निर्माण में है।
रूबी में प्रश्न चिह्न ऑपरेटर का उद्देश्य क्या है?
कभी-कभी ऐसा प्रतीत होता है:
assert !product.valid?
कभी-कभी यह एक if
निर्माण में है।
जवाबों:
यह एक कोड शैली सम्मेलन है; यह इंगित करता है कि एक विधि एक बूलियन मान लौटाता है।
प्रश्न चिह्न विधि नाम के अंत में एक मान्य वर्ण है।
?
रूबी में कई अन्य उपयोग हैं (एक टर्नरी ऑपरेटर है, जो अपने ASCII पूर्णांक में एक चरित्र को परिवर्तित करता है test
, RegEx'es में उपयोग , आदि) जिनमें से कई यहां अन्य उत्तरों में शामिल हैं।
isEmpty()
, isDigit()
, आदि में रूबी, एक ही तरीके का लिखा जाएगा empty?
, और digit?
जो काफ़ी अच्छे IMO है।
is
हर समय उपयोग करता हूं । इस सुपर कोई प्रश्न चिह्न के बाद से स्विफ्ट से आने वाले के लिए भ्रमित किया जा सकता है वहाँ के लिए प्रयोग किया जाता है nullable
):
?
एक चरित्र के साथ भी ध्यान दें , के लिए ASCII वर्ण कोड लौटाएगाA
उदाहरण के लिए:
?F # => will return 70
वैकल्पिक रूप से रूबी 1.8 में आप कर सकते हैं:
"F"[0]
या रूबी में 1.9:
"F".ord
यह भी ध्यान रखें कि ?F
स्ट्रिंग वापस आ जाएगी "F"
, इसलिए कोड को कम करने के लिए, आप ?F.ord
रूबी 1.9 में भी उपयोग कर सकते हैं जैसा कि परिणाम प्राप्त होता है "F".ord
।
'F'
आपके उदाहरण में यह विधि नाम का सिर्फ एक हिस्सा है। रूबी में आप विधि नामों में विस्मयादिबोधक बिंदुओं का भी उपयोग कर सकते हैं!
रूबी में प्रश्न चिह्न का एक और उदाहरण टर्नरी ऑपरेटर होगा।
customerName == "Fred" ? "Hello Fred" : "Who are you?"
अपने उदाहरण में
product.valid?
वास्तव में एक फ़ंक्शन कॉल है और एक फ़ंक्शन कॉल करता है जिसका नाम है valid?
। कुछ प्रकार के "हालत के लिए परीक्षण" / बूलियन फ़ंक्शन में कन्वेंशन द्वारा फ़ंक्शन नाम के भाग के रूप में एक प्रश्न चिह्न है।
यह इंगित करने योग्य हो सकता है कि ?
s केवल विधि नामों में अनुमत हैं, चर नहीं। रूबी सीखने की प्रक्रिया में, मैंने मान लिया कि ?
एक बूलियन रिटर्न प्रकार निर्दिष्ट है इसलिए मैंने उन्हें ध्वज चर में जोड़ने की कोशिश की, जिससे त्रुटि हुई। इसने मुझे कुछ समय के लिए गलत तरीके से विश्वास दिलाया कि कुछ विशेष वाक्यविन्यास शामिल थे ?
।
प्रासंगिक: एक चर नाम किसी विधि नाम के साथ समाप्त क्यों नहीं हो सकता?
मेरा मानना है कि यह केवल उन चीजों के लिए एक सम्मेलन है जो बूलियन हैं। " IsValid
" कहने जैसा थोड़ा ।
कर्नेल # परीक्षण से परीक्षण विधि के पहले तर्क के साथ उपयोग करना भी एक सामान्य सम्मेलन है
irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true
test
, के ?d
लिए एक शॉर्टकट है "d"
। test
एक-चर स्ट्रिंग को इसके पहले तर्क के रूप में लेता है, इसलिए आप इसे test ?d, "/dev"
या के साथ कॉल कर सकते हैं test "d", "/dev"
।