Урок 4: «Учим скрипт Ruby принимать решение»

Я планировал дать небольшой практикум по Ruby в этом занятии, однако, когда начал придумывать задания, понял, что без ветвления, циклов и прочих конструкций все скрипты будут выглядеть детской шалостью. Справедливо рассудив, что вы еще не готовы к подобному семинару, я решил дать недостающие знания.

Не один язык программирования не обходится без операторов ветвления. Фактически, без них ваша программа теряет смысл. Всегда будут возникать условия, в зависимости от результата которых программа примет решение о том или ином действии.

Если вы впервые изучаете программирование по этим урокам, то поясню немного об условиях. Представьте себе ситуацию, когда вы качаете файлы с торрентов. Вы смотрите на раздачу, если она есть – качаете, нет –ищете что-то другое. Как видите, все очень просто. В мире информатики компьютер проверяет условие на истину и ложь, выполняя заложенный в этих ветках алгоритм.

Я не буду писать целый трактат о применении условий. Это просто бессмысленно, тем более, что в уроках по C++ я уже писал о них. Тем не менее, если что неясно, постараюсь описывать это в примерах. Сейчас вам главное изучить основные операторы ветвления Ruby.

Я уже упоминал, что на Ruby сильно повлиял Perl. В итоге язык обрел множество условных операторов. Тем не менее, привычный всем оператор if никто не отменял. Давайте рассмотрим его реализацию в Ruby.

Несмотря на то, что конструкция имеет вид if..then..end, Ruby позволяет наплевать на эти условия. Это вам не Python, с которым подобный номер не пройдет. Итак, сама конструкция имеет вид:

if условие then

выполнение условия

else

код, который выполняется в случае не соответствия условия

end

Обратите внимание, что оператор if должен закрываться операторной скобкой end, как это делается в Basic. Хотя, Ruby унаследовал от Perl много своеобразного беспредела в отношении синтаксиса, в чем вы убедитесь сами. Итак, как видите, все очень просто: ключевое слово if стоит перед условием, затем, если условие верно (говорят, истина), то после слова then с новой строки выполняется блок кода. Ключевое слово then можно опустить, хотя лично мне так удобнее. Кроме того, вы наверняка обратили внимание на else. Он может как быть, так и не быть. Все зависит от алгоритма программы. Кроме того, есть еще и оператор elsif, но о нем поговорим чуть позже. Давайте рассмотрим эту конструкцию на примере:

a=27

if a==27 then # если а равно 27 тогда

puts “Все верно. Условие соответствует”

else #иначе

puts “Как вы умудрились здесь накосячить?!”
end

Это очень простой пример и довольно-таки бессмысленный. Но логику вы должны понять. Я ввел число, затем проверил его на соответствие со своей задумкой. На всякий случай я написал через else запасной вариант, если вдруг что-то пошло не так.

Как я обещал, давайте рассмотрим этот пример без then и else:

a=27
if a==27
puts “Все верно. Условие соответствует”
end

Оператор then вы можете опускать или использовать по своему усмотрению. Это не будет ошибкой. Кстати, для любителей Python замена then в виде : также придусмотрена:

 

a=27

if a==27:

puts “Все верно. Условие соответствует”
end

Пока все выглядит так, как должно быть. Но Ruby может нас и удивить. Посмотрите этот же самый пример, только написанный в духе Perl:

a=27
puts “Все верно. Условие соответствует” if a==27

Как видите, здесь нет ни then, ни end. Ruby настолько умен, что может интерпретировать и подобные конструкции. Хотя так и можно писать, все же я лично не рекомендую использовать подобный код.

С этим, думаю, вы разобрались. Как вариант, поэкспериментируйте со знаками >, <, !, >=, <= — у в уроке 3 вы сможете все их рассмотреть.

Еще один важный момент – в любом условии может содержаться несколько вариантов условий. Допустим, вам нужно проверить, входит ли число в указанный диапазон. Давайте рассмотрим этот пример:

puts “ Введите ваше число”
value=gets  #считаем число с клавиатуры
if value>0 && valueputs “Ваше число входит в задуманный диапазон”
else
puts “Извините. Вы ошиблись”
end

Как видите, я задал диапазон бинарным оператором && (И). Это значит, что интерпретатор проверяет оба условия на соответствие. Если с одно из них вернет ложь, то выполнится блок в else. Помимо && в Ruby, есть || (Или). С ним ситуация радикально иная – для выполнения условия достаточно лишь одного сравнения на истину. Важно понимать, что бинарных операторов в условии может быть много. Так что не бойтесь применять их там, где требует логика.

Еще один момент с условиями – они могут быть вложенными друг в друга. Этот прием схож с тем, что применяется в других языках.

If a>0 then

If b==345 then

end

end

Думаю, что вы поймете этот принцип. В любом случае, скоро мы все разберем на практике.

Ну и завершает урок об операторе if оператор elsif. Мы с вами рассматривали пример, когда у нас был всего один вариант в случае несовпадения условия. Но так бывает далеко не всегда. Конечно, можно использовать кучу вложенных операторов if…else или прибегнуть к оператору case, о котором мы поговорим в следующем уроке. Но можно поступить гораздо проще –использовать оператор elsif для многовариантной проверки условия. Давайте рассмотрим его применение на примере. Скрипт будет в зависимости от языка выводить слово «собака» на разных языках.

lang= :ru   #язык будет русским
if lang== :ru then
puts “Собака”
elsif lang== :en then
puts “dog”
elsif lang== :de then
puts “Hund”
elseif lang== :es then
puts “perro”
else
puts “Язык не соответствует.  Будет выведена Собака”
end

Как видите, elsif представляет собой как бы спаренный оператор else и if. Фактически, это то же самое, как если бы мы использовали вложенное ветвление. Однако так код гораздо изящнее. Тем не менее, в отличие от моего любимого Perl, в Ruby есть еще и оператор case, с помощью которого эту программку можно написать еще лучше. А пока просмотрите код. В зависимости от языка, скрипт будет выдавать слово «собака» на разных языках мира.

Пока на этом все. Мы разобрали с вами классический оператор ветвления if then в Ruby. В следующем уроке мы рассмотрим выбор через case и оператор unless.

<<Предыдущий урок                                                    Следующий урок>>

Яндекс.Метрика