কম্পিউটার টিউটোরিয়াল

রুবি মেথড আর্গুমেন্ট আয়ত্ত করুন: কিওয়ার্ড, অপশনাল এবং রিকোয়ার্ড প্যারামিটারের প্র্যাক্টিক্যাল গাইড

আমাকে কিওয়ার্ড আর্গুমেন্ট কখন ব্যবহার করবেন সে সম্পর্কে মতামত জানানোর জন্য একটি ইমেইল পাওয়া গিয়েছিল।

আমি চিন্তা করলাম আমার উত্তরটি একটি রুবি মেথড আর্গুমেন্ট সম্পর্কে পূর্ণ आর্টিকেলে রূপ দিয়ে দিলে সবাই লাভ করবে!

রুবি মেথড আর্গুমেন্টের ক্ষেত্রে খুব ফ্লেক্সিবল।

আমাদের সব কিছু আছে:

স্ট্যান্ডার্ড রিকোয়ার্ড আর্গুমেন্ট থেকে অপশনাল আর্গুমেন্ট এবং কিওয়ার্ড (নেমড) আর্গুমেন্ট পর্যন্ত।

এই আর্টিকেলে, আপনি শিখবেন এই সব আর্গুমেন্ট টাইপের মধ্যে পার্থক্য এবং আপনার পরিস্থিতি অনুযায়ী কোনটি ব্যবহার করবেন।

সঠিক ধরনের আর্গুমেন্ট ব্যবহার করলে আপনার কোড পড়া এবং কাজ করা সহজ হবে।

সন্দেহ হলে স্ট্যান্ডার্ড আর্গুমেন্ট ব্যবহার করুন

রিকোয়ার্ড আর্গুমেন্ট হলো যা আপনি ডিফল্টভাবে পান।

এখানে একটি উদাহরণ:

def write(file, data, mode)
end
write("cats.txt", "cats are cool!", "w")

আপনি যদি আর্গুমেন্টের সঠিক সংখ্যা পাস না করেন তবে আপনি এই পরিচিত এরর মেসেজ পাবেন:

write("shopping_list.txt", "bacon")
ArgumentError: wrong number of arguments (2 for 3)

এর মানে আপনি মেথডে 2টি আর্গুমেন্ট দিয়েছেন, কিন্তু এটিকে 3টি দরকার!

অপশনাল আর্গুমেন্টের সাথে ফ্লেক্সিবল মেথড

আপনি আপনার কিছু আর্গুমেন্টকে অপশনাল করতে চাইতে পারেন ডিফল্ট ভ্যালু দিয়ে।

উদাহরণস্বরূপ:

def write(file, data, mode = "w")
end

এখন আপনি write কে ২টি আর্গুমেন্টে কল করতে পারেন, সেক্ষেত্রে mode ডিফল্ট ভ্যালু ("w") হবে, অথবা আপনি ৩টি আর্গুমেন্ট পাস করে ডিফল্ট ভ্যালু ওভাররাইড করে ভিন্ন ফলাফল পেতে পারেন।

এই ডিফল্ট ভ্যালু আপনাকে এই মেথড কল করার সময় কিছু কাজ বাঁচায় এবং এখনও আপনার অপশন খোলা রাখে।

ক্ল্যারিটি বাড়াতে কিওয়ার্ড আর্গুমেন্ট ব্যবহার করুন

রিকোয়ার্ড এবং ডিফল্ট আর্গুমেন্টের একটি সমস্যা হলো সেগুলো অর্ডার-ডিপেন্ডেন্ট।

অর্থাৎ আপনাকে আর্গুমেন্টগুলো একই ক্রমে পাস করতে হবে।

যদি আপনি ভুল ক্রমে পাস করেন:

আপনি অপ্রত্যাশিত ফলাফল পাবেন!

উদাহরণস্বরূপ, write মেথডে, আপনাকে প্রথমে file, তারপর data এবং শেষে mode দিয়ে কল করতে হবে।

def write(file, data, mode)
end

কিওয়ার্ড আর্গুমেন্ট আপনাকে আর্গুমেন্টের ক্রম পরিবর্তন করতে দেয়।

এখানে একটি উদাহরণ:

def write(file:, data:, mode: "ascii")
end

এটি আপনাকে ভিন্ন ক্রমে মেথড কল করতে দেয়:

write(data: 123, file: "test.txt")

কিন্তু সবচেয়ে গুরুত্বপূর্ণ, আপনি মেথড কল করার সময় আর্গুমেন্টগুলোর অর্থ স্পষ্টভাবে দেখতে পান।

আমি কিওয়ার্ড আর্গামেন্ট খুব বেশি ব্যবহার করি না, কিন্তু এটি উপকারী হতে পারে যখন আপনি মেথড কলকে আরও স্পষ্ট করতে চান।

মান লোগে আমাদের একটি Point ক্লাস আছে।

আপনি এভাবে লিখতে পারেন:

class Point
  def initialize(x:, y:)
    @x, @y = x, y
  end
end
point = Point.new(x: 10, y: 20)

এভাবে কোনো বিভ্রান্তি নেই যে দুটি সংখ্যা (১০ এবং ২০) কোনটি x ভ্যালু এবং কোনটি y ভ্যালুর সাথে মিলে।

এই হলো কোড লিখার время আপনার প্রধান লক্ষ্যগুলোর একটি: বিভ্রান্তি এবং ভুল বুঝাই যত সম্ভব এড়াতে।

যদি কিওয়ার্ড আর্গুমেন্ট ব্যবহার করলে এটি সহজ হয় তবে ব্যবহার করুন।

এটি চিন্তা করুন:

"কিওয়ার্ড আর্গুমেন্ট যোগ করলে কী এটি বুঝতে সহজ করবে নাকি আমার কোডে অতিরিক্ত কাজ এবং জটিলতা যোগ করবে?"

