Pular para o conteúdo

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

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

Comandos
flecha check curriculum/main-evidence/single/fixed_arrays.fl
flecha build curriculum/main-evidence/single/fixed_arrays.fl -o build/fixed_arrays
build/fixed_arrays

Saída esperada

Saída esperada
1
2
3
4
5
status de saída: 0

Referência relacionada: /examples/fixed_arrays/.