Slide 8 de 37
Funções nativas
Tamanho e bytes
proc main(): void {
fruit := ["pear", "apple", "kiwi"]
echo len(fruit)
echo bytes("café")
}
Crescendo e encolhendo
proc main(): void {
mut Str[dyn] basket = ["pear"]
append(basket, "apple")
prepend(basket, "kiwi")
echo basket
if basket bounds 0 {
echo drop(basket, 0, 0)
}
echo basket
}
Juntando, dividindo e encontrando
proc main(): void {
fruit := ["pear", "apple", "kiwi"]
line := join(fruit, ", ")
echo split(line, ", ")
if indexOf(fruit, "apple") is Result.Ok(i) {
echo fruit[i]
}
}
Percorrendo um vetor
func isLong(fruit: Str): Bool {
return len(fruit) > 4
}
func evenHalf(n: Int): Result<Int, Bool> {
if n % 2 == 0 { return Result.Ok(n / 2) }
return Result.Error(false)
}
proc main(): void {
fruit := ["pear", "apple", "kiwi"]
echo map(fruit, isLong)
echo filter(fruit, isLong)
echo filterMap([1, 2, 3, 4], evenHalf)
echo sort(fruit)
}
Tabelas
proc main(): void {
table := [["name", "role"], ["ada", "engineer"], ["grace", "admiral"]]
echo row(table, "ada")
echo column(table, "role")
}
Estas estão sempre no escopo, sem precisar de import. len conta os elementos de um vetor ou os caracteres de uma Str; bytes conta o armazenamento de um vetor ou os bytes UTF-8 de uma Str. append e prepend fazem crescer um vetor dinâmico mutável em uma das pontas; drop remove um intervalo e devolve exatamente o que removeu. join concatena um vetor de Str com um separador entre cada par, e split é o seu inverso. indexOf encontra o primeiro elemento igual e, diferente de um -1 solto, um índice Ok é sempre seguro de usar sem guarda. row e column extraem a linha ou coluna de uma Table pela primeira célula ou pela célula do topo. map, filter e filterMap cada um percorre um vetor com um func — map transforma cada elemento, filter mantém os que um predicado diz que sim, filterMap faz as duas coisas em uma passada — e sort põe um vetor em ordem, no lugar quando aparece isolado como instrução sobre um vetor mut.Uma declaração sua — um func, proc, query ou type com um desses nomes — vence a função nativa em toda chamada sem qualificação, que continua acessível como hive.<nome>.