কম্পিউটার

কীওয়ার্ড আর্গুমেন্ট, হ্যাশ এবং স্প্ল্যাট সহ মজা

আপনি সম্ভবত আগে এই প্যাটার্ন দেখেছেন. একটি পদ্ধতিতে একটি options আছে হ্যাশ এর শেষ আর্গুমেন্ট হিসেবে, যা অতিরিক্ত প্যারামিটার ধারণ করে:

def hello_message(name_parts = {})
  first_name = name_parts.fetch(:first_name)
  last_name = name_parts.fetch(:last_name)

  "Hello, #{first_name} #{last_name}"
end

দুর্ভাগ্যবশত, আপনাকে হ্যাশ থেকে সেই প্যারামিটারগুলি বের করতে হবে। এবং এর মানে হল আপনি ভাল অংশে পৌঁছানোর আগে অনেক সেটআপ করতে হবে।

কিন্তু আপনি যদি রুবি 2.0+ এ কীওয়ার্ড আর্গুমেন্ট ব্যবহার করার জন্য এই পদ্ধতিটি পরিবর্তন করেন, তাহলে আপনাকে :first_name টানতে হবে না এবং :last_name আপনার হ্যাশের বাইরে৷৷ রুবি এটা আপনার জন্য করে:

def hello_message(first_name:, last_name:)
  "Hello, #{first_name} #{last_name}"
end

আরও ভাল, যদি আপনার অ্যাপ রুবি 1.9+ হ্যাশ সিনট্যাক্স ব্যবহার করে, তবে আপনার পদ্ধতিগুলি সেই পদ্ধতির কলার পরিবর্তন না করেই কীওয়ার্ড আর্গুমেন্ট ব্যবহার করতে পারে:

def hello_message_with_an_options_hash(name_parts = {})
  first_name = name_parts.fetch(:first_name)
  last_name = name_parts.fetch(:last_name)

  "Hello, #{first_name} #{last_name}"
end

def hello_message_with_keyword_arguments(first_name:, last_name:)
  "Hello, #{first_name} #{last_name}"
end

hello_message_with_an_options_hash(first_name: "Justin", last_name: "Weiss")

hello_message_with_keyword_arguments(first_name: "Justin", last_name: "Weiss")

দেখা? এই যুক্তিগুলি অভিন্ন!

কীওয়ার্ড আর্গুমেন্ট সিনট্যাক্সকে এক ধাপ অনেক দূরে ঠেলে দেওয়া হচ্ছে

যদি আপনার না থাকে তাহলে কি হবে যদিও নতুন হ্যাশ সিনট্যাক্সে স্যুইচ করেছেন? আপনি আপনার সমস্ত কোড রূপান্তর করতে পারেন. কিন্তু, অন্তত রুবি 2.2.1-এ, পুরানো হ্যাশ সিনট্যাক্স কীওয়ার্ড আর্গুমেন্টের সাথে ঠিক কাজ করে:

irb(main):007:0> hello_message_with_keyword_arguments(:first_name => "Justin", :last_name => "Weiss")
=> "Hello, Justin Weiss"

চমৎকার! হ্যাশ অবজেক্ট পাস করার বিষয়ে কি? , আর্গুমেন্টের পরিবর্তে?

irb(main):008:0> options = {:first_name => "Justin", :last_name => "Weiss"}
irb(main):009:0> hello_message_with_keyword_arguments(options)
=> "Hello, Justin Weiss"

ছিঃ আমরা যদি মিশাতে চাই তাহলে কি হবে একটি হ্যাশ এবং কীওয়ার্ড আর্গুমেন্ট?

