4. Управляющие конструкции и функции¶
← Параметры · Оглавление · Далее: ввод, вывод и системные команды →
if / elif / else¶
Условие должно быть Boolean.
$status = 503
if $status == 200 {
println "ok"
} elif $status >= 500 {
println "server error"
} else {
println "other"
}
while¶
$counter = 0
while $counter < 3 {
println "counter=" + $counter
$counter += 1
}
for¶
Цикл for работает со списками и диапазонами:
$items = ["a", "b", "c"]
for $item in $items {
println $item
}
for $i in 0..3 {
println "exclusive " + $i
}
for $i in 0..=3 {
println "inclusive " + $i
}
0..3 создаёт диапазон от 0 до 3, не включая 3. 0..=3 включает правую границу. Если левая граница больше правой, диапазон идёт в обратную сторону.
break и continue¶
for $i in 0..10 {
if $i == 2 {
continue
}
if $i == 5 {
break
}
println $i
}
Функции¶
Функция объявляется именем и блоком. Имена часто пишутся в стиле Build-Project.
Say-Hello {
println "Hello"
}
Add-Values($left, $right) {
return $left + $right
}
Say-Hello()
println Add-Values(2, 3)
Если функция принимает один аргумент, скобки при вызове можно опустить:
Print-Line($value) {
println $value
}
Print-Line "hello"
Переменное число аргументов¶
Последний параметр можно сделать вариативным через ...:
Collect-Values($values...) {
return $values
}
$items = Collect-Values(1, 2, 3)
println $items.Join(", ")
try / catch¶
Исключения Java и ошибки выполнения можно обрабатывать через try / catch:
use [[ java.lang.Integer ]] as Integer
try {
Integer.parseInt("not-a-number")
} catch NumberFormatException as $err {
println "invalid number: " + $err.getMessage()
}
Тип исключения можно указать коротким именем для стандартных java.lang-исключений, полным Java-именем, Java-ссылкой [[ ... ]] или псевдонимом из use.
throw¶
if $failed {
throw "Something went wrong"
}
throw new RuntimeException("Java exception")
Если справа указан объект Throwable, он выбрасывается как Java-исключение. Обычное значение превращается в ошибку интерпретатора с текстом этого значения.
defer¶
defer откладывает выполнение выражения до выхода из текущей области видимости. Отложенные действия выполняются от последнего к первому.
use [[ java.lang.System ]] as System
{
defer System.out.println("first")
defer System.out.println("second")
}
Вывод будет таким:
second
first
defer выполняется при обычном выходе из блока, при исключении, return, break, continue и exit.
← Параметры · Оглавление · Далее: ввод, вывод и системные команды →