Перейти к содержанию

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.

← Параметры · Оглавление · Далее: ввод, вывод и системные команды →