Pular para o conteúdo

09 · Estruturas de Dados

Entradas condicionais em arrays

Use if condição => valor e for item in itens => valor dentro de um array. Entradas são produzidas na ordem escrita. Condições falsas omitem entradas; nil ainda ocupa uma posição. Arrays aninhados continuam sendo valores sem um spread explícito.

Nesta página

Use if condição => valor e for item in itens => valor dentro de um array. Entradas são produzidas na ordem escrita. Condições falsas omitem entradas; nil ainda ocupa uma posição. Arrays aninhados continuam sendo valores sem um spread explícito.

Exemplo completo

Entradas condicionais em arrays.

24-array-entries.zolo
Playground
// Mix ordinary values, conditional entries and loops in one array.

struct Page { title: str, enabled: bool }

let admin = true
let pages = [
    Page { title: "Reports", enabled: true },
    Page { title: "Drafts", enabled: false },
]
let menu = [
    "Home",
    if admin => "Admin",
    for page in pages => if page.enabled => page.title,
]
for title in menu { print(title) }
// expected: Home

// expected: Admin

// expected: Reports


let positions = [for position, page in pages => position + 10]
print(positions[0])
// expected: 10

print(positions[1])
// expected: 11


let flattened = [0, for row in [[1, 2], [3]] => for cell in row => cell, 4]
print(flattened.len())
// expected: 5


let with_nil = [if true => nil, 7]
print(with_nil.len())
// expected: 2

Regras e comportamento

Condições e recuperação de erros · Documentação

A partir de um checkout do repositório:

zolo examples/features/04-control-flow/24-array-entries.zolo

Mantendo apenas as entradas que correspondem

O construtor filtra os padrões antes de avaliar a entrada. O exemplo conta as avaliações para mostrar que a leitura com erro não executa o corpo.

09-filtered-builders.zolo
Playground
// Failed readings produce neither an entry nor a body evaluation.

let readings: [Result<int, str>] = [.Ok(3), .Err("offline"), .Ok(5)]
var evaluated = 0
fn double(value: int) -> int { evaluated += 1; value * 2 }
let values = [for case .Ok(value) in readings => double(value)]
print(values[0]) // expect: 6

print(values[1]) // expect: 10

print(values.len()) // expect: 2

print(evaluated) // expect: 2

let indexed = #{for case .Ok(value) in readings => [value]: value * 2}
print(indexed[3]) // expect: 6

print(indexed[5]) // expect: 10

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br