تبدیل نوع در روبی
تبدیل بین انواع داده: to_i، to_f، to_s، to_a، to_h و تبدیلهای پیشرفته
تبدیل نوع چیست؟
تبدیل نوع (Type Conversion) یعنی تغییر یک نوع داده به نوع دیگر. روبی متدهای مختلفی برای این کار دارد.
تبدیل به رشته (to_s)
puts 42.to_s # => "42"
puts 3.14.to_s # => "3.14"
puts true.to_s # => "true"
puts nil.to_s # => ""
puts [1, 2].to_s # => "[1, 2]"
puts({ a: 1 }.to_s) # => "{:a=>1}"
تبدیل به عدد صحیح (to_i)
puts "42".to_i # => 42
puts "3.14".to_i # => 3 (بخش اعشار حذف میشود)
puts "abc".to_i # => 0 (نامعتبر → 0)
puts "42abc".to_i # => 42 (تا جایی که عدد است)
puts 3.99.to_i # => 3 (گرد نمیشود!)
puts true.to_i # => 1
puts false.to_i # => 0
puts nil.to_i # => 0
تبدیل به عدد اعشاری (to_f)
puts "3.14".to_f # => 3.14
puts "42".to_f # => 42.0
puts 42.to_f # => 42.0
puts "abc".to_f # => 0.0
تبدیل به آرایه (to_a)
puts (1..5).to_a.inspect # => [1, 2, 3, 4, 5]
puts "hello".chars.inspect # => ["h", "e", "l", "l", "o"]
puts({ a: 1 }.to_a.inspect) # => [[:a, 1]]
تبدیل به هش (to_h)
arr = [[:a, 1], [:b, 2]]
puts arr.to_h.inspect # => {:a=>1, :b=>2}
جدول کامل تبدیلها
| متد | توضیح | مثال |
|---|---|---|
to_s | به رشته | 42.to_s → "42" |
to_i | به عدد صحیح | "42".to_i → 42 |
to_f | به عدد اعشاری | "3.14".to_f → 3.14 |
to_r | به کسر (Rational) | "1/2".to_r |
to_c | به عدد مختلط | 5.to_c |
to_a | به آرایه | (1..3).to_a |
to_h | به هش | [[:a,1]].to_h |
to_sym | به نماد | "name".to_sym |
chars | رشته به آرایه کاراکتر | "ab".chars |
split | رشته به آرایه | "a,b".split(",") |
join | آرایه به رشته | [1,2].join(",") |
keys | هش به آرایه کلیدها | h.keys |
values | هش به آرایه مقادیر | h.values |
تبدیل صریح vs ضمنی
روبی دو نوع تبدیل دارد:
- صریح (Explicit):
to_s,to_i— همیشه کار میکنند - ضمنی (Implicit):
to_str,to_int— فقط اگر شی واقعاً آن نوع باشد
# صریح — همیشه کار میکند
puts 42.to_s # => "42"
# ضمنی — خطا میدهد اگر واقعاً رشته نباشد
# puts 42.to_str # => ❌ خطا!
تبدیل با Integer() و Float()
این متدها سختگیرانهتر هستند:
puts Integer("42") # => 42
puts Float("3.14") # => 3.14
# puts Integer("abc") # => ❌ خطا! (برخلاف "abc".to_i که 0 میدهد)
# puts Integer("3.14") # => ❌ خطا!
خلاصه
to_s— به رشتهto_i— به عدد صحیح (خطا نمیدهد)to_f— به عدد اعشاریto_a— به آرایهto_h— به هشInteger()/Float()— تبدیل سختگیرانه
این مبحث بخشی از دوره آموزش کامل روبی است.