открыть: Синтаксис 2Syntax 1

Цикл each

Для обхода массива, мапы и свойств объекта используется конструкция `each.

Обход массива

array1 = [1 2 3 4] array2 = [] array1 `each index : value ~ array2.# = value * 2 ; array2 #echo s# -- выдаст: 2 4 6 8

Обход ассоциативного массива

prices = {%яблоко:10 %банан:8 %вишня:14} -- Цены (наименование : цена за кг) cart = {%яблоко:2.0 %вишня:1.5} -- Покупки (наименование : вес в кг) total_price = 0.0 cart `each key : weight ~ total_price += prices[key] * weight ; ['Цена всей покупки: ', total_price] #echo #

Смотри также: Ключевые слова: break, next

Обход объекта класса

$point3 ~ x y z ; -- Масштабирование &scale $point3: o factor ~ -- обход по ссылке o `each property_name : value& ~ value *= factor ; ret = o ; `plain [10 10 20] #as $point3 => position &scale 2 #echo [', ' ":"] -- выдаст 'x:20, y:20, z:40'

Смотри также: Классы и объекты

Отделение первого шага цикла

Тело цикла можно разделить символом \ на две части. Тогда первая часть будет выполняться только на первом шаге цикла, а вторая часть – на всех последующих шагах.

{%Ольга:22, %Николай:21, %Сергей:20} `each name : age ~ "\(name), \(age)" #echo # \ "\n" #echo # "\(name), \(age)" #echo # ;

В циклах `for и `while тоже доступна такая конструкция.

Задание последовательности обхода

Есть возможность обходить элементы в обратном порядке. Для этого перед переменной элемента ставится знак -.

[1 2 3] `each index : -item ~ item #echo # ; -- выдаст: 321

Чтобы обходить элементы мапы или свойства объекта класса в порядке отсортированных ключей перед переменной ключа ставится знак +, а в обратном порядке ключей знак -.

{1:%One, 3:%Three, 2:%Two} => array array `each +key : value ~ key #echo # ; -- Выдаст: 123 n# #echo # -- Перевод строки array `each -key : value ~ key #echo # ; -- Выдаст: 321