Повторение строк

августа 7, 2008

В Ruby оператор (или метод) умножения перегружен так, что в применении к строкам выполняет операцию повторения. Если строку умножить на n, то получится строка, состоящая из n конкатенированных копий исходной:
etc = “Etc. “*3 # “Etc. Etc. Etc. ”
ruler = ” + ” + (”.”*4+”5″+”.”*4+”+”)*3
# ” + 5 + 5 + 5 + ”

Читать далее →

Несколько слов о стиле кода

июня 24, 2008

Маленький пример рефакторинга ruby-кода.
Исходный вариант:
hosts = []
# add all the site temporary domains
hosts << Site.find(:all).inject([]) do |collection, site|
collection << site.harmony_url
end
# add all the account subdomains
hosts << Account.find(:all).inject([]) do |collection, account|
collection << account.harmony_url
end
Как можно сделать лучше?
Да легко!
# site and account subdomains
hosts = []
hosts << Site.find(:all).collect(&:harmony_url)
hosts << Account.find(:all).collect(:&harmony_url)
Улучшений здесь, как вы видите, три:

Заменяем низкоуровневый inject на collect. [...]

Читать далее →