فرمت‌بندی رشته در روبی

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فرمت‌بندی با %
<<~TEXTheredoc چندخطی

این مبحث بخشی از دوره آموزش کامل روبی است.

ابزارهای مرتبط