Блог

Ruby: Продолжение знакомства, условные операторы

Мое знакомство с Ruby. Возможно кому-то пригодится, когда будет начинать его учить. Краткая информация об условных операторах.

Оператор if
lang = :es
if lang == :en than
puts “True”
endif lang == :en: puts ‘En’
elsif lang == :es: puts ‘Es’
else puts ‘No find’
end
Для оператора if можно использовать than или двоеточие (:)

Оператор case
case – языка ruby также обеспечивает способ выразить логические условия в лаконичной форме.
lang = :es
dog = case lang
when :en ‘dog’
when :es ‘perro’
when :fr ‘chien’
else ‘dog’
end

Можно использовать Диапазон.
scale = 8
case scale
when 0: puts ‘lowest’
when 1..3: puts ‘medium-low’
when 4..5: puts ‘medium’
when 6..7: puts ‘medium-high’
when 8..9: puts ‘high’
when 10: puts ‘highest’
else puts ‘off scale’
end

Цикл while
while – выполняет содержащийся в нем код до тех пор, пока условие остается истинным.
i = 0
pacific = [‘Washington’, ‘Oregon’, ‘California’]
p_size = pacific.size
temp = []

while i < p_size do
temp << pacific[i]
i += 1
end
temp.sort!
pacific.replace(temp)

! do необязательно, допускается и вот такая запись
while i < p_size
temp << pacific[i]
i += 1
end

Ещё одна форма, которую можно применить, включает begin/end

temp = 9
begin
puts temp
temp += 1
end while temp <= 15

Кроме того можно применять while в качестве модификатора оператора
i=0
print “#{i+=1} ” while i < 10

Прервать цикл можно с помощью ключевого слова break.
i=0
while
i+=1
print “#{i}”
break if i==10
end

Операторы unless и until
Операторы unless/until подобны if/while, за исключением того, что они выполняются до тех пор, пока условия в них равны false, в то время как операторы if/while выполняются, пока условия равны true.
unless lang == ‘de’
dog = ‘dog’
else
dog = ‘Hung’
end
unless – также можно применять в качестве модификатора оперетора
puts age += 1 unless age > 99

А вот логика, выражения при помощи until, так же есть форма begin/end:
weight = 150
until weight == 200 do
puts ‘Weight: ‘+ weight.to_s
weight += 10
end

weight = 150
begin
puts ‘Weight: ‘+ weight.to_s
weight += 10
end until weight == 200
и так же можно использовать как модификатор оператора
print “#{i+=1} ” until i < 10

Метод loop
loop – происходит из модуля Kernel. Он позволяет выполнять цикл непрерывно, как for(;;) в Си, пока вы или программа не сделаете что-нибудь, чтобы вырваться из него
loop do
i+=1
print “#{i}”
break if i==10
end

Цикл for
for i in 1..5 do
print i, ‘ ‘
end
Вы можете выбросить do. Он не обязателен, но вы должны сохранить end.

Метод times
Лаконичен ex: 10.times {|i| print i, ” ” }

Метод upto
Делает те же самые вещи, что цикл for, но записывается короче.
1.upto(12) { |i| puts i }

Метод downto
Похож на upto, но отсчет идет в обратном направлении.
5.downto(1) {|i| puts i }

Выполнение кода до или после программы
Эти структуры дают возможность выполнить код до и после выполнения программы. И за BEGIN/END следуют блоки, заключенные в фигурные скобки({})

BEGIN { puts “Date and time “+ Time.now.to_s }

def bmi(w, h)
703.0* (w.to_f/(h.to_f ** 2))
end

m_bmi = bmi(192, 73)
puts “Your BMI is: “+ x = sprintf(“%0.2f”, m_bmi)

END { puts “End word” + Time.now.to_s }

Пример с книги “Майкл Фитцджеральд – Изучаем Ruby: 2008”

 

Cсылка:
http://ruby-doc.org/
http://www.ruby-lang.org/en/documentation/quickstart/
http://tryruby.org/levels/2/challenges/2
http://www.tutorialspoint.com/ruby/ruby_loops.htm

Книга:
Майкл Фитцджеральд – Изучаем Ruby: 2008