فرمتبندی رشته در روبی
interpolation، sprintf، قالببندی اعداد و رشتهها در روبی
String Interpolation
مهمترین روش فرمتبندی در روبی interpolation است — قرار دادن عبارت داخل رشته با #{ }:
name = "علی"
age = 25
puts "نام: #{name}" # => نام: علی
puts "سن: #{age} سال" # => سن: 25 سال
puts "مجموع: #{3 + 4}" # => مجموع: 7
interpolation فقط در رشتههای با دو نقلقول کار میکند. در تک نقلقول
#{ } بهصورت متن چاپ میشود.عبارات پیچیده در interpolation
میتوانید هر عبارت روبی را داخل #{ } قرار دهید:
arr = [1, 2, 3, 4, 5]
puts "آرایه: #{arr.inspect}"
puts "مجموع: #{arr.sum}"
puts "میانگین: #{arr.sum.to_f / arr.length}"
puts "زمان: #{Time.now.hour}:#{Time.now.min}"
فرمتبندی با sprintf / format
برای فرمتبندی پیشرفته از sprintf یا format استفاده کنید:
# اعداد اعشاری
pi = 3.14159265
puts sprintf("%.2f", pi) # => 3.14
puts sprintf("%.4f", pi) # => 3.1416
# اعداد صحیح با padding
puts sprintf("%5d", 42) # => " 42"
puts sprintf("%-5d|", 42) # => "42 |"
puts sprintf("%05d", 42) # => "00042"
Specifier های فرمت
| Specifier | توضیح | مثال |
|---|---|---|
%d | عدد صحیح | sprintf("%d", 42) |
%f | عدد اعشاری | sprintf("%.2f", 3.14) |
%s | رشته | sprintf("%s", "سلام") |
%x | هگزادسیمال | sprintf("%x", 255) → ff |
%o | اکتال | sprintf("%o", 8) → 10 |
%e | نماد علمی | sprintf("%e", 1000) |
%% | علامت % | sprintf("%d%%", 50) → 50% |
چند آرگومان در sprintf
name = "علی"
age = 25
height = 1.75
formatted = sprintf("نام: %s | سن: %d | قد: %.2f", name, age, height)
puts formatted
ترازبندی (Alignment)
# راستچین
puts sprintf("%10s", "علی") # => " علی"
# چپچین
puts sprintf("%-10s|", "علی") # => "علی |"
# وسطچین (دستی)
def center(text, width)
total = width - text.length
left = total / 2
right = total - left
" " * left + text + " " * right
end
puts "[#{center('علی', 10)}]"
فرمتبندی اعداد با کاما
# اعداد بزرگ با کاما
price = 1500000
puts price.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse
# => 1,500,000
# یا با active_support (در Rails)
# puts price.to_s(:delimited)
رشتههای چندخطی تمیز (Squiggly Heredoc)
name = "علی"
age = 25
text = <<~TEXT
نام: #{name}
سن: #{age}
وضعیت: #{age >= 18 ? 'بزرگسال' : 'کودک'}
TEXT
puts text
متد % برای فرمتبندی
میتوانید از % روی رشته استفاده کنید:
puts "نام: %s، سن: %d" % ["علی", 25]
puts "قیمت: %.2f تومان" % 99.5
خلاصه
| روش | توضیح |
|---|---|
#{expr} | interpolation در دو نقلقول |
sprintf | فرمتبندی پیشرفته |
format | مانند sprintf |
"%s" % val | فرمتبندی با % |
<<~TEXT | heredoc چندخطی |
این مبحث بخشی از دوره آموزش کامل روبی است.