कभी-कभी मुझे रूबी में ऐसे तरीके दिखाई देते हैं जिनमें "?" तथा "!" उनके अंत में, जैसे:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
मैं सोच रहा था कि उनका उद्देश्य क्या है? क्या वे सिर्फ सिंटेक्स गन्ना कर रहे हैं?
कभी-कभी मुझे रूबी में ऐसे तरीके दिखाई देते हैं जिनमें "?" तथा "!" उनके अंत में, जैसे:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
मैं सोच रहा था कि उनका उद्देश्य क्या है? क्या वे सिर्फ सिंटेक्स गन्ना कर रहे हैं?
जवाबों:
पठनीयता के लिए यह "सिर्फ गन्ना बनाना" है, लेकिन उनके सामान्य अर्थ हैं:
!कुछ स्थायी या संभावित खतरनाक परिवर्तन करने के लिए समाप्त होने वाले तरीके ; उदाहरण के लिए:
Enumerable#sortजगह में क्रमबद्ध करते हुए वस्तु का एक क्रमबद्ध संस्करण Enumerable#sort!देता है।ActiveRecord::Base#saveयदि ActiveRecord::Base#save!कोई अपवाद नहीं है, तो बचत विफल हो जाती है।Kernel::exitस्क्रिप्ट से बाहर निकलने का कारण बनता है, जबकि Kernel::exit!ऐसा तुरंत होता है, किसी भी निकास हैंडलर को दरकिनार कर देता है।?एक बूलियन के बदले में समाप्त होने वाले तरीके , जो एक वाक्य की तरह कोड को और भी अधिक सहज रूप से प्रवाहित करता है - if number.zero?"यदि संख्या शून्य है" जैसे पढ़ता है, लेकिन if number.zeroबस अजीब लगता है।आपके उदाहरण में, name.reverseएक उलट स्ट्रिंग का मूल्यांकन करता है, लेकिन केवल name.reverse!पंक्ति के बाद ही nameचर में वास्तव में उलटा नाम होता है। name.is_binary_data?ऐसा लगता है कि " nameबाइनरी डेटा है?"।
Array#clearउदाहरण के लिए देखें । यह सरणी को साफ करता है। सरणी को साफ़ करना स्वाभाविक रूप से इसे बदल देता है। इस बारे में कुछ भी आश्चर्यजनक नहीं है, नाम पहले से ही स्पष्ट है, इसलिए: कोई धमाका नहीं। रूबी-forum.com/topic/176830#773946 देखें ।
प्रश्न चिह्न इंगित करता है कि विधि बूलियन लौटाती है। पहले से ही यहाँ उत्तर दिया गया है:
रूबी में प्रश्न चिह्न ऑपरेटर का क्या अर्थ है?
बैंग इंगित करता है कि विधि ऑब्जेक्ट पर ही कार्य करती है। पहले से ही यहाँ उत्तर दिया गया है:
रूबी विधियों में विस्मयादिबोधक चिह्न का उपयोग क्यों किया जाता है?
रूबी में ?इसका मतलब है कि विधि एक बूलियन को वापस करने जा रही है और !उस वस्तु को संशोधित करती है जिसे यह कहा जाता था। वे कोड को देखते समय पठनीयता में सुधार करते हैं।
इसके विपरीत - मुझे लगता है - प्रोग्रामिंग भाषाओं के बहुमत ...
रूबी, विधियों को प्रश्न चिह्न या विस्मयादिबोधक चिह्न के साथ समाप्त करने की अनुमति है।
अधिवेशन द्वारा, ऐसे तरीके जो प्रश्नों का उत्तर देते हैं (अर्थात # खाली करें; यदि रिसीवर खाली है तो सही है) प्रश्नवाचक चिन्ह में समाप्त होता है।
विस्मयकारी रूप से "खतरनाक" तरीके (अर्थात स्वयं को या तर्क को संशोधित करने वाले तरीके, निकास! आदि) सम्मेलन के अंत में विस्मयादिबोधक चिह्न के साथ।
से: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ , सेक्शन मजेदार विधि नाम
?को विधेय पद्धति कहा जाता है।
खबरदार, यह हमेशा मामला नहीं है। उदाहरण के लिए, Ruby Array # concat http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concat ।
जहां आप बुरी तरह से जल सकते हैं, कुछ ऐसा है MyActiveRecordModel.column_names.concat([url])। MyActiveRecordModel से संबंधित बाद की कॉलें MyActiveRecordModel के लिए 'url' के कॉलम को देखने और फेंकने का प्रयास करेंगी।
इसके बजाय आपको कॉनसैट करने से पहले इसे क्लोन करना होगा। सौभाग्य से मेरे टेस्ट सूट ने इसे पकड़ लिया, लेकिन .. सर!