2. Fluxo de controle e dados compostos
Use if para decisões, while quando a continuação depender de estado e
for (_, value) := range values para percorrer uma sequência. Flecha exige
condições booleanas; inteiros não viram valores verdade automaticamente.
Arrays fixos possuem elementos inline. Slices verificadas emprestam um intervalo
e mantêm o comprimento para validar limites. string possui o texto e
stringv é uma view emprestada. Estruturas agrupam campos e ciclo de vida;
enums definem uma família fechada de valores. Escolha a menor representação que
descreva o tempo de vida necessário e converta explicitamente na fronteira.
Consulte arrays fixos, slices verificadas, strings, estruturas e enums.
Exemplo testado
Ordene um array fixo com loops limitados, mutação por referência verificada e saída visível.
Arquivo: curriculum/main-evidence/single/fixed_arrays.fl
// Build: build/flecha build examples/fixed_arrays.fl -o build/fixed_arrays// Prints 1 through 5, each on its own line, and exits with 0.
void sort(&[5]i32 values) { usize pass = 0; while pass < (*values).len() { usize index = 0; while index + 1 < (*values).len() { if (*values)[index] > (*values)[index + 1] { i32 temporary = (*values)[index]; (*values)[index] = (*values)[index + 1]; (*values)[index + 1] = temporary; } index = index + 1; } pass = pass + 1; }}
i32 main() { [5]i32 original = [5, 1, 4, 2, 3]; sorted := original; // Copies the elements into independent inline storage. sort(&sorted); if original[0] != 5 { return 1; }
usize index = 0; while index < sorted.len() { stdoutln(sorted[index]); index = index + 1; }
[4]u8 zeros = none; [4]u8 repeated = [7; 4]; const [4]u8 fixed = repeated; [0]u8 empty = []; if zeros[0] != 0 or fixed[3] != 7 or empty.len() != 0 { return 2; }
[2][3]u8 grid = [[1, 2, 3], [4, 5, 6]]; cell := &grid[1][2]; *cell = 42; // cell's last use has passed; direct access is permitted again. if grid[1][2] != 42 { return 3; } return 0;}O bloco acima é o arquivo completo executado pelos comandos abaixo.
O array possui cinco inteiros com tamanho fixo. sort recebe uma referência mutável verificada, e os dois loops derivam seus limites desse tamanho conhecido em vez de usar um ponteiro não verificado.
Comandos
flecha check curriculum/main-evidence/single/fixed_arrays.flflecha build curriculum/main-evidence/single/fixed_arrays.fl -o build/fixed_arraysbuild/fixed_arraysSaída esperada
12345status de saída: 0Referência relacionada: /examples/fixed_arrays/.