Erlang: Formatando e imprimindo

É, pois é. A gente costuma começar com o “Hello World” e eu simplesmente esqueci. Se bem que não faz diferença, mesmo, já que há anos eu não faço “Hello Worlds” para começar a aprender linguagens de programação…

O que vamos ver hoje são os caracteres de formatação de io:format/2.

~n

Imprime o caracter de “nova linha”.

Lembre-se que em sistemas unix-like, “nova linha” é só “\n”. No Windows e derivados é “\r\n” e no Mac, se não me engano, é “\n\r”. Por isso é bom sempre usar ~n quando precisar quebrar linhas.

~c

Imprime inteiros, convertendo-os para o equivalente em ASCII:

4ᐳ io:format("[~c]~n", [$a]).
[a]
ok
5ᐳ io:format("[~10c]~n", [$a]).
[aaaaaaaaaa]
ok
6ᐳ io:format("[~10.1c]~n", [$a]).
[         a]
ok
7ᐳ io:format("[~-10.1c]~n", [$a]).
[a         ]
ok
8ᐳ

(Lembre-se: $a já significa “o valor inteiro do caracter ‘a’ na tabela ASCII”. Na hora de imprimir, estamos “desconvertendo-o”).

~f

Imprime floats:

9ᐳ io:format("[~f]~n", [99.123456789]).
[99.123457]
ok
10ᐳ io:format("[~10f]~n", [99.123456789]).
[ 99.123457]
ok
11ᐳ io:format("[~15f]~n", [99.123456789]).
[      99.123457]
ok
12ᐳ io:format("[~15.3f]~n", [99.123456789]).
[         99.123]
ok
13ᐳ io:format("[~-15.3f]~n", [99.123456789]).
[99.123         ]
ok

Curiosamente, imprimir um float sem parâmetro nenhum só imprime até a sétima casa decimal…

~e

Imprime float com aquela notação científica que eu nunca usei em lugar algum:

17ᐳ io:format("[~e]~n", [99.123456789]).
[9.91235e+1]
ok

~g

Escolhe se é melhor formatar o número como se fosse um ~f ou como um ~e:

18ᐳ io:format("[~g]~n", [99.123456789]).
[99.1235]
ok
19ᐳ io:format("[~g]~n", [9999999999999.123456789]).
[1.00000e+13]
ok

~s

Imprime como string:

22ᐳ io:format("[~15s]~n", ["Teste"]).
[          Teste]
ok
23ᐳ io:format("[~-15s]~n", ["Teste"]).
[Teste          ]
ok
25ᐳ io:format("[~-15.2s]~n", ["Teste"]).
[Te             ]
ok

~w

Imprime com a sintaxe do Erlang:

26ᐳ io:format("[~w]~n", ["Teste"]).
[[84,101,115,116,101]]
ok
27ᐳ io:format("[~w]~n", [10]).
[10]
ok
28ᐳ io:format("[~w]~n", [ᐸᐸ10ᐳᐳ]).
[ᐸᐸ10ᐳᐳ]
ok

Viu, na linha 26, como as strings em Erlang são apenas listas de caracteres?

~p

Igual o ~w, mas, caso a linha fique muito grande, ele a quebra e formata da melhor maneira possível.

~B

Imprime inteiros, mas você pode escolher a base:

35ᐳ io:format("[~.2B]~n", [$a]).
[1100001]
ok
36ᐳ io:format("[~.16B]~n", [$a]).
[61]
ok
37ᐳ io:format("[~.8B]~n", [$a]).
[141]
ok
38ᐳ io:format("[~.10B]~n", [$a]).
[97]
ok

Resumo


Este artigo foi originalmente escrito em 05/12/2014.