Методика изучения управляющих конструкций в онлайн среде выполнения кода Crystal
Хорошо известно, любой язык в общем и язык программирования в частности — это синтаксис и семантика. Управляющие конструкции или операторы языка программирования это основа его семантики. Известно, что семантика языка программирования — — это правила придания смысла синтаксически правильным программам. В конечном счете эти правила определяют ту последовательность действий вычислительной машины, которую она должна выполнить, работая по данной программе. Это в полной мере относится и к языку программирования Crystal.
В соответствие с теоремой Дейкстры операторы языка программирования позволяют реализовать любой алгоритм, любой сложности на языке программирования. Это относится, в том числе, и к языку программирования Crystal.
В предыдущей статье «Простые типы данных языка программирования Crystal» мы писали, изучение языка программирования Crystal на начальном этапе целесообразно осуществлять с помощью онлайн среды программирования.
В соответствие с методикой итерационного и инкрементного подхода, рассмотренного ранее в статье «Последовательность изучения языка программирования»изучения языков программирования на первом цикле обучения методам процедурного программирования после изучения простых типов данных следует освоить использование управляющих конструкций в программах.
Использование управляющих конструкций в программах
В любом современном языке программирования имеется три встроенных оператора(управляющей конструкции): присваивание, условный оператор и оператор цикла, реализующих программно базовые алгоритмические структуры — линейную, ветвление и повторение, соответственно. Эти операторы языка программирования Crystal являются основой его семантики и, по своей сути, во многом схожи с аналогичными операторами языков программирования C, С++, С# и други.
Присваивание выполняется путем пересылки данных из одной ячейки(регистра) в другую. В программе оператор присваивания обозначается с помощью литерала присваивания (=).
Например, присваивание локальной переменной local = 1, присваивание глобальной переменной $global = 4. В языке Crystal допускается множественное присваивание нескольким переменным одновременно, разделяя их и присваемые выражения запятой. Например,
name, age = «Crystal», 71.
Прежде чем перейти к изучению управляющих конструкций, необходимо рассмотреть, что такое значения truthy и falsey:
- truthy — это значение, приводимое к логическому true операторами if, unless, while или until,
- falsey — значение, приводимое к логическому false.
Значениями falsey могут быть только nil, false и нулевые указатели (указатели с нулевым адресом ячейки памяти). Все остальные значения truthy.
Условный оператор языка программирования Crystal if
В языке Crystal для программной реализации базовой алгоритмической структуры ветвление применяется условный оператор if, который имеет различные формы представления(записи и семантики).
Основная форма условного оператора if имеет следующий синтаксис.
- if bool_condition
- x = y
- elsif other_ bool _condition
- x=z
- else
- puts “Ни одно условие не выполняется”
- end
Работа оператора заключается в следующем — if выполняет ветку then (x = y) если условие truthy (сводится к true), затем проверяется следующее условие и if выполняет свою ветку then (x=z) если второе условие truthy (сводится к true), в противном случае выполняет ветку else. Любая ветка, кроме первой может быть опущена.
Другие формы записи условного оператора if:
-сокращённая запись: a = 2 if bool_condition;
if возвращает значение последнего выражения, вычисленного в каждой из его ветвей:
- a = if 2 > 1
- 3
- else
- 4
- end
Тернарный оператор if позволяет записывать условия компактнее:
a = 1 > 2 ? 3 : 4

При выполнении условного оператора могут возникать ошибки. Например.

Управляющая конструкция unless
Оператор unless выполняет ветку then если условие falsey, в противном случае выполняет ветку else. Можно сказать, он действует как if, но наоборот:
- unless bool _condition
- then_expression
- else
- else_expression
- end
То же, что и:
- if bool _condition
- else_expression
- else
- then_expression
- end
Этот же оператор можно записать как суффикс close_door unless door_closed?

