Slide 24 de 74

Como o echo mostra um valor

type User {
	id:   Int
	name: Str
}

type Shape {
	Circle { radius: Int }
	Point
}

func half(n: Int): Result<Int, Str> {
	if n % 2 == 0 {
		return Result.Ok(n / 2)
	}
	return Result.Error("ímpar")
}

proc main(): void {
	echo "simples"                 // simples
	echo ["simples", "1"]          // ["simples", "1"]
	echo 3.0                       // 3
	echo 0.1 + 0.2                 // 0.30000000000000004
	echo #Ready                    // Ready
	echo half(4)                   // Ok(2)
	echo half(3)                   // Error("ímpar")
	echo User(1, "ada")            // {1, "ada"}
	echo [Shape.Circle(3), Shape.Point()]   // [{3}, {}]
}

echo escreve uma linha na saída padrão, e panic e a interpolação mostram um valor do mesmo jeito:

  • Uma Str sozinha é a linha, sem aspas. Dentro de um vetor, de um registro ou de um Result, ela aparece entre aspas, que é o que distingue ["1", "2"] de [1, 2] e de ["1 2"].
  • Um Int e um Bool como escritos. Um Float no seu menor formato: 3.0 aparece como 3, 0.1 + 0.2 como 0.30000000000000004, e um grande com expoente, 1.23456789123e+08.
  • Um átomo pelo seu nome — exceto dentro de uma string, onde ele é o seu número.
  • Um vetor como seus elementos entre colchetes, e um Result como Ok(…) ou Error(…).
  • Um valor declarado como seus campos entre chaves, e nada mais: User(1, "ada") aparece como {1, "ada"}, Shape.Circle(3) como {3}, e uma variante que não carrega nada como {}. O tipo e a variante não aparecem, então um programa que precisa de um nome legível escreve um.

O único valor que nenhum deles mostra é um Secret, no próximo slide.