Объекты, переменные, условный оператор IF

В четвёртом уроке мы приступаем к самым азам программирования — переменным и операции if-else (если-иначе), которая позволяет программе выбрать, по какому пути пойти при выполнении.

План урока

  1. Что такое объекты и переменные в Ruby, как ими пользоваться
  2. Что такое переменная, как управлять объектами с помощью переменных
  3. Операция if-else, логический тип данных.

операторы И и ИЛИ

Объекты в программах

В реальном мире все состоит из объектов: люди, животные, дома, горы, реки, планеты, дожди и т. д.

Многообразие объектов нашего мира

Современные программы принято тоже создавать из объектов. Но объектов «абстрактных», то есть виртуальных, существующих только в тексте программы и в памяти компьютера.

Например в программе на Руби любое число или любая строка — это объект.

В жизни у любого конкретного объекта есть его тип. Например, дом, в котором вы живете имеет тип «дом», как и множество других домов, даже непохожих на ваш. Или вы сами — объект типа «человек».

Человек Да Винчи

В программировании тип конкретного объекта называется класс. Чтобы узнать класс любого объекта в Ruby можно написать после этого объекта .class.name.

Вот несколько примеров классов в Ruby:

Строка:

puts "Я строка".class.name

Выведет в консоли:

String

Целое число (что такое целое число):

puts 5.class.name

Выведет:

Fixnum

Число с плавающей точкой (что такое число с плавающей точкой):

puts 15.2.class.name

Выведет:

Float

Наш обычный мир состоит не только из объектов, но из различных процессов, действий, взаимодействий между объектами («люди» ходят в «магазины», «рыбы» плавают в «водоёмах» и т. д.).

Программы в современных языках программирования тоже по большому счету состоят из объектов и различных взаимодействий между ними. Этот вопрос мы еще подробнее раскроем в других уроках.

Переменные, создание и присвоение

Для того, чтобы обращаться с объектами, нам нужно их как-то назвать, повесив на объект ярлык. Например при рождении нового объекта типа «человек» ему обычно дают имя. И вместе с фамилией и отчеством это позволяет отличить этого ребенка от десятков других в этом же роддоме.

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

В программе чтобы оперировать объектами их тоже нужно как-то отличать, как-то на них ссылаться.

Для этого в программировании есть такое понятие как переменные. Итак, грубо говоря, переменная — это ярлычок, указывающий на конкретный объект.

Имя человеку присваивается в момент рождения

Сама по себе переменная в Ruby — просто уникальный набор символов английского алфавита и цифр, который можно использовать в программе для действий с объектом. Этот набор символов называемся «имя переменной» и вы сами придумываете имена своих переменных.

Связь объекта с переменной происходит с помощью знака =.

hello = 'Привет, пацаны!'

Таким образом мы переменной hello присвоили объект 'Привет, пацаны!' класса «строка» (String).

Обратите внимание, что таким образом мы создали объект, он теперь сохранён в памяти компьютера. В этом случае принято говорить, что мы присвоили переменной hello значение 'Привет, пацаны!'.

Если мы после этого напишем

puts hello

То программа выведет эту строку из переменной hello на экран, потому что программа уже знает, что такое hello и что в этой переменной лежит.

Переменная может быть пустой, то есть не указывать ни на какой конкретный объект. Как пустой бланк паспорта. А может указывать на один объект, а потом на другой, если мы так захотим.

Пустой паспорт для поездок заграничных

Такие номера проделывают с паспортами разные жулики, к счастью в программировании в отличие от реальной жизни, это не является правонарушением. :)

Операция if-else (если-иначе)

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

Программа на перепутье

Суть этой операции в проверке какого-то условия и выполнении определённых действий в зависимости от того, выполнено это условие или нет.

if (условие)
  сделать, если условие выполнено
else
  сделать, если условие не выполнено
end

Для того, чтобы записать условие, важно понять, что такое «Логический тип».

По-другому он называется булевский тип (по-английски Boolean) — это такой тип данных, который может содержать только одно из двух значений: true или false, истина или ложь. Думайте об этом как об ответе на закрытый вопрос, на который можно ответить только «Да» или «Нет».

Для формулировки условия нам нужно записать тот самый закрытый вопрос и для этого в Ruby есть специальный синтаксис.

В самом простом случае нам нужно проверить, совпадает ли значение переменной с каким-то нашим ожиданием. В этом нам поможет оператор «равно-равно» ==, который сравнивает то, что справа от него, с тем, что слева от него, и говорит true, если эти два объекта совпадают и false, если нет.

Запись if в этом случае будет выглядеть вот так:

if (hello == 'Привет, пацаны')
  puts 'Здорово!'
else
  puts 'Ты кто?'
end

Условие в Ruby можно записывать и без скобок, но, пока вы новичок, очень рекомендуем вам писать именно так. В приведённом примере если в переменной hello содержится строка 'Привет, пацаны', то программа выведет на экран текст «Здорово», а если это условие не выполнено, то напишет текст «Ты кто?».

Если нам необходимо сравнить два объекта и сделать что-то, если они не совпадают, нам необходимо использовать оператор «не-равно» !=:

if (hello != 'Здравствуйте, Господа')
  puts 'Не изволите ли поздороваться, сударь?'
else
  puts 'И вам не хворать, любезнейший'
end

В этом случае если в переменной hello содержится что-то, отличное от строки "Здравствуйте, Господа", мы пойдём по верхнему пути, а если (вдруг) содержится, то по нижнему.

Операторы И, ИЛИ

Если нам нужно проверить сложное условие, которое состоит из двух сравнений, то нам понадобятся операторы || и &&— это операторы ИЛИ и И. Они позволяют объединять вместе сразу несколько сравнений.

Различие операторов И и ИЛИ

Они используются для сложных проверок:

if (hello == 'Здравствуйте, Господа' || hello == 'Привет, пацаны')
  puts 'Привет!'
else
  puts 'Хам!'
end

Если в переменной hello строка 'Здравствуйте, Господа' или строка 'Привет, пацаны', то этот код напишет нам «Привет». Если же нет, всё пойдёт по другому сценарию и программа будет ругаться.

if (hello != 'Здравствуйте, Господа' && hello != 'Привет, пацаны')
  puts 'Хам!'
else
  puts 'Привет!'
end

Всё то же самое. Обратите внимание на логику: если в переменной hello не содержится 'Здравствуйте, Господа' и не содержится 'Привет, пацаны', то значит, с нами не поздоровались. Имеем право возмутиться. :)

Важно четко запомнить — оператор И объединяет другие условия в одно большое условие, и это большое условие выполняется только когда все условия выполняются.

Оператор же ИЛИ объединяет другие условия в одно большое условие, и это большое условие выполняется когда хотя бы одно из условий выполняются.

Про другие операторы сравнения и логические операции можно почитать по ссылкам:

Итак, в этом уроке мы узнали, что такое переменные и объекты. Также мы научились управлять программой в зависимости от того, какие значения содержаться в наших переменных.

Чтобы закрепить материал, обязательно выполните домашнее задание, а в следующем уроке мы будем использовать полученные нами знания, что написать простенькую текстовую игрушку-квест.

Мы покажем, что даже этих простых знаний уже достаточно для того, чтобы написать что-то разумное и интересное.