test "for basics" {
const items = [_]i32 { 4, 5, 3, 4, 0 };
var sum: i32 = 0;
// For loops iterate over slices and arrays.
for (items) |value| {
if (value == 0) {
continue;
}
sum += value;
}
assert(sum == 16);
for (items[0..1]) |value| {
sum += value;
}
assert(sum == 20);
var sum2: i32 = 0;
for (items) |value, i| {
assert(@TypeOf(i) == usize);
sum2 += @intCast(i32, i);
}
assert(sum2 == 10);
}
test "for reference" {
var items = [_]i32 { 3, 4, 2 };
for (items) |*value| {
value.* += 1;
}
assert(items[0] == 4);
assert(items[1] == 5);
assert(items[2] == 3);
}
test "for else" {
var items = [_]?i32 { 3, 4, null, 5 };
var sum: i32 = 0;
const result = for (items) |value| {
if (value != null) {
sum += value.?;
}
} else blk: {
assert(sum == 12);
break :blk sum;
};
assert(result == 12);
}
Замечу, что в Zig нет итераторов, но можно определить внутреннюю структуру (обычно Iterator) и c функциями next, prev и т.д. и использовать while:
var it = somevar.iterator();
while (it.next()) |value| {
...
}
В предстоящем релизе значительно улучшены compiletime-возможности (помимо прочего), так что у Zig большое будущее. :)
P.S. Используется подсветка кода С++.
Я некоторое время экспериментировал с D, сделал пару PR, но затем эти nogc, pure, system, etc. стали просто бесить.
пару примеров того что в Nim реализовано лучше чем в D?
1. Макросы. Вы можете создать свой DSL средствами самого языка. Так, например, в Nim реализованы юниттесты. Или макрос scanf, который на этапе компиляции преобразуется в вызовы соответсвующих функций и поэтому парсинг работает очень быстро.
2. Конвертеры
3. Концепты
Для разработчиков игр/графики, думаю, будет интересно взглянуть на opengl-sandbox. Демо.
Я просто брюзжу.
Не пишите так, пожалуйста.
Впервые встречаю такое сочетание.
Что это, есть ссылка?
Обучение было неглубоким?
Из того, что пробовал и пользуюсь (по убыванию удобства):
Sublime Merge
GitQlient
qgit
CuteGit
Это всё, что вам нужно знать о лидерах в онлайн образовании.
Вся статья пропитана этим же.
Замечу, что в Zig нет итераторов, но можно определить внутреннюю структуру (обычно Iterator) и c функциями next, prev и т.д. и использовать while:
В предстоящем релизе значительно улучшены compiletime-возможности (помимо прочего), так что у Zig большое будущее. :)
P.S. Используется подсветка кода С++.
Ну а пока есть FunctionalPlus (C++14), range-v3 (C++14/17/20) и NanoRange (C++17).
Уже есть sqldiff и расширение Session, правда, с рядом ограничений.
Есть CSV Virtual Table.
Пообщаться можно на Ru.Board в этом топике.
1. Макросы. Вы можете создать свой DSL средствами самого языка. Так, например, в Nim реализованы юниттесты. Или макрос scanf, который на этапе компиляции преобразуется в вызовы соответсвующих функций и поэтому парсинг работает очень быстро.
2. Конвертеры
3. Концепты
Для разработчиков игр/графики, думаю, будет интересно взглянуть на opengl-sandbox. Демо.
Nim имеет столько фишек, что D и рядом не стоял. :)