Slide 7 de 74

Tipos escalares

proc main(): void {
	Str   name   = "bee"
	Int   count  = 42
	Float weight = 3.14
	Bool  ready  = true
	Atom  state  = #Ready

	echo "{name} {count} {weight} {ready}"
	echo state             // Ready — echo imprime o nome de um átomo
	echo "state: {state}"  // state: 1 — dentro de uma string ele é o seu número
	echo state == #Ready   // true — por isso átomos são comparados, não impressos
}
  • Str guarda texto UTF-8.
  • Int é um inteiro de 64 bits com sinal. Ele nunca dá a volta: uma conta que passaria do seu maior ou menor valor fica nesse valor.
  • Float é um número de ponto flutuante de 64 bits.
  • Bool é true ou false.
  • Atom é um símbolo, escrito #Nome.
  • void é apenas um tipo de retorno; não existe valor, campo ou elemento void.

Literais numéricos são decimais e nada mais: sem hexadecimal, sem _ entre dígitos, sem expoente. Um Float tem dígitos dos dois lados do ponto — 0.5, não .5 nem 1. — e -1 é o operador de menos aplicado a 1. Nenhum número é convertido por você: um Int não vira Float sozinho, e hive.conv.itf é como se amplia um de propósito.

Um átomo é um rótulo. echo imprime o nome dele, mas dentro de uma string — interpolado, ou somado com + — ele vira o pequeno número que o compilador lhe deu, então compare átomos com == e não como texto. #Nil é sempre 0; todo outro átomo é numerado pelo lugar onde é mencionado pela primeira vez, que é também a ordem em que sort os coloca. Um átomo não pode ser calculado, e não é uma condição: if state é um erro de compilação quando state é um Atom.