if

O mais popular no mundo do desenvolvimento é o if/else. Definido com if/2 ele espera uma expressão e um bloco de execução inicado com do.

if some_expression do
  # se a expressão for verdadeira, rodar contexto de if
end

Só será executado o contexto de if caso a expressão seja verdadeira. Vamos a um exemplo

Precisamos de uma função que retorna se uma pessoa é maior de idade. Então expressão seria: idade >= 18. caso seja verdadeira, retorna true, case não, retorna false.

Para estruturar nossa solução, iremos utiliza maps (caso não saiba o que é, de uma olhada no capitulo de maps). Teremos no map o atributo name e o atributo age.

Vamos ao nosso teste:

test/person_test.exs
defmodule PersonTest do
  use ExUnit.Case

  describe "is_adult/1" do
    test "Person is an adult" do
      person = %{name: "Iago", age: 30}
      result = Person.is_adult?(person)
  
      assert result == true
    end
  end
end

Rodando o teste, teremos o primeiro relatório de erro

Ainda não possuimos o modulo nem a função criada, mas ja temos uma ideia do que precisamos. Vamos lá. Criaremos agora o arquivo person.ex e escreveremos a menor logica para o teste passar:

Se rodarmos o teste novamente, teremos sucesso.

Caso de verdadeiro cobrido, agora precisamos do caso falso, quando não se é maior de idade. Vamos ao teste

A utilização de interrogação no nome da função é uma convenção. Você pode entender melhor dela no capítulo de conveções.

Obviamente, a resposta da função is_adult?/1 sempre será true, já que fixamos um valor estatico para ela. Como podemos resoltar esse problema? Condicionais foram criados para esse tipo de tratamento.

Todas as expressões if que não são verdadeiras, caem no contexto else, caso definido. Podemos escrever o códio if de duas formas, normal ou encurtada:

As expressoes lidam com operadores de comparação, algum deles são:

  • == igual

  • === identico

  • != diferente

  • > maior

  • < menor

  • >= maior igual

  • <= menor igual

Exemplos simples

Vamos alterar nosso código e fazer o teste passar.

Precisamos de nossa regra que a idade seja maior a 17 anos ou maior e igual a 18.

Podemos também alterar para inline.

If é largamente utilizado em outras linguagens. Mesmo elixir possuindo if, não é tão utilizado devido ao pattern matching. Porém, existem diversos cenários que são importantes.

Last updated

Was this helpful?