विधि के नाम अपर-केस और छोटे अक्षरों, संख्या हो सकती है, _
रेखांकित और punctation संकेत !
, ?
, =
।
एक विधि का नाम किसी संख्या से शुरू नहीं हो सकता है, और वर्ण !
, ?
और =
केवल अंत में दिखाई दे सकते हैं।
गैर-ASCII वर्ण विधि विधि में उपयोग किए जा सकते हैं, लेकिन इससे बहुत भ्रमित परिस्थितियां हो सकती हैं और सामान्य अभ्यास नहीं होना चाहिए।
यह एक अच्छा अभ्यास है, जबकि अनिवार्य नहीं है, कम नाम वाले चरित्र के साथ विधि नाम शुरू करना, क्योंकि पूंजी अक्षरों से शुरू होने वाले नाम रूबी में स्थिरांक हैं। यह अभी भी एक विधि के लिए एक निरंतर नाम का उपयोग करने के लिए संभव है, लेकिन आप क्योंकि interpeter देखो-अप करना होगा एक निरंतर के रूप में नाम के लिए, कोष्ठकों के बिना यह आह्वान करने के लिए सक्षम नहीं होगा:
def Capital
nil
end
Capital # NameError: uninitialized constant Capital
Capital() # => nil
कुछ बहुत ही व्यापक रूप से और लगातार सम्मेलनों इस्तेमाल किया जब परिभाषित करने विधि नाम हैं:
विधि नाम, नीचे मामले भरे हुए हैं अंडरस्कोर से _
नाम में शब्दों के लिए विभाजक के रूप में (जैसे Math::sqrt
, Array#each_index
, ...)।
विधेय एक प्रश्न चिह्न ?
के रूप में अंतिम वर्ण (जैसे कि Array#empty?
, Hash#has_key?
, ...)। भविष्यवाणी करते हैं कि आमतौर पर बूलियन मान वापस आते हैं, यह हमेशा मामला नहीं है: इन विधियों को केवल nil
या false
वापस करने की आवश्यकता है यदि भविष्यवाणी गलत है, अन्यथा अन्य मूल्य (उदाहरण के लिए File::size?
nil
देता है यदि फ़ाइल मौजूद नहीं है, तो आकार का आकार अन्यथा Integer
के रूप में फ़ाइल करें)।
वे ऑब्जेक्ट्स जो उस ऑब्जेक्ट की स्थिति को संशोधित करते हैं जिस पर उन्हें बुलाया जाता है, या जिनके असामान्य व्यवहार में अंतिम चरित्र के रूप में विस्मयादिबोधक चिह्न !
है; इन तरीकों को कभी-कभी म्यूटेटर कहा जाता है क्योंकि वे आमतौर पर अन्य विधियों के विनाशकारी या इन-प्लेस संस्करण होते हैं (उदा। , Array#slice!
, ...)।
Setters बराबर के चिह्न =
के रूप में अंतिम वर्ण (जैसे Array#[]=
, ...) है; रूबी interpeter सेटर तरीकों में से invokation के लिए वाक्यात्मक चीनी प्रदान करता है:
a = [4, 5, 6]
a[0] = 3 # Shorthand for a.[]=(0, 3)
रूबी भी विधि नाम के रूप में ऑपरेटर प्रतीक का उपयोग ऑपरेटरों को परिभाषित करने की अनुमति देता है:
╔═══════════════════════════╦═════════════════════════════════════════════╦═══════╗
║ Operators (by precedence) ║ Operations ║ Arity ║
╠═══════════════════════════╬═════════════════════════════════════════════╬═══════╣
║ ! ~ + ║ Boolean NOT, bitwise complement, unary plus ║ 1 ║
║ ║ (define with method name [email protected], Ruby 1.9+) ║ ║
║ ║ ║ ║
║ ** ║ Exponentiation ║ 2 ║
║ ║ ║ ║
║ - ║ Unary minus (define with method name [email protected]) ║ 1 ║
║ ║ ║ ║
║ */% ║ Multiplication, division, modulo ║ 2 ║
║ ║ ║ ║
║ + - ║ Addition, subtraction ║ 2 ║
║ ║ ║ ║
║ << >> ║ Bitwise shift ║ 2 ║
║ ║ ║ ║
║ & ║ Bitwise AND ║ 2 ║
║ ║ ║ ║
║ |^ ║ Bitwise OR, Bitwise XOR ║ 2 ║
║ ║ ║ ║
║ < <= => > ║ Ordering ║ 2 ║
║ ║ ║ ║
║ == === != =~ !~ <=> ║ Equality, pattern matching, comparison ║ 2 ║
╚═══════════════════════════╩═════════════════════════════════════════════╩═══════╝
एकल ऑपरेटर तरीके हैं कोई तर्क पारित नहीं किया; बाइनरी ऑपरेटर विधियों को एक तर्क पारित किया जाता है, और इस पर और self
पर संचालित होता है।
ऑपरेटरों की धैर्य का सख्ती से पालन करना महत्वपूर्ण है; जबकि ऑपरेटर विधियों को एक अलग धैर्य के साथ परिभाषित करना संभव है (उदा। +
विधि जो दो तर्क लेती है), रूबी आपको ऑपरेटर सिंटैक्स के साथ विधि को कॉल करने की अनुमति नहीं देगी (हालांकि यह डॉट सिंटैक्स के साथ काम करेगी)।
जितना संभव हो सके ऑपरेटरों के मूल अर्थशास्त्र का पालन करना अच्छा अभ्यास है: यह किसी ऐसे व्यक्ति के लिए सहज होना चाहिए जो ऑपरेटर के मूल अर्थ को जानता है कि यह उपयोगकर्ता परिभाषित कक्षाओं के साथ कैसे काम करता है।
भाषा विशेष, गैर-ऑपरेटर, []
विधि के लिए सिंटैक्टिक चीनी भी प्रदान करती है जो आमतौर पर सरणी और हैश मानों तक पहुंचने के लिए उपयोग की जाती है। []
विधि मनमानी धैर्य के साथ परिभाषित किया जा सकता है।
तालिका में हर द्विआधारी ऑपरेटर, आदेश, समानता, तुलना और पैटर्न मिलान को छोड़कर के लिए, रूबी भी संक्षिप्त काम के लिए आशुलिपि प्रदान करता है (उदाहरण के लिए x += y
x = x + y
तक विस्तारित है); आप उन्हें विधियों के रूप में परिभाषित नहीं कर सकते हैं, लेकिन आप अपने व्यवहार को उन ऑपरेटरों को परिभाषित कर सकते हैं जिन पर वे आधारित हैं।
इन वर्णों में से कोई भी सामान्य विधि नामों के अंदर उपयोग नहीं किया जा सकता है (उदा। do&print
या start-up
वैध विधि नाम नहीं हैं)।
शानदार उत्तर! एक छोटे से नोट के रूप में: यह वास्तविक तरीकों ('' '' के साथ) झूठी ('शून्य 'या' झूठी') या truethy (बाकी सब कुछ) मान वापस करने के लिए प्रथागत है, आवश्यक 'सत्य' और 'झूठी' नहीं है। वापसी मूल्य का उद्देश्य 'if' कथन में किया जाना है, जहां यह व्यवहार करता है जैसे कि यह 'सत्य' और 'झूठा' था, लेकिन वास्तविक वापसी मूल्य अक्सर इच्छित विधि इंटरफ़ेस का हिस्सा नहीं होता है, केवल यह सत्य या गलत संपत्ति है। –
सलाह के लिए धन्यवाद, मैंने तदनुसार संपादित किया। –
कुछ वर्ण भी हैं जिन्हें केवल संपूर्ण विधि नाम के रूप में उपयोग किया जा सकता है, यानी आप + * **/(यदि आप उन ऑपरेटरों को अधिभारित कर रहे हैं) नामक विधियों को परिभाषित कर सकते हैं, लेकिन foo + bar –