Урок 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, но о нем поговорим чуть позже. Давайте рассмотрим эту конструкцию на примере: [ruby] a=27 if a==27 then # если а равно 27 тогда puts “Все верно. Условие соответствует” else #иначе puts “Как вы умудрились здесь накосячить?!” end [/ruby] Это очень простой пример и довольно-таки бессмысленный. Но логику вы должны понять. Я ввел число, затем проверил его на соответствие со своей задумкой. На всякий случай я написал через else запасной вариант, если вдруг что-то пошло не так. Как я обещал, давайте рассмотрим этот пример без then и else: [ruby] a=27 if a==27 puts “Все верно. Условие соответствует” end [/ruby] Оператор then вы можете опускать или использовать по своему усмотрению. Это не будет ошибкой. Кстати, для любителей Python замена then в виде : также придусмотрена: [ruby] a=27 if a==27: puts “Все верно. Условие соответствует” end [/ruby] Пока все выглядит так, как должно быть. Но Ruby может нас и удивить. Посмотрите этот же самый пример, только написанный в духе Perl: [ruby] a=27 puts “Все верно. Условие соответствует” if a==27 [/ruby] Как видите, здесь нет ни then, ни end. Ruby настолько умен, что может интерпретировать и подобные конструкции. Хотя так и можно писать, все же я лично не рекомендую использовать подобный код. С этим, думаю, вы разобрались. Как вариант, поэкспериментируйте со знаками >, <, !, >=, <= — у в уроке 3 вы сможете все их рассмотреть. Еще один важный момент – в любом условии может содержаться несколько вариантов условий. Допустим, вам нужно проверить, входит ли число в указанный диапазон. Давайте рассмотрим этот пример: [ruby] puts “ Введите ваше число” value=gets #считаем число с клавиатуры if value>0 && valueputs “Ваше число входит в задуманный диапазон” else puts “Извините. Вы ошиблись” end [/ruby] Как видите, я задал диапазон бинарным оператором && (И). Это значит, что интерпретатор проверяет оба условия на соответствие. Если с одно из них вернет ложь, то выполнится блок в else. Помимо && в Ruby, есть || (Или). С ним ситуация радикально иная – для выполнения условия достаточно лишь одного сравнения на истину. Важно понимать, что бинарных операторов в условии может быть много. Так что не бойтесь применять их там, где требует логика. Еще один момент с условиями – они могут быть вложенными друг в друга. Этот прием схож с тем, что применяется в других языках.

If a>0 then

If b==345 then

end

end

Думаю, что вы поймете этот принцип. В любом случае, скоро мы все разберем на практике. Ну и завершает урок об операторе if оператор elsif. Мы с вами рассматривали пример, когда у нас был всего один вариант в случае несовпадения условия. Но так бывает далеко не всегда. Конечно, можно использовать кучу вложенных операторов if…else или прибегнуть к оператору case, о котором мы поговорим в следующем уроке. Но можно поступить гораздо проще –использовать оператор elsif для многовариантной проверки условия. Давайте рассмотрим его применение на примере. Скрипт будет в зависимости от языка выводить слово «собака» на разных языках. [ruby] 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 [/ruby] Как видите, elsif представляет собой как бы спаренный оператор else и if. Фактически, это то же самое, как если бы мы использовали вложенное ветвление. Однако так код гораздо изящнее. Тем не менее, в отличие от моего любимого Perl, в Ruby есть еще и оператор case, с помощью которого эту программку можно написать еще лучше. А пока просмотрите код. В зависимости от языка, скрипт будет выдавать слово «собака» на разных языках мира. Пока на этом все. Мы разобрали с вами классический оператор ветвления if then в Ruby. В следующем уроке мы рассмотрим выбор через case и оператор unless. <<Предыдущий урок                                                    Следующий урок>>

Комментарии

6 коммент. на “Урок 4: «Учим скрипт Ruby принимать решение»”
  1. Felix:

    Спасибо, братюнь ! А то так мало инфы в русских интернетах о Ruby !

  2. Nill:

    Вы ничего не перепутали в условии elseif при проверке ? Вместо «==» поставили «=»?

  3. Вячеслав "VeGA" Головлев:

    Спасибо, что обратили внимание на ошибку. Да, там должно стоять == вместо =. Это Word проявляет инициативу, когда я копирую в статью код с NetBeans. В свою очередь, мой ляп в том, что я редко проверяю свой текст статьи.
    Еще раз спасибо таким бдительным читателям, как вы.

  4. Nill:

    Вам спасибо за хорошие уроки.

  5. Анатолий:

    В данном коде не дописано условие:

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

    Также, исправьте строку

    value=gets #считаем число с клавиатуры

    на

    value=gets.to_i #считаем число с клавиатуры

  6. alkemonka:

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

Добавить комментарий

Внимание! Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: