Windows
Для установки в Windows достаточно скачать один из вариантов Ruby с http://ftp.ruby-lang.org/pub/ruby/binaries/ (я выбрал mswin32/ruby-1.8.1-20040402-i386-mswin32.zip). Далее распаковать и проставить правильно пути к директориям. Можно также воспользоваться пакетом автоматической установки RubyInstaller
Определить правильность установки поможет команда
C:\>ruby --help
Инструментарий языка
Управляющие структуры
if в несколько строк
if 1 > b
# ...
elsif a == 1
# ...
else
# ...
end
if в одну строку
if 1 > b then 1 else 2 end
case
case node.type
when node.DocumentNode then
# ...
else
# ...
end
Постусловие
a = 1 if a > 1
Циклы
i = 1
while i < 10
puts i += 1
end
i = 1
puts i += 1 while i < 10
Использование mini-callbacks для организации циклов
Callback - это общее название, которым обозначают механизм задание части кода, который выполняется вызываемым методом. В различных технологиях используются указатели на функции (C/C++), динамический вызов функций (PHP/Perl). В Ruby задание callback можно осуществлять с помощью блоков кода. Блок передается за методом в волнистых скобках или в виде do ... end. В начале блока идет перечисление параметров, с которыми он вызывается. Например |i| обозначает, что блоку передается один параметр и внутри этого блока он присваивается переменной i.
10.times { puts "I will use Google before asking questions\n" }
1.upto(3) { |i| puts "Iteration #{i}\n" }
10.downto(1) {|i| puts i}
(1..10).each {|i| puts i}
0.step(100, 10) {|i| puts i}
['January 1', 'February 23', 'March 8'].each { |holiday| p holiday }
%w{this is a test}.each{|i| p i}
Регионы
Регион используется для организации проверок и циклов. Он определяется начальным и конечным значением.
Создать регион
0..1 # 0, 1
0...4 # 0, 1, 2, 3
'a'..'f' # 'a', 'b', 'c', 'd', 'e', 'f'
Перевести регион в массив
(0..4).to_a # Result: [0, 1, 2, 3, 4]
Определить, есть ли элемент в регионе
(0..9).include?(5) или (0..9) === 5
Минимальный элемент региона
(0..9).min
Максимальный элемент региона
(0..9).max
Строки
Задание строки
str = 'asdf #{10**5}' # без вычисления
str = "asdf #{10**5}" # с вычислением, str = 'asdf 100000'
Определить длину строки
"asdf".length
Нахождение подстроки в строке
"asdf".index("s")
Массив из строки по некоторому разделителю
"asdf g h jkl;".split(" ")
Массив значений из строки
"10 11 12".scan(/\d+/)
Замена подстроки в строке
'Ruby??'.sub(/\?/, '!') > Ruby!?
'Ruby??'.sub(/(\?)\?/, '\1!') > Ruby?!
'Ruby??'.gsub(/\?/, '!') > Ruby!!
Из строки в число
"10".to_i
Посторить несколько раз строку
'-=' * 10 # -=-=-=-=-=-=-=-=-=-=
Альтернативные способы задания строк
"asdf" = %Q/asdf/
'asdf' = %q/asdf/ (вместо / может использоваться любой символ, например ~ -> %q~asdf~)
str = <<END
Некоторый текст
END
Числа
Приятной особенностью Ruby является встроенная поддержка больших чисел в вычислениях. Благодаря чему можно легко оперировать большими целыми числами. Например, можно легко вычислить, сколько зерен должен был отдать правитель изобретателю шахмат (по легенде, изобретатель попросил правителя положить на первую клетку два зернышка, на вторую 22 и так до последней, на которой было 264 зерен):
s, t = 2, 0
(1..64).each { t += s *= 2}
puts t # Результат: 73786976294838206460
Некоторые интересные возможности:
-10.abs - модуль
0xAAFF - hex
0b10010 - binary
?z - код символа
?\C-a - код Ctrl+a (?a & 0x9f)
?\M-a - код Alt+a (?a | 0x80)
?\C-\M-a - код Ctrl+Alt+a
Float object соответствует системному double