चुनने के लिए दो आम शैलियों रहे हैं do endबनाम { }रूबी में ब्लॉक के लिए:
रूबी द्वारा पटरियों पर पहली और बहुत ही सामान्य शैली को लोकप्रिय बनाया गया था, और यह एकल बनाम बहु-पंक्ति के एक सरल नियम पर आधारित है:
{ }सिंगल-लाइन ब्लॉकों के लिए ब्रेसिज़ का उपयोग करें
do endमल्टी-लाइन ब्लॉकों के लिए उपयोग करें
यह समझ में आता है क्योंकि do-end एक-लाइनर में बुरी तरह से पढ़ता है, लेकिन मल्टी-लाइन ब्लॉक के लिए, }अपनी ही लाइन पर क्लोजिंग हैंग करना छोड़ना endमाणिक में उपयोग होने वाली हर चीज के साथ असंगत है , जैसे मॉड्यूल, क्लास और मेथड परिभाषाएं ( defआदि) ।) और नियंत्रण ढांचे ( if, while, case, आदि)
दूसरा, कम अक्सर देखा शैली अर्थ, या "के रूप में जाना जाता है Weirich ब्रेसिज़ ", देर से, महान rubyist जिम वेइरिच द्वारा प्रस्तावित:
do endप्रक्रियात्मक ब्लॉकों के लिए उपयोग करें
{ }कार्यात्मक ब्लॉकों के लिए ब्रेसिज़ का उपयोग करें
इसका मतलब यह है कि जब ब्लॉक को उसके वापसी मूल्य के लिए मूल्यांकन किया जाता है , तो इसे चेनेबल होना चाहिए, और {}ब्रेसिज़ विधि के लिए अधिक समझ में आता है।
दूसरी ओर, जब ब्लॉक का उसके दुष्प्रभावों के लिए मूल्यांकन किया जाता है , तो रिटर्न वैल्यू का कोई परिणाम नहीं होता है, और ब्लॉक सिर्फ कुछ "कर" रहा है, इसलिए यह जंजीर होने का कोई मतलब नहीं है।
सिंटैक्स में यह अंतर ब्लॉक के मूल्यांकन के बारे में दृश्य अर्थ बताता है, और आपको इसके वापसी मूल्य की परवाह करनी चाहिए या नहीं।
उदाहरण के लिए, यहां ब्लॉक का रिटर्न वैल्यू हर आइटम पर लागू होता है:
items.map { |i| i.upcase }
हालाँकि, यहाँ यह ब्लॉक के रिटर्न मान का उपयोग नहीं कर रहा है। यह प्रक्रियात्मक रूप से काम कर रहा है , और इसके साथ एक साइड-इफ़ेक्ट कर रहा है:
items.each do |item|
puts item
end
सिमेंटिक शैली का एक और लाभ यह है कि आपको ब्रेस को बदलने की ज़रूरत नहीं है, केवल अंत में ब्लॉक करने के लिए एक पंक्ति जोड़ी गई है।
अवलोकन के रूप में, संयोग से कार्यात्मक ब्लॉक अक्सर एक-लाइनर होते हैं, और प्रक्रियात्मक ब्लॉक (जैसे कॉन्फ़िगरेशन) बहु-पंक्ति होते हैं। इसलिए, वेइरिच शैली का अनुसरण रेल की शैली के समान ही दिखता है।