Операторы ветвления - операторы выполняющие код в зависимости от каких либо условий. В этой статье будет рассмотрено три оператора: if, mif, case. Все три оператора используются в коде функции.
Оператор if:
В начале идёт ключевое слово if, затем опционально идут объявления переменных и констант или выражения, каждое такое объявление заканчивается точкой с запятой, все созданные переменные и константы доступны только внутри if. Далее идёт выражение возвращающее тип Bool. С новой строки и на 4 пробела правее идёт ключевое слово then, если выражение в if возвращает true, то выполняется код принадлежащий then. Если код в then умещается в одну строку, то код можно писать сразу после then. После then с новой строки опционально идёт ключевое слово else являющееся аналогом then, но код из else выполняется только если выражение в if вернуло false. Примеры if:
Оператор mif:
В начале идёт ключевое слово mif, затем с новой строки и на 4 пробела правее одно или несколько выражений разделенных точкой с запятой, каждое выражение должно возвращать значение типа Bool. Выражения вычисляются по очереди и если какое либо выражение возвращает true, то остальные выражения прекращают выполнятся, а начинает выполняться код принадлежащий выражениям. С новых строк таких выражений и кода может быть сколько угодно, если в одной строке все выражения оказались ложными, то выполнение переходит к новым выражениям. Если нужно что бы последнее выражение выполнилось если все остальные оказались не верными, то можно вместо последнего выражения написать default. Если в конце кода идёт ключевое слово fallthrough, то начнётся выполнение кода из следующего выражений, игнорируя само выражение. Примеры mif:
Оператор case:
В начале идёт ключевое слово case, затем выражение возвращающее значение имеющее один из следующих типов: UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, [UInt8]. После чего идёт ключевое слово of. С новой строки всё устроенно точно так же как и в mif, включая разделение через точку с запятой, default и fallthrough, но вместо выражений возвращающих Bool, возможные варианты значения выражения расположенного в case. Если в case выражение возвращает [UInt8], то варианты могут быть только строками, иначе в качестве вариантов могут служить числа(константы), тип(в этом случае используется уникальный номер типа), символ заключённый в одинарные кавычки(в этом случае возвращается код символа), либо один из вариантов перечисления(в этом случае все остальные варианты то же должны быть вариантами перечисления). Все варианты должны быть уникальны. Примеры case:
Разумеется case можно реализовать через mif, но case удобнее и работает быстрее.
Оператор if:
В начале идёт ключевое слово if, затем опционально идут объявления переменных и констант или выражения, каждое такое объявление заканчивается точкой с запятой, все созданные переменные и константы доступны только внутри if. Далее идёт выражение возвращающее тип Bool. С новой строки и на 4 пробела правее идёт ключевое слово then, если выражение в if возвращает true, то выполняется код принадлежащий then. Если код в then умещается в одну строку, то код можно писать сразу после then. После then с новой строки опционально идёт ключевое слово else являющееся аналогом then, но код из else выполняется только если выражение в if вернуло false. Примеры if:
if a == 10
then exit() //выполнится если a равно 10
if b := a + 12; b:foo(); b == 37 //создаст переменную b
then
a -= 12 //выполнится если b равно 37
print(a)//и это тоже
else print(b)//выполнится если b не равно 37
//здесь b уже не существует
if b .= allOk?(); b //это другое b
then print("Ok.") //выполнится если b равен true
else print("Something is wrong.")//выполнится если b равен false
Оператор mif:
В начале идёт ключевое слово mif, затем с новой строки и на 4 пробела правее одно или несколько выражений разделенных точкой с запятой, каждое выражение должно возвращать значение типа Bool. Выражения вычисляются по очереди и если какое либо выражение возвращает true, то остальные выражения прекращают выполнятся, а начинает выполняться код принадлежащий выражениям. С новых строк таких выражений и кода может быть сколько угодно, если в одной строке все выражения оказались ложными, то выполнение переходит к новым выражениям. Если нужно что бы последнее выражение выполнилось если все остальные оказались не верными, то можно вместо последнего выражения написать default. Если в конце кода идёт ключевое слово fallthrough, то начнётся выполнение кода из следующего выражений, игнорируя само выражение. Примеры mif:
mif a == 10 //если a равно 10 print(1) //то выполнится этот код b = 12 //и этот тоже, после чего будет выполнятся код после всего mif c; a == 12 // если c равен true или a равно 12 a = 0 //то выполнится этот код fallthrough // а затем выполняется вот этот | false // | c = false // код <------------------------| k = 10 //и этот тоже
, после чего будет выполнятся код после всего mif
a.inRange?(45, 72) //если a находится в диапазоне от 45 до 72 exit(); //то выполнится этот код default //если ни одно из выше указанных условий не верно print("Hello;") //то выполнится этот код mif a == 3 //если a равно 3 print("3") //то выполнится этот код
, после чего будет выполнятся код после всего mif
d == 3 //если d равно 3 print("10")//то выполнится этот код
Оператор case:
В начале идёт ключевое слово case, затем выражение возвращающее значение имеющее один из следующих типов: UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, [UInt8]. После чего идёт ключевое слово of. С новой строки всё устроенно точно так же как и в mif, включая разделение через точку с запятой, default и fallthrough, но вместо выражений возвращающих Bool, возможные варианты значения выражения расположенного в case. Если в case выражение возвращает [UInt8], то варианты могут быть только строками, иначе в качестве вариантов могут служить числа(константы), тип(в этом случае используется уникальный номер типа), символ заключённый в одинарные кавычки(в этом случае возвращается код символа), либо один из вариантов перечисления(в этом случае все остальные варианты то же должны быть вариантами перечисления). Все варианты должны быть уникальны. Примеры case:
case a of
"Вадим" //если a равно "Вадим"
print("Здравствуйте Вадим Александрович!\n") //то выполняется этот код
"Сергей" //если a равно "Сергей"
print("Здаров Серёга!\n") //то выполняется этот код
"Максим"; "Павел"; "Алексей" //и тд
print("Вы вошли как ", a, ".\n")
default
print("Мы здесь таких как ты не любим!")
reportProblem(rp_wrongUser, a)
case b.getTypeNumber() of
UInt8; UInt16; UInt32; UInt64
exit();
Int8; Int16; Int32; Int64
panic();
case c of
'a'; 'b'; 'c'; 'd'; 'e'; 'f'
c -= 'a' - 10
'0'; '1'; '2'; '3'; '4'; '5'; '6'; '7'; '8'; '9'
c -= '0'
case d of
some_variant1 //some_variant* это варианты перечисления
k = 13
l = 7
some_variant2; some_variant3
l = 9
fallthrough
some_variant4
k = 92
case e of
12
l = 7
13; 14
l = 700
15
exit();
Разумеется case можно реализовать через mif, но case удобнее и работает быстрее.
Комментариев нет:
Отправить комментарий
Пожалуйста без мата и оскорблений. Если хотите сообщить об ошибках, для этого есть форма обратной связи.