কিওয়ার্ড আর্গুমেন্টের আরেকটি বিষয় হলো যে আপনি কোন আর্গামেন্টগুলো মিস করছেন সেটি খুব স্পষ্টভাবে বলে দেয়।

উদাহরণ:

point = Point.new # missing keywords: x, y

আপনি কিওয়ার্ড আর্গুমেন্টকে রেগুলার আর্গুমেন্টের সাথে কম্বাইন করতে পারেন।

রুবি বিল্ট-ইন মেথডগুলিতে আমি যে কৌশলটি পর্যবেক্ষণ করেছি তা হলো নতুন ভার্সনগুলিতে নতুন, অপশনাল আর্গুমেন্ট যোগ করা হয় কিওয়ার্ড আর্গুমেন্ট হিসেবে।

এগুলির উদাহরণ হলো রুবি ২.৪-এ চালু করা Float#round, Kernel#clone এবং String#lines এর কিওয়ার্ড আর্গুমেন্ট।

ভেরিয়েবল আর্গুমেন্ট ব্যবহার করুন যেকোনো সংখ্যক ভ্যালু ক্যাপচার করতে

যদি আপনি অনলিমিটেড সংখ্যক ভ্যালু নিতে চান?

তাহলে আপনি ভেরিয়েবল আর্গুমেন্ট ব্যবহার করতে পারেন:

def print_all(*args)
end
print_all(1, 2, 3, 4, 5)

এটি আপনাকে যেকোনো সংখ্যক আর্গুমেন্টে (শূন্যও সহ) মেথড কল করতে দেয়। একটি ভেরিয়েবল আর্গুমেন্ট হলো সেই সকল ভ্যালুর একটি অ্যারে যা পাস করা হয়েছে।

আপনি এটি অন্য টাইপের আর্গুমেন্টের সাথে কম্বাইন করতে পারেন।

উদাহরণ:

def print_all(title, *chapters)
end

এটি প্রথম আর্গুমেন্টকে title হিসেবে নেবে, এবং বাকিগুলো chapters অ্যারেতে যাবে। লক্ষ্য করুন যে একটি ভেরিয়েবল আর্গুমেন্ট হতে হবে পর% আপনার সব রিকোয়ার্ড এবং অপশনাল আর্গুমেন্টের, এবং যেকোনো কিওয়ার্ড আর্গুমেন্টের আগে।

সঠিক ক্রম ব্যবহার করুন

যদি আপনি সেগুলো কম্বাইন করে সিনট্যাক্স এরর এড়াতে চান তবে আর্গুমেন্টের বৈধ ক্রমটি হলো:

 required -> optional -> variable -> keyword 

এখানে একটি মেথড যা সব সম্ভব আর্গুমেন্ট টাইপ দেখাচ্ছে:

def testing(a, b = 1, *c, d: 1, **x)
  p a,b,c,d,x
end
testing('a', 'b', 'c', 'd', 'e', d: 2, x: 1)

**x ভেরিয়েবল আর্গুমেন্টের মতোই, কিন্তু কিওয়ার্ড আর্গুমেন্টের জন্য। এটি একটি অ্যারে না হয়ে একটি হ্যাশ হবে।

ক্যাচ-অল আর্গুমেন্ট

কিছু বিরল পরিস্থিতিতে আপনি এটি দেখতে পাবেন:

def print_all(*)
end

এর মানে হলো মেথডটি যেকোনো আর্গুমেন্ট গ্রহণ করছে, কিন্তু সেগুলোর সাথে কিছু করছে না। এটি ব্লকের ভেতরে আন্ডারস্কোর ক্যারেক্টার (_) ব্যবহার করার মতো যেন যেসব আর্গুমেন্ট আপনি ব্যবহার করছেন না সেগুলো দেখানোর জন্য।

এটির একটি প্র্যাক্টিক্যাল ব্যবহার হতে পারে super কিওয়ার্ডের সাথে কম্বিনেশনে:

class Food
  def nutrition(vitamins, minerals)
    puts vitamins
    puts minerals
  end
end
class Bacon < Food
  def nutrition(*)
    super
  end
end
bacon = Bacon.new
bacon.nutrition("B6", "Iron")

এখন যখন Food-এর nutrition এর আর্গুমেন্ট লিস্ট পরিবর্তন হবে, তখন আপনাকে Bacon-এ আর্গুমেন্ট পরিবর্তন করতে হবে না।

সারসংক্ষেপ

আপনি রুবির শক্তিশালী মেথড আর্গুমেন্ট এবং কীভাবে সেগুলো ব্যবহার করবেন সেটি শিখতে পেরেছেন! রিকোয়ার্ড আর্গুমেন্ট একটি ভালো শুরু, তারপর আপনি অপশনাল আর্গামেন্ট দিয়ে ফ্লেক্সিবিলিটি যোগ করতে পারেন এবং কিওয়ার্ড আর্গুমেন্ট দিয়ে ক্ল্যারিটি বাড়াতে পারেন।

আশা করি আপনি এটি উপকারী এবং আকর্ষণীয় পেয়েছেন!

এই পোস্টটি টুইটারে শেয়ার করুন যাতে আরও বেশি মানুষ এটি দেখতে পায় 🙂

  1. রুবি Enumerable মেথড মাস্টারিং: Any, All, None এবং One

  2. রুবির grep মেথড মাস্টারিং: কোড উদাহরণসহ একটি ব্যবহারিক গাইড

  3. রুবির Map মেথড মাস্টারিং: উদাহরণসহ একটি ব্যবহারিক গাইড

  4. রুবি Struct ও OpenStruct: দক্ষ ভ্যালু অবজেক্টস