2010-10-17 33 views
61

रुबी सीखते समय, मैंने देखा कि सभी उदाहरणों में कोई अर्धविराम नहीं है। मुझे पता है कि यह तब तक ठीक है जब तक कि प्रत्येक कथन अपनी लाइन पर न हो। लेकिन मैं क्या सोच रहा हूं, आप रूबी में अर्धविराम का उपयोग कर सकते हैं?क्या आप रूबी में अर्धविराम का उपयोग कर सकते हैं?

अग्रिम धन्यवाद!

+0

और वहां रूबी लोगों के लिए: क्या कोई अर्धविराम का उपयोग कर सकता है? ऐसा करने में क्या फायदा है? मुझे पता है कि जब मैं रूबी कोड लिखता हूं, तो मैं उन्हें दोबारा जोड़ता हूं। –

+0

@Andy अर्धविराम का उपयोग न करें, जब तक कि आप एक पंक्ति पर एकाधिक कथन नहीं डालना चाहते हैं, [आपको वैसे भी करना चाहिए] (http://www.caliban.org/ruby/rubyguide.shtml#semicolon)। –

+0

@Yaser: मुझे अर्धविराम की आवश्यकता है।क्योंकि जब अर्धविराम के बिना लाइन पर कोई फ़ंक्शन होता है, तो मेरे लिए vim autoindents, जो मैं नहीं करना चाहता। –

उत्तर

85

हां।

रूबी हमें अलग-अलग आदेशों के लिए किसी भी चरित्र का उपयोग करने की आवश्यकता नहीं है, जब तक कि हम एक ही पंक्ति पर कई कथनों को एक साथ जोड़ना नहीं चाहते हैं। इस मामले में, एक अर्धविराम (;) विभाजक के रूप में प्रयोग किया जाता है।

स्रोत: http://articles.sitepoint.com/article/learn-ruby-on-rails/2

+1

बहुत बढ़िया, धन्यवाद! –

+0

लेकिन क्या मुझे अर्धविराम का उपयोग करना चाहिए? – rocketspacer

1

हां, अर्धविरामों को रूबी में कथन विभाजक के रूप में उपयोग किया जा सकता है।

हालांकि मेरी विशिष्ट शैली (और सबसे कोड मैं देख रहा हूँ) प्रत्येक पंक्ति पर कोड की एक पंक्ति डालता है, इसलिए ; के उपयोग बहुत अनावश्यक है।

26

एक तरफ ध्यान दें के रूप में, यह आपके (जे) में अर्द्ध कोलन उपयोग करने के लिए आईआरबी सत्र को प्रिंट एक हास्यास्पद लंबे अभिव्यक्ति मूल्य से बचने के लिए, उदाहरण के लिए उपयोगी है

irb[0]> x = (1..1000000000).to_a 
[printout out the whole array] 

बनाम

irb[0]> x = (1..100000000).to_a; 1 
1 

अच्छा विशेष रूप से अपने MyBigORMObject.find_all कॉल के लिए।

2

उस अर्धविराम में आने वाली एकमात्र स्थिति उपयोगी है जब attr_reader के लिए उपनाम विधियों की घोषणा करते हैं।

निम्नलिखित कोड पर विचार करें:

attr_reader :property1_enabled 
attr_reader :property2_enabled 
attr_reader :property3_enabled 

alias_method :property1_enabled?, :property1_enabled 
alias_method :property2_enabled?, :property2_enabled 
alias_method :property3_enabled?, :property3_enabled 

अर्धविराम का उपयोग करके हम इस नीचे 3 लाइनों को कम कर सकते हैं:

attr_reader :property1_enabled; alias_method :property1_enabled?, :property1_enabled 
attr_reader :property2_enabled; alias_method :property2_enabled?, :property2_enabled 
attr_reader :property3_enabled; alias_method :property3_enabled?, :property3_enabled 

मेरे लिए यह वास्तव में दूर पठनीयता से ले करता है।

3

अर्धविराम: हाँ।

irb(main):018:0> x = 1; c = 0 
=> 0 
irb(main):019:0> x 
=> 1 
irb(main):020:0> c 
=> 0 

तुम भी एक एक लाइनर पाश में अर्धविराम से अलग कई आदेशों

irb(main):021:0> (c += x; x += 1) while x < 10 
=> nil 
irb(main):022:0> x 
=> 10 
irb(main):023:0> c 
=> 45 
0

यह इस उदाहरण में ब्लॉक वाक्य रचना की रक्षा करने के लिए अर्धविराम का उपयोग करने के लिए दिलचस्प हो सकता है चला सकते हैं:

a = [2, 3 , 1, 2, 3].reduce(Hash.new(0)) { |h, num| h[num] += 1; h } 

आप कोड की एक पंक्ति बनाए रखते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे