আপনি কি জানতেন সঠিক রুবি মেথড ব্যবহার করা আপনাকে অনেক কাজ বাঁচাতে পারে? আপনি যতটুকু বেশি মেথডের সাথে পরিচিত থাকবেন ততটুকু দ্রুত আপনি কাজের কোড তৈরি করতে পারবেন এবং এই কোডটি পারফরম্যান্স এবং কোয়ালিটির দৃষ্টিকোণ থেকে যতটুকু ভালো হবে। এইीलেই আজ আমি আপনাকে ৭টি আকর্ষণীয় মেথড পরিচয় করাতে চাই যা আপনি হয়তো আগে দেখেননি।
সামগ্রী
- ১ Integer#digits মেথড (রুবি ২.৪)
- ২ Tap মেথড
- ৩ Array#values_at
- ৪ Hash#transform_values (রুবি ২.৪)
- ৫ Kernel#itself (রুবি ২.২)
- ৬ Array#count
- ৭ Enumerable#cycle
- ৮ সারসংক্ষেপ
- ৮.১ সম্পর্কিত
Integer#digits মেথড (রুবি ২.৪)
এটি রুবি ২.৪-এ যোগ করা একটি নতুন মেথড এবং এটি খুব উপকারী যদি আপনি একটি ইন্টিজারের ইনডিভিজুয়াল ডিজিটের সাথে কাজ করতে চান।
আপনি ভাবতে পারেন অ্যারে-লাইক ইন্ডেক্সিং কাজ করবে:নোট: আপনি যদি রুবি ২.৪-এর পরিবর্তনগুলোতে আপ টু ডেট না থাকেন, Fixnum এবং Bignum এখন ডিপ্রিকেটেড এবং দুটোই Integer-এ মার্জড।
2[0] # 0 2[1] # 1
কিন্তু আপনি যে পাচ্ছেন সেটা ডিজিট নয়, বরং বাইনারি বিটগুলো যা এই নম্বরটি গঠন করে। তাই pre-digits মেথডের সময় টিপিক্যাল সমাধান ছিল নম্বরটিকে স্ট্রিং-এ কনভার্ট করা, তারপর সেই স্ট্রিংকে chars মেথড দিয়ে ক্যারেক্টার অ্যারেতে ভাঙা, এবং অবশেষে প্রতিটি স্ট্রিংকে আবার ইন্টিজারে কনভার্ট করা। উদাহরণ:
123.to_s.chars.map(&:to_i).reverse [3, 2, 1]
কিন্তু post-digits মেথড বিশ্বে, আপনি সিম্পলি এভাবে করতে পারেন:
123.digits [3, 2, 1]
অনেক ভালো, ঠিক না? ভিডিও:
Tap মেথড
কখনও কখনও আপনি একটি অবজেক্ট তৈরি করতে চান, সেটাতে কয়েকটি মেথড কল করতে চান এবং সেই অবজেক্টটিই ফেরত দিতে চান। আপনাকে এমন কিছু করতে হতো:
user = User.new user.name = "John" user
সমস্যা হলো আমাদের এই টেম্পোরারি ভেরিয়েবল দিয়ে নিব करना पड़ रहा। এখানেই tap মেথডটি রক্ষা করলে আসে! tap দিয়ে উপরের উদাহরণটি এভাবে হয়:
User.new.tap { |user| user.name = "John" }
লক্ষ্য করুন কীভাবে টেম্পোরারি ভেরিয়েবলটি গিয়েছে, যা একটি ভালো জিনিস 🙂
Array#values_at
আপনি যদি একটি অ্যারে বা হ্যাশ থেকে একাধিক নন-সিকোয়েনশিয়াল ভ্যালু পেতে চান তবে আপনি এভাবে করতে পারেন:
arr = [1,2,3,4,5] a, b, c = arr[0], arr[1], arr[4]
বা আপনি values_at মেথড ব্যবহার করতে পারেন:
arr = [1,2,3,4,5] a, b, c = arr.values_at(0, 1, 4)
এটি হ্যাশের সাথেও কাজ করে:
hash = {bacon: 300, chocolate: 200}
p hash.values_at(:bacon, :chocolate) # [300, 200]
Hash#transform_values (রুবি ২.৪)
মান লিন আপনার কাছে একটি হ্যাশ রয়েছে এবং আপনি কোনো কারণে সব ভ্যালু পরিবর্তন করতে চান। সেটা স orquesta Array#map দিয়ে আপনি যা করবেন। map-এর সমস্যা হলো আপনি একটি অ্যারে-অফ-অ্যারে (মাল্টি-ডাইমেনশনাল অ্যারে) পাবেন হ্যাশের বদলে। ওপর থেকে Hash#map! নেই। তাই একটি সমাধান হতে পারে এটি:
h = {bacon: 200, coconut: 300}
h.each { |k,v| h[k] = v*2 }
এই উদাহরণে আমরা প্রতিটি ভ্যালু দুগুন করছি। ফলাফল:
{:bacon=>400, :coconut=>600}
রুবি ২.৪ থেকে এটি করার একটি ভালো পদ্ধতি রয়েছে:
h.transform_values! { |v| v * 2 }
এটি রেইলস থেকে আসা অন্য একটি মেথড, যা এখন ফ্রেমওয়ার্কের বাইরেও উপলব্ধ 🙂
Kernel#itself (রুবি ২.২)
আপনি যদি আমাকে বলেন এই মেথডটি প্রথমblick-এ তত আকর্ষণীয় লাগছে না তবে আমি আপনার সাথে একমত হব। কারণ এর কারণ হলো আপনাকে কিছু ভালো উদাহরণ দেখতে হবে। তাহলে আসুন ধরি আপনার কাছে একটি অ্যারে রয়েছে রিপিটেড শব্দের সাথে এবং আমরা সেগুলো কাউন্ট করতে চাই… এখানে অনেক পদ্ধতি রয়েছে, কিন্তু আমি মনে করি এটি আমাদের নতুন বন্ধু: Kernel#itself টেস্ট করার একটি চমৎকার কেস। উদাহরণ:
words = %w(cat cat tiger dog cat) words.group_by(&:itself).transform_values(&:size)
লক্ষ্য করুন আমি কীভাবে এটি Hash#transform_values-এর সাথে কম্বাইন করলাম! যদি transform_values উপলব্ধ না থাকে তবে আপনি এভাবে করতে পারেন:
words .group_by(&:itself) .each_with_object({}) { |(k,v), hash| hash[k] = v.size }
ভিডিও: নোট: itself মেথডটি ডকুমেন্টেশনে Object ক্লাসের অধীনে দেখায়, কিন্তু মেথডটি Kernel মডিউলে ডিফাইন করা আছে।
Array#count
কখনও কখনও আপনার শুধু কিছু কাউন্ট করার দরকার পড়ে। টিপিক্যাল কাউন্টার + লুপের বদলে আপনি count মেথড ব্যবহার করতে পারেন! উদাহরণ:
letters = %w(a a a b c d a)
letters.count("a") # 4
এই মেথডের অ্যারে ভার্সনও একটি ব্লক নেয়, তাই আপনি আরও জটিল কাউন্টিং করতে পারেন।
numbers = [1,2,3,4,5,6] numbers.count(&:even?) # 3ভিডিও:
Enumerable#cycle
আপনি কি কোনো প্যাটার্ন রিপিট করতে চান? অথবা হয়তো আপনার একটি সহজ অন/অফ টগলের দরকার? তাহলে Enumerable#cycle হতে পারে আপনি যা খুঁজছেন! উদাহরণ:
array = %w(a b c) # Same as array * 3 array.cycle(3).to_a
কিন্তু cycle-এর জন্য আমার ফেভারিট ব্যবহার হলো একটি "সুইচ" বা "টগল" অবজেক্ট তৈরি করা।
switch = %w(on off).cycle switch.nextএটির ভালো দিক হলো আপনাকে সুইচের বর্তমান ভ্যালু চেক করে ম্যানুয়ালি আপডেট করতে হয় না। আপনি শুধু
next কল করুন এবং রুবি ঠিক জানবে কী করতে হবে 🙂
সারসংক্ষেপ
আপনি কিছু নতুন উপকারী মেথড সম্পর্কে শিখলেন: Integer#digits, Kernel#tap, Array#values_at, Hash#transform_values, Kernel#itself, Array#count, Enumerable#cycle। আপনি যদি ইতিমধ্যে এইগুলো জানতেন তবে চমৎকার! না জানলে আশা করি আপনি এগুলোকে উপকারী পাবেন 🙂 এই আর্টিকেলটি উপভোগ করলে আপনার বন্ধুদের সাথে শেয়ার করুন যাতে তারা ও উপভোগ করতে পারে!