रूबी 2.3 और 2.4 में नई सुविधाएँ
नई भाषा सुविधाओं के साथ रहना अच्छा है जो आपके गोल्फ खेल में मदद करेंगे। नवीनतम रूबी में कुछ महान हैं।
रूबी 2.3
सुरक्षित नेविगेशन ऑपरेटर: &.
जब आप एक विधि कहते हैं जो वापस आ सकती है nil
लेकिन आप अतिरिक्त विधि कॉल को चेन करना चाहते हैं यदि यह नहीं है, तो आप nil
मामले को संभालने वाले बाइट्स को बर्बाद करते हैं :
arr = ["zero", "one", "two"]
x = arr[5].size
# => NoMethodError: undefined method `size' for nil:NilClass
x = arr[5].size rescue 0
# => 0
"सुरक्षित नेविगेशन ऑपरेटर" अगर पूरी तरह से अभिव्यक्ति के लिए एक रिटर्न nil
और रिटर्न देता है तो विधि कॉल की श्रृंखला को रोक देता है nil
:
x = arr[5]&.size || 0
# => 0
Array#dig
और Hash#dig
नेस्टेड तत्वों तक गहरी पहुंच, एक अच्छा संक्षिप्त नाम:
o = { foo: [{ bar: ["baz", "qux"] }] }
o.dig(:foo, 0, :bar, 1) # => "qux"
रिटर्न nil
अगर यह एक मृत अंत हिट:
o.dig(:foo, 99, :bar, 1) # => nil
Enumerable#grep_v
Enumerable#grep
सभी तत्वों का व्युत्क्रम सभी तत्वों से मिलता है जो दिए गए तर्क से मेल नहीं खाता (तुलना में ===
)। जैसे grep
, अगर किसी ब्लॉक को दिया जाता है तो उसका परिणाम बदले में दिया जाता है।
(1..10).grep_v 2..5 # => [1, 6, 7, 8, 9, 10]
(1..10).grep_v(2..5){|v|v*2} # => [2, 12, 14, 16, 18, 20]
Hash#to_proc
एक प्रोक लौटाता है जो दी गई कुंजी के लिए मान देता है, जो बहुत काम आ सकता है:
h = { N: 0, E: 1, S: 2, W: 3 }
%i[N N E S E S W].map(&h)
# => [0, 0, 1, 2, 1, 2, 3]
रूबी 2.4
रूबी 2.4 अभी तक बाहर नहीं है, लेकिन यह जल्द ही होगा और इसमें कुछ शानदार फीचर होंगे। (जब यह रिलीज़ हो जाएगा तो मैं इस पोस्ट को डॉक्स के कुछ लिंक के साथ अपडेट करूंगा।) मैंने इस महान ब्लॉग पोस्ट में इनमें से अधिकांश के बारे में सीखा ।
Enumerable#sum
अब और नहीं arr.reduce(:+)
। अब आप बस कर सकते हैं arr.sum
। यह एक वैकल्पिक प्रारंभिक मान तर्क लेता है, जो न्यूमेरिक तत्वों ( [].sum == 0
) के लिए 0 से चूकता है । अन्य प्रकारों के लिए आपको एक प्रारंभिक मूल्य प्रदान करना होगा। यह एक ब्लॉक को भी स्वीकार करता है जो प्रत्येक तत्व को जोड़ने से पहले लागू किया जाएगा:
[[1, 10], [2, 20], [3, 30]].sum {|a,b| a + b }
# => 66
Integer#digits
यह कम से कम सबसे बड़ी महत्व के क्रम में संख्या के अंकों की एक सरणी देता है:
123.digits # => [3, 2, 1]
की तुलना में, कहते हैं 123.to_s.chars.map(&:to_i).reverse
, यह बहुत अच्छा है।
एक बोनस के रूप में, यह एक वैकल्पिक मूलांक तर्क लेता है:
a = 0x7b.digits(16) # => [11, 7]
a.map{|d|"%x"%d} # => ["b", "7"]
Comparable#clamp
टिन पर दिये गये निर्देशों का पालन करो:
v = 15
v.clamp(10, 20) # => 15
v.clamp(0, 10) # => 10
v.clamp(20, 30) # => 20
चूंकि यह तुलनीय है, आप इसे किसी भी वर्ग के साथ उपयोग कर सकते हैं जिसमें तुलना, उदाहरण के लिए:
?~.clamp(?A, ?Z) # => "Z"
String#unpack1
2-बाइट से अधिक बचत .unpack(...)[0]
:
"👻💩".unpack(?U) # => [128123]
"👻💩".unpack(?U)[0] # => 128123
"👻💩".unpack1(?U) # => 128123
के लिए प्रेसिजन तर्क Numeric#ceil
, floor
औरtruncate
Math::E.ceil(1) # => 2.8
Math::E.floor(1) # => 2.7
(-Math::E).truncate(1) # => -2.7
सशर्त में कई कार्य
यह रूबी के पुराने संस्करणों में एक त्रुटि उठाता है, लेकिन 2.4 में अनुमति है।
(a,b=1,2) ? "yes" : "no" # => "yes"
(a,b=nil) ? "yes" : "no" # => "no"