কীওয়ার্ড আর্গুমেন্ট কখন ব্যবহার করতে হবে সে সম্পর্কে আমার মতামত জানতে চেয়ে আমি একটি ইমেল পেয়েছি।
আমি ভেবেছিলাম আমি আমার উত্তরকে একটি রুবি পদ্ধতির আর্গুমেন্ট সম্পর্কে সম্পূর্ণ নিবন্ধে প্রসারিত করব যাতে সবাই উপকৃত হতে পারে !
মেথড আর্গুমেন্টের ক্ষেত্রে রুবি খুবই নমনীয়।
আমাদের সবকিছু আছে :
স্ট্যান্ডার্ড প্রয়োজনীয় আর্গুমেন্ট থেকে ঐচ্ছিক আর্গুমেন্ট এবং এমনকি কীওয়ার্ড (নামযুক্ত) আর্গুমেন্ট।
এই নিবন্ধে, আপনি পার্থক্য সম্পর্কে শিখতে যাচ্ছেন এই সমস্ত আর্গুমেন্ট প্রকারের মধ্যে এবং আপনার পরিস্থিতির উপর নির্ভর করে কোনটি ব্যবহার করবেন।
সঠিক ধরনের আর্গুমেন্ট ব্যবহার করলে আপনার কোড পড়া সহজ এবং কাজ করা সহজ হবে।
যখন সন্দেহ হয় স্ট্যান্ডার্ড আর্গুমেন্ট ব্যবহার করুন
প্রয়োজনীয় আর্গুমেন্ট হল যা আপনি ডিফল্টরূপে পান৷
এখানে একটি উদাহরণ :
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 কল করতে পারেন 2টি আর্গুমেন্ট সহ, যে ক্ষেত্রে mode ডিফল্ট মান সমান হবে ("w" ), অথবা আপনি ডিফল্ট মান ওভাররাইড করতে এবং বিভিন্ন ফলাফল পেতে 3টি আর্গুমেন্টে পাস করতে পারেন৷
এই ডিফল্ট মানটি এই পদ্ধতিতে কল করার সময় আপনাকে কিছু কাজ বাঁচায় এবং এখনও এটি পরিবর্তন করার বিকল্প দেয়৷
স্বচ্ছতা বাড়াতে কীওয়ার্ড আর্গুমেন্ট ব্যবহার করুন
প্রয়োজনীয় এবং ডিফল্ট আর্গুমেন্টগুলির একটি খারাপ দিক হল যে তারা অর্ডার নির্ভর।
মানে আপনাকে একই ক্রমে আর্গুমেন্টে পাস করতে হবে
যদি আপনি তাদের ভুল ক্রমে পাস করেন :
আপনি অপ্রত্যাশিত ফলাফল পাবেন!
উদাহরণস্বরূপ, 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)
এইভাবে দুটি সংখ্যার (10 এবং 20) কোনটি x এর সাথে মিল রয়েছে তা নিয়ে কোনও বিভ্রান্তি নেই মান বা y মান।
যতটা সম্ভব বিভ্রান্তি এবং ভুল বোঝাবুঝি এড়াতে কোড লেখার সময় এটি আপনার প্রধান লক্ষ্যগুলির মধ্যে একটি। .
যদি কীওয়ার্ড আর্গুমেন্ট ব্যবহার করে আপনাকে তা করতে সাহায্য করে তাহলে সেগুলো ব্যবহার করুন।
এটি সম্পর্কে চিন্তা করুন :
"কিওয়ার্ড আর্গুমেন্ট যোগ করলে কি এটা বোঝা সহজ হবে নাকি এটা আমার কোডে অতিরিক্ত কাজ ও বিশৃঙ্খলা যোগ করবে?"
কীওয়ার্ড আর্গুমেন্ট সম্পর্কে আরেকটি বিষয় হল যে আপনি যে আর্গুমেন্টগুলি মিস করছেন সেগুলি সম্পর্কে তারা খুব স্পষ্ট৷
উদাহরণ :
point = Point.new # missing keywords: x, y
আপনি নিয়মিত আর্গুমেন্টের সাথে কীওয়ার্ড আর্গুমেন্টও একত্রিত করতে পারেন।
একটি কৌশল যা আমি রুবি বিল্ট-ইন পদ্ধতিতে পর্যবেক্ষণ করেছি তা হল নতুন সংস্করণগুলি কীওয়ার্ড আর্গুমেন্ট হিসাবে নতুন, ঐচ্ছিক যুক্তি যোগ করার প্রবণতা রাখে। .
এর উদাহরণ হল Float#round-এর জন্য কীওয়ার্ড আর্গুমেন্ট , Kernel#clone &String#lines রুবি 2.4.
প্রয়োজনীয় যতগুলি মান ক্যাপচার করতে পরিবর্তনশীল আর্গুমেন্ট ব্যবহার করুন
আপনি যদি সীমাহীন পরিমাণ মান নিতে চান?
তারপর আপনি ভেরিয়েবল আর্গুমেন্ট ব্যবহার করতে পারেন :
def print_all(*args) end print_all(1, 2, 3, 4, 5)
এটি আপনাকে যেকোনও সংখ্যক আর্গুমেন্ট সহ পদ্ধতিতে কল করতে দেয়, কোনটি সহ। একটি পরিবর্তনশীল আর্গুমেন্ট হল একটি অ্যারে যার সমস্ত মান এতে পাস করা হয়।
আপনি এটিকে অন্য ধরনের আর্গুমেন্টের সাথে একত্রিত করতে পারেন।
উদাহরণ :
def print_all(title, *chapters) end
এটি 1ম আর্গুমেন্টটিকে 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
এর মানে হল যে পদ্ধতিটি কোনও যুক্তি গ্রহণ করছে, কিন্তু এটি তাদের সাথে কিছু করছে না। এটি আন্ডারস্কোর অক্ষর (_) ব্যবহার করার মতো আপনি কোন আর্গুমেন্ট ব্যবহার করছেন না তা দেখানোর জন্য একটি ব্লকের ভিতরে।
এর জন্য একটি ব্যবহারিক ব্যবহার সুপার কীওয়ার্ডের সাথে একত্রিত হতে পারে:
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")
এখন যখন খাবারের nutrition এর আর্গুমেন্ট তালিকা পরিবর্তন করে, আপনাকে Bacon-এ আর্গুমেন্ট পরিবর্তন করতে হবে না এছাড়াও।
সারাংশ
আপনি রুবির শক্তিশালী পদ্ধতির আর্গুমেন্ট এবং সেগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে শিখেছেন! প্রয়োজনীয় আর্গুমেন্ট একটি ভাল শুরু, তারপর আপনি ঐচ্ছিক আর্গুমেন্টের সাথে নমনীয়তা যোগ করতে পারেন এবং কীওয়ার্ড আর্গুমেন্টের সাথে স্পষ্টতা যোগ করতে পারেন।
আশা করি আপনি এটি দরকারী এবং আকর্ষণীয় পেয়েছেন!
টুইটারে এই পোস্টটি শেয়ার করুন যাতে আরও মানুষ এটি দেখতে পারে 🙂
৷