DEV Community

Elixir UTFPR
Elixir UTFPR

Posted on

Feliz Dia da Pessoa Programadora!

Alt Text

Hoje é o Dia da Pessoa Programadora. Por que? Por ser o ducentésimo quinquagésimo sexto (256º) dia do ano. E claro que o primeiro dia do ano é o dia 1!

Por que 256? 256 é 2 elevado à oitava potência. Computadores trabalham com números binários. Logo, faz sentido que o Dia da Pessoa Programadora seja o dia do ano em que temos a maior quantidade de zeros num número binário no formato 1 e vários zeros: 100000000. Para completar, em hexadecimal, 256 é 100.

Fiz um pequeno programa em Elixir para comemorar. Veja abaixo:

defmodule ProgrammersDay do
  def show_message_if_today_is_programmers_day() do
    show_message_if_today_is_programmers_day(is_it_today?())
  end

  defp show_message_if_today_is_programmers_day(true) do
    IO.puts("Happy Programmers' Day!")
  end

  defp show_message_if_today_is_programmers_day(_) do
    IO.puts("Today is not Programmers' Day!")
  end

  defp is_it_today?() do
    Date.day_of_year(Date.utc_today()) == 256
  end
end

ProgrammersDay.show_message_if_today_is_programmers_day()
Enter fullscreen mode Exit fullscreen mode

Basta salvar o código acima num arquivo chamado programmersday.exs e depois, no terminal, chamar.

> elixir programmersday.exs
Happy Programmers' Day!
Enter fullscreen mode Exit fullscreen mode

Se o dia em que você estiver executando o código for o Dia da Pessoa Programadora, o programa irá escrever na tela, como acima Happy Programmers' Day!, ou seja, Feliz Dia da Pessoa Programadora. Se não for, o programa vai escrever que não é dia da pessoa programadora.

O que há de interessante no programa acima?

  • Date.utc_today/0 é uma função (daquelas que não é função matemática) e que retorna o dia de hoje. Exercício: execute Date.utc_today() no iex e poste nos comentários o que ela retorna.
  • Date.day_of_year/1 retorna o índice (começando em 1 e indo no máximo até 366, em caso de último dia de ano bissexto) de uma data no seu ano. Por exemplo, Date.day_of_year/1 aplicado a ~D[1050-03-12] (que representa 12 de março do ano 1050 retorna que 12/03/1050 foi o 75º dia de 1050:
iex> Date.day_of_year(~D[1050-03-12])
71
Enter fullscreen mode Exit fullscreen mode

Como ano passado foi ano bissexto, temos que:

iex> Date.day_of_year(~D[2020-12-31])
366
Enter fullscreen mode Exit fullscreen mode

O restante não tem muita novidade, certo? Temos duas funções chamadas show_message_if_today_is_programmers_day: show_message_if_today_is_programmers_day/0 e show_message_if_today_is_programmers_day/1. A primeira é pública e a segunda é privada.

Você consegue escrever uma versão mais interessante deste programa? Ou uma versão diferente, usando processos? Poste nos comentários!

Discussion (1)

Collapse
eberfreitas profile image
Éber Freitas Dias

Adorei 😊