proc main(): void {
echo len(["pear", "apple", "kiwi"]) // 3
echo bytes("café") // 5
mut Str[dyn] basket = ["pear"]
append(basket, "apple")
prepend(value: "kiwi", vector: basket) // nomeados, em qualquer ordem
echo basket
// os dois limites de drop são provados como um índice, que é o próximo slide:
// aqui a guarda é que basket tem um primeiro elemento.
if basket bounds 0 {
echo drop(basket, 0, 0) // ["kiwi"]
}
echo basket // ["pear", "apple"]
}proc main(): void {
fruit := ["pear", "apple", "kiwi"]
line := join(fruit, ", ")
echo split(line, ", ")
if indexOf(fruit, "apple") is Result.Ok(i) {
echo fruit[i] // uma posição Ok não precisa de guarda
}
caminho := "a/b/c"
echo replaceFirst(caminho, "/", " > ") // a > b/c
echo replaceAll(caminho, "/", " > ") // a > b > c
echo caminho // a/b/c — uma Str é um valor
}// A nossa. Seus próprios parâmetros, sua própria aridade, e é o que toda
// chamada solta a len neste arquivo significa daqui em diante.
func len(label: Str, extra: Int): Str {
return "{label}{extra}"
}
proc main(): void {
Str[dyn] v = ["a", "b"]
echo len("x", 2) // a nossa: x2
echo hive.len(v) // a nativa, pelo nome longo: 2
echo hive.join(v, "-") // o nome longo funciona tendo sombreado ou não
}Estas estão sempre no escopo, sem import:
len conta os elementos de um vetor, os caracteres de uma Str ou os pares de um mapa; bytes conta o armazenamento de um vetor ou o UTF-8 de uma Str.append e prepend fazem crescer um vetor mut [dyn] em uma das pontas; drop(v, low, high) remove um intervalo, as duas pontas inclusivas, e devolve o que removeu.join(vector, sep) junta um vetor de Str com um separador; split(str, sep) é o inverso, e split(s, "") são todos os caracteres.replaceFirst e replaceAll reescrevem uma ocorrência ou todas, respondendo com uma string nova.indexOf encontra o primeiro elemento igual — ou, em uma Str, a primeira ocorrência, contada em caracteres — como um Result, cuja posição Ok é sempre segura para indexar.map, filter, filterMap e sort percorrem um vetor, no próximo slide; row, column e toTable são para tabelas, e spawn, at e kill para serviços, e hide, bypass e reveal para segredos, cada um no seu slide.Uma função nativa só pode ser chamada: várias são sobrecarregadas, então um len solto ou um join(_, ",") parcial não é um valor — embrulhe-a em um func seu. Os argumentos dela podem ser nomeados como os de qualquer chamada, com os nomes acima — join(sep: ", ", vector: fruit) — e uma posição sobrecarregada atende a cada um dos seus nomes, então len(str: s) e len(vector: v) são ambos len.
Uma declaração sua — um func, proc, query ou type com um desses nomes — vence em toda chamada sem qualificação, e a função nativa continua acessível como hive.<nome>.