آرگومانهای متد در روبی
آرگومانهای موقعیتی، پیشفرض، کلیدواژهای و splat (*args, **kwargs) در روبی
انواع آرگومان در روبی
روبی چندین نوع آرگومان برای متدها پشتیبانی میکند.
۱. آرگومانهای موقعیتی (Positional)
سادهترین نوع — به ترتیب داده میشوند:
def greet(first_name, last_name)
"سلام #{first_name} #{last_name}!"
end
puts greet("علی", "رضایی") # => سلام علی رضایی!
۲. آرگومانهای پیشفرض (Default)
اگر آرگومان داده نشود، مقدار پیشفرض استفاده میشود:
def greet(name = "کاربر")
"سلام #{name}!"
end
puts greet # => سلام کاربر!
puts greet("علی") # => سلام علی!
آرگومانهای پیشفرض باید بعد از آرگومانهای اجباری بیایند.
۳. آرگومانهای کلیدواژهای (Keyword Arguments)
آرگومانها با نام مشخص میشوند — ترتیب مهم نیست:
def create_user(name:, age:, city: "تهران")
"#{name}، #{age} ساله، ساکن #{city}"
end
puts create_user(name: "علی", age: 25)
puts create_user(age: 30, name: "مریم", city: "اصفهان")
کلیدواژهای با پیشفرض
def configure(host:, port: 8080, debug: false)
"Host: #{host}, Port: #{port}, Debug: #{debug}"
end
puts configure(host: "localhost")
puts configure(host: "localhost", port: 3000, debug: true)
۴. Splat (*args) — تعداد متغیر
برای تعداد متغیر آرگومان موقعیتی:
def sum_all(*numbers)
numbers.sum
end
puts sum_all(1, 2, 3) # => 6
puts sum_all(1, 2, 3, 4, 5) # => 15
puts sum_all # => 0
ترکیب splat با آرگومان عادی
def greet_all(greeting, *names)
names.map { |n| "#{greeting} #{n}!" }
end
puts greet_all("سلام", "علی", "مریم", "حسن").inspect
# => ["سلام علی!", "سلام مریم!", "سلام حسن!"]
۵. Double Splat (**kwargs) — کلیدواژههای متغیر
def log(message, **options)
puts "Message: #{message}"
options.each { |k, v| puts " #{k}: #{v}" }
end
log("خطا رخ داد", level: "error", code: 500, time: Time.now)
۶. بلوک به عنوان آرگومان (&block)
def run_block(&block)
block.call
end
run_block { puts "این یک بلوک است!" }
# یا با yield
def run_yield
yield
end
run_yield { puts "با yield!" }
ترکیب همه انواع
def complex_method(a, b, *rest, keyword:, optional: 42, **kwargs, &block)
puts "a: #{a}"
puts "b: #{b}"
puts "rest: #{rest.inspect}"
puts "keyword: #{keyword}"
puts "optional: #{optional}"
puts "kwargs: #{kwargs.inspect}"
block.call if block
end
complex_method(1, 2, 3, 4, 5, keyword: "required", extra: "data") {
puts "بلوک!"
}
آرگومانهای نامگذاریشده قدیمی (Hash)
# سبک قدیمی با Hash
def old_style(options = {})
name = options[:name] || "ناشناس"
age = options[:age] || 0
"#{name}، #{age} ساله"
end
puts old_style(name: "علی", age: 25)
خلاصه
| نوع | سینتکس | مثال |
|---|---|---|
| موقعیتی | (a, b) | f(1, 2) |
| پیشفرض | (a = 1) | f() یا f(5) |
| کلیدواژهای | (name:) | f(name: "علی") |
| کلیدواوده با پیشفرض | (port: 80) | f() یا f(port: 443) |
| Splat | (*args) | f(1, 2, 3) |
| Double Splat | (**kwargs) | f(a: 1, b: 2) |
| بلوک | (&block) | f { ... } |
این مبحث بخشی از دوره آموزش کامل روبی است.