Выбор из большого количества вариантов целесообразно выполнять с помощью управляющей конструкции case.
Управляющее выражение case сопоставляет одно значение с рядом других значений и выполняет оператор при совпадении.
- case expression
- when value1, value2
- do_something
- when value3
- do_something_else
- else
- do_another_thing
- end
Эта конструкция соответствует следующему условному оператору if.
- tmp = expression
- if value1 === tmp || value2 === tmp
- do_something
- elsif value3 === tmp
- do_something_else
- else
- do_another_thing
- end
Обратите внимание, что литерал === используется для сравнения, аналогичного сравнению в операторе case.

Условные операторы языка программирования Crystal.
Оператор цикла while
Синтаксис оператора while имеет вид
- while bool_condition
- x=23*y+b
- z=5/x+c
- bool_condition =some #обязательное изменение условия
- end
Основу семантики оператора while составляет утверждение о том, что при выполнении оператора, прежде всего, проверяется условие bool_condition, и если оно имеет значение truthy, то выполняется тело оператора и так до тех пор, пока условие не станет равным falsey, иначе бесконечный цикл.
Чтобы прервать выполнение цикла while, нужно воспользоваться оператором break, например:
- a = 2
- while (a += 1) < 20
- if a == 10
- puts a
- break
- end
- end
Чтобы перейти к следующей итерации цикла while, необходимо применить оператор next. После получения инструкции next будет проверено условие while, и если оно truthy, будет выполнено тело цикла.
- a = 1
- while a < 5
- a += 1
- if a == 3
- next
- end
- puts a
- end
Именно поэтому код в теле может никогда не выполниться. Код в теле выполняется до тех пор, пока условие truthy.
Оператор цикла until
Оператор цикла until аналогичен оператору while, но с противоположным условием. Синтаксис оператора имеет вид.
- until bool _condition
- do_this
- end
То же, что и:
- while bool _condition
- do_this
- end
Аналогично, основу семантики оператора until составляет утверждение о том, что при выполнении также проверяется условие bool_condition, и если оно имеет значение falsey, то выполняется тело оператора и так до тех пор, пока условие не станет равным, truthy, иначе бесконечный цикл.
В теле until можно также использовать инструкции break и next.

Примеры использования операторов в программе
Изучение управляющих конструкций языка программирования Crystal следует закреплять путем выполнения простейших задач. Такими задачами могут быть.
Найти суммы натурального ряда, четных и нечетных чисел от 0 до N.
- i,n= 0,100
- si,sc,sn = 0,0,0
- puts «Результат цикла while:»
- while i<n
- si=si+i
- sc=sc+2*i
- sn=sn+2*i+1
- if i<5
- puts «Итерация: i= #{i}, si= #{si},sc=#{sc},sn=#{sn}»
- end
- i=i+1 #обязательное изменение условия
- end
- puts «Суммы: n= #{n}, si= #{si},sc=#{sc},sn=#{sn}»
Следующая задача. Выполнить деление чисел из натурального ряда с проверкой деления на ноль.
- i,n= 0,10
- puts
- puts «Результат цикла until:»
- zn=-12
- until i>n
- zn=zn+3
- if zn!=0
- di=3*i/zn
- else
- zn=zn+3
- puts «Знаменатель равен нулю»
- end
- puts «Итерация #{i},di=#{di},z=#{zn}»
- i=i+1 #обязательное изменение условия
- end

Заключение
Операторы языка программирования Crystal это основа его семантики и возможностей программирования алгоритмов решения различных прикладных задач.
Программная реализация базовых алгоритмических структур в языке программирования Crystal позволяет применять его в структурных методах создания программного обеспечения.
Операторы языка программирования Crystal, реализующие базовые алгоритмические структуры, позволяют запрограммировать любые алгоритмы решения любых задач.
Статьи по теме
Связанные материалы
- Что такое программирование?
- Как выбирать язык программирования высокого уровня для изучения
- Что выбирать язык или платформу программирования?
- Как быстро изучить язык программирования
- Как изучать простые типы данных языка программирования?
- Как стать специалистом по большим данным?