Новая синтаксическая конструкция для диапазона: a..b
.
Конструкция a..b
задаёт диапазон элементов.
Значения a,b должны быть целыми или символьными.
В зависимости от контекста a..b
переводится в различные конструкции.
Операция ..
менее приоритетна чем сложение, но более приоритетна чем операция in
.
То есть, следующие выражения можно писать без скобок:
x in 1..5
1+2 .. 3+4
В штатной ситуации a..b
эквивалентно Range(a,b)
:
(1..10).Select(x -> x*x).Println;
var a := Arr(1..10);
var h := HSet(1..10);
(1..5).Cartesian('a'..'z').Println;
Конструкция
x in 1..10
переводится в
(x >= 1) and (x <= 10)
Конструкция
foreach var x in 1..10 do
переводится в
for var x := 1 to 10 do
Оптимизация скорости срезов строк a[f:t]
Подобные срезы оптимизированы заменой на вызов функции s.Substring
Условная операция if
Реализована по аналогии с Алголом и Котлином вместо ? :
var min := if a<b then a else b;
Это позволяет писать более понятный код со вложенными конструкциями:
begin
var (x,y) := (5,-3);
var q :=
if x>0 then
if y>0 then
1
else 4
else
if y>0 then
2
else 3;
Print(q)
end.
и
begin
var x := ReadReal;
var sign := if x>0 then 1
else if x=0 then 0
else -1;
Print(sign)
end.
Стандартная функция ReadInt64
var x := ReadInt64;