User Tools

Site Tools


2018:estudando_programas_exemplo_em_elixir

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
2018:estudando_programas_exemplo_em_elixir [2019/03/27 13:12] adolfont2018:estudando_programas_exemplo_em_elixir [2020/11/19 11:42] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Estudando Programas Exemplo em Elixir ====== ====== Estudando Programas Exemplo em Elixir ======
 +
 +Continuação de [[2018:elixir_para_novatos|Elixir para Novatos]]
 +
 +
 +===== Primeiro Programa Exemplo =====
  
  
Line 23: Line 28:
  
 ===== Segundo Programa Exemplo ===== ===== Segundo Programa Exemplo =====
 +
 +Veja o programa também em https://gist.github.com/adolfont/5abe83aa670902bd038b40694f40c455.
  
 <code> <code>
Line 36: Line 43:
 </code> </code>
  
 +Neste programa, definimos o módulo LogicaClassicaProposicional.
 +
 +Em seguida, definimos a função ''nao'' que recebe um argumento (usamos a notação ''nao/1'') para representar esta situação. Adiante, veremos a função ''e/2'' que recebe dois argumentos.
 +Aridade é o termo que usamos para chamar a quantidade de argumentos de uma função. A função vista anteriormente, ''hello/0'' tinha aridade zero; ''nao/1'' tem aridade 1. 
 +
 +A função ''nao/1'' é definida em duas clásulas. 
 +
 +
 +Cada cláusula é uma definição de função.
 +
 +Neste exemplo, usamos o formato de definição de função de Elixir em uma linha. Você pode usar os dois.
 +Ou seja, tanto faz escrever a primeira clásula de ''nao/1'' como:
 +<code>
 +  def nao(:v), do: :f
 +</code>
 +quanto como:
 +<code>
 +  def nao(:v) do
 +   :f
 +  end
 +</code>
 +
 +
 +Outra novidade na definição desta função é o uso de constantes (também chamadas de átomos), que em Elixir são representadas colocando o símbolo de "dois pontos" (:) antes de uma cadeia de caracteres (letras, números e símbolos).
 +
 +As constantes utilizadas são '':v'' e '':f'', que usamos para representar, respectivamente, os valores-verdade "verdadeiro" e "falso".
 +
 +Utilizamos a linha ''alias LogicaClassicaProposicional, as: LCP'' para facilitar nossa digitação. O nome do módulo é significativo (isto é bom) mas longo. O comando ''alias'' estabelece que, dali em diante, ''LCP'' será o mesmo que ''LogicaClassicaProposicional''. Sendo assim, nas linhas seguintes chamamos a função ''nao/1'' apenas com ''LCP.nao(...)''.
 +
 +
 +Quando você clica em "Run" e executa o programa acima, o que aparece?
 +
 +{{ :2018:wandbox7.png?direct |}}
 +
 +A primeira linha após o "Start" contém '':v'', para indicar que ''LCP.nao(:f)'' retorna '':v''. Ou seja, como vemos em Lógica, a negação do valor falso é o valor verdadeiro. 
 +
 +A segunda linha após o "Start" contém '':f'', para indicar que ''LCP.nao(:v)'' retorna '':f''. Ou seja, como vemos em Lógica, a negação do valor verdadeiro é o valor falso. 
 +
 +Observe também que, em vez do ''IO.puts/1'' do Primeiro Programa Exemplo, aqui usamos ''IO.inspect/1'', pois queremos mostrar constantes.
 +
 +===== Terceiro Programa Exemplo =====
 +
 +Veja em
 +https://gist.github.com/adolfont/0017648a1ef12efe68a5b349fd14fcf8
 +
 +
 +===== Quarto Programa Exemplo =====
 +
 +Veja em https://gist.github.com/adolfont/e3c2047674dd6eea95eff828ca1fc51d
 +
 +Observe a refatoração de ''e/2'' antes da implementação de ''ou/2''.
 +Quando uma definição de uma função tem, em sua definição, um //underline// ''_'', isto significa que pode receber qualquer valor. Agora talvez seja o momento de você tentar aprender um pouco de [[https://elixirschool.com/pt/lessons/basics/pattern-matching/|Casamento de Padrões (Pattern Matching)]]. Dois ótimos texto em inglês são [[https://dev.to/flatironschool/pattern-matching-in-elixir-33m1|este]] e 
 +[[https://blog.carbonfive.com/2017/10/19/pattern-matching-in-elixir-five-things-to-remember/|este]].
 +
 +
 +===== Quinto Programa Exemplo =====
  
 +Veja em https://gist.github.com/adolfont/69ddc3b76ad73d797fcc67124c74133f
2018/estudando_programas_exemplo_em_elixir.1553692348.txt.gz · Last modified: 2020/11/19 11:42 (external edit)