irb(main):010:0> options = {last_name: "Weiss"}
irb(main):011:0> hello_message_with_keyword_arguments(first_name: "Justin", options)
SyntaxError: (irb):11: syntax error, unexpected ')', expecting =>
	from /usr/local/bin/irb:11:in `<main>'

ঠিক আছে. আমি অনুমান করি যে আমরা এটিকে অনেক দূরে নিয়েছি। এটি ঠিক করার জন্য, আপনি হ্যাশ #মার্জ ব্যবহার করে একটি হ্যাশ তৈরি করতে পারেন যা আপনি নিজে থেকে পাস করতে পারেন। কিন্তু আরও ভালো উপায় আছে।

আপনি যদি কীওয়ার্ড আর্গুমেন্টের পরিবর্তে নিয়মিত আর্গুমেন্ট ব্যবহার করে থাকেন, তাহলে আপনি * ব্যবহার করে একটি অ্যারে থেকে আর্গুমেন্ট স্প্ল্যাট করতে পারেন। :

def generate_thumbnail(name, width, height)
  # ...
end

dimensions = [240, 320]
generate_thumbnail("headshot.jpg", *dimensions)

কিন্তু কীওয়ার্ড স্প্ল্যাট করার কোন উপায় আছে কি একটি আর্গুমেন্ট লিস্টে আর্গুমেন্ট?

দেখা যাচ্ছে সেখানে আছে:** . আপনি ** দিয়ে ভাঙা উদাহরণটি কীভাবে ঠিক করবেন তা এখানে :

irb(main):010:0> options = {last_name: "Weiss"}
irb(main):011:0> hello_message_with_keyword_arguments(first_name: "Justin", **options)
=> "Hello, Justin Weiss"

এবং যদি আপনি সত্যি হন পাগল, আপনি নিয়মিত আর্গুমেন্ট, কীওয়ার্ড আর্গুমেন্ট এবং স্প্ল্যাট মিশ্রিত করতে পারেন:

def hello_message(greeting, time_of_day, first_name:, last_name:)
  "#{greeting} #{time_of_day}, #{first_name} #{last_name}!"
end

args = ["Morning"]
keyword_args = {last_name: "Weiss"}

hello_message("Good", *args, first_name: "Justin", **keyword_args) # => "Good Morning, Justin Weiss!"

অবশ্যই, আপনি যদি নিজেকে এমন পরিস্থিতিতে খুঁজে পান যেখানে এটি প্রয়োজনীয়, আপনি সম্ভবত অনেক আগে একটি ভুল করেছেন!

কীওয়ার্ড আর্গুমেন্ট সহজ উপায়ে ক্যাপচার করুন

আপনি কি জানেন কিভাবে আপনি * ব্যবহার করে আপনার সমস্ত পদ্ধতির আর্গুমেন্টকে একটি অ্যারেতে পরিণত করতে পারেন ?

def argument_capturing_method(*args)
  args
end

argument_capturing_method(1, 2, 3) # => [1, 2, 3]

এটি কীওয়ার্ড আর্গুমেন্টের সাথেও কাজ করে। সেগুলি একটি হ্যাশে রূপান্তরিত হয় এবং আপনার args-এর শেষ আর্গুমেন্ট হিসাবে দেখায় অ্যারে:

argument_capturing_method(1, 2, 3, key: "value") # => [1, 2, 3, {:key=>"value"}]

কিন্তু args.last[:key] এইভাবে ধরা কীওয়ার্ড আর্গুমেন্ট পড়ার সেরা উপায় নয়। পরিবর্তে, আপনি নতুন ** ব্যবহার করতে পারেন সিনট্যাক্স নিজেরাই কীওয়ার্ড আর্গুমেন্ট পেতে:

def dual_argument_capturing_method(*args, **keyword_args)
  {args: args, keyword_args: keyword_args}
end

dual_argument_capturing_method(1, 2, 3, key: "value") # => {:args=>[1, 2, 3], :keyword_args=>{:key=>"value"}}

এই সিনট্যাক্সের সাহায্যে, আপনি args[0] দিয়ে প্রথম নিয়মিত আর্গুমেন্ট অ্যাক্সেস করতে পারেন এবং :key keyword_args[:key] সহ কীওয়ার্ড আর্গুমেন্ট .

… অবশ্যই, এখন আমরা বিকল্প হ্যাশে ফিরে এসেছি।

আপনার কোড থেকে এক টন প্যারামিটার নিষ্কাশন বয়লারপ্লেট সরানোর জন্য কীওয়ার্ড আর্গুমেন্টগুলি দুর্দান্ত৷ এবং তাদের সুবিধা নেওয়ার জন্য আপনাকে আপনার কোডের কোনো পরিবর্তন করতে হবে না।

কিন্তু আপনি যখন আরও জেনেরিক পদ্ধতি লেখেন, তখন কিছু নতুন কৌশল রয়েছে যা আপনাকে কীওয়ার্ড আর্গুমেন্টগুলিকে ভালভাবে পরিচালনা করতে শিখতে হবে। আপনাকে এই কৌশলগুলি প্রায়শই ব্যবহার করতে হবে না। কিন্তু যখন আপনি করবেন, এই শক্তি এবং নমনীয়তা আপনার জন্য অপেক্ষা করবে

  1. RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

  2. বাইবাগ, রেল এবং পা দিয়ে রিমোট ডিবাগিং

  3. Logger এবং Lograge সঙ্গে রুবি লগ ইন করুন

  4. Vue, Vuex এবং Rails সহ একটি সম্পূর্ণ-স্ট্যাক অ্যাপ্লিকেশন তৈরি করা