IO

IO em Elixir

1 exercício

Sobre IO

As funções para lidar com entrada e saída são fornecidas pelo módulo IO.

  • IO.puts/2 escreve uma string na saída padrão, seguida de uma nova linha. Devolve :ok.
  • IO.write/2 escreve uma string na saída padrão, sem acrescentar uma nova linha. Devolve :ok.
  • IO.gets/2 lê uma linha da entrada padrão.
  • IO.inspect/2 escreve qualquer coisa na saída padrão e aceita opções úteis como :label. Devolve o valor que recebeu, sem o alterar. É útil para depurar.

Protocolo String.Chars

Se tentares passar ao IO.puts/2 um valor que ele não consegue imprimir, vais ver um erro Protocol.UndefinedError.

IO.puts({:ok, 7})
# ** (Protocol.UndefinedError) protocol String.Chars not implemented for {:ok, 7} of type Tuple

Quando isto acontecer, talvez queiras usar antes o IO.inspect/2.

IO.inspect/2 para depurar

O IO.inspect/2 é perfeito para depurar, porque devolve o argumento sem o alterar, consegue imprimir qualquer coisa e oferece uma opção :label.

"HELLO\n"
|> String.trim()
|> IO.inspect(label: "step 1")
|> String.downcase()
|> IO.inspect(label: "step 2")

# > step 1: "HELLO"
# > step 2: "hello"
# => "hello"

Dispositivos de IO

O primeiro argumento de todas estas funções é um dispositivo de IO, cujo valor predefinido é :stdio (entrada/saída padrão). Para escrever no dispositivo de erro padrão, usa antes :stderr. Um dispositivo de IO também pode ser um processo, por exemplo um criado ao chamar File.open/2, o que permite escrever num ficheiro.

Editar via GitHub A ligação abre numa nova janela ou separador

Aprende IO