রুবি নতুন বৈশিষ্ট্য 2.3 এবং 2.4
নতুন গেমের বৈশিষ্ট্য যা আপনার গল্ফ গেমকে সহায়তা করবে সেগুলি দূরে থাকাই ভাল। সর্বশেষতম রুবিসে কয়েকটি দুর্দান্ত আছেন great
রুবি ২.৩
নিরাপদ নেভিগেশন অপারেটর: &.
আপনি যখন এমন কোনও পদ্ধতি কল করেন যা ফিরে আসতে পারে 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-returns সব উপাদান আছে যা দেওয়া যুক্তি মিলছে না (সঙ্গে তুলনা ===)। পছন্দ করুন 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]
রুবি ২.৪
রুবি ২.৪ এখনও বাইরে নেই তবে এটি শীঘ্রই হবে এবং এর দুর্দান্ত কিছু বৈশিষ্ট্য রয়েছে। (এটি প্রকাশিত হলে আমি ডক্সের কয়েকটি লিঙ্ক সহ এই পোস্টটি আপডেট করব)) আমি এই দুর্দান্ত ব্লগ পোস্টে এর বেশিরভাগটি সম্পর্কে শিখেছি ।
Enumerable#sum
আর নেই arr.reduce(:+)। আপনি এখন ঠিক করতে পারেন arr.sum। এটি একটি alচ্ছিক প্রাথমিক মান আর্গুমেন্ট নেয় যা সংখ্যাসূচক উপাদানগুলির জন্য 0 এ ডিফল্ট হয় ( [].sum == 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এটি বেশ সুন্দর।
বোনাস হিসাবে, এটি একটি alচ্ছিক রেডিক্স যুক্তি লাগে:
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
শর্তসাপেক্ষে একাধিক অ্যাসাইনমেন্ট
এটি রুবির পূর্ববর্তী সংস্করণগুলিতে একটি ত্রুটি উত্থাপন করে তবে এটি ২.৪-এ অনুমোদিত।
(a,b=1,2) ? "yes" : "no" # => "yes"
(a,b=nil) ? "yes" : "no" # => "no"