Haskell/Casamento de padrões, if e let: diferenças entre revisões

→‎if / then / else: Conteúdo sobre tipos acrescentado
mSem resumo de edição
(→‎if / then / else: Conteúdo sobre tipos acrescentado)
 
Mas por que há duas maneiras de se escrever expressões condicionais? Por que não usar somente <code>if</code> ou somente guardas? Apesar de serem a mesma coisa, com o mesmo desempenho computacional, sua experiência lhe dirá qual das duas formas é mais legível. Não há melhor ou pior, só mais ou menos legível.
 
=== Tipos numa expressão condicional ===
 
É importante observar os tipos das expressões usadas dentro de <code>if</code> / <code>then</code> / <code>else</code>:
# As condições avaliadas por <code>if</code> devem ''sempre'' retornar um Bool.
# Os valores finais das expressões dentro de <code>then</code> e <code>else</code>, podem ser de ''qualquer tipo'', mas ambos devem ser do ''mesmo tipo''.
 
Esta é uma função válida em Haskell:
<source lang="haskell">
possivel x =
if x == 0
then "zero" -- then retorna um String
else "não-zero" -- else retorna um String
</source>
 
Esta é uma função inválida em Haskell:
<source lang="haskell">
impossivel x =
if x == 0
then 0 -- then retorna um Num
else "não-zero" -- else retorna um String
</source>
 
{{Exercício|1=
Por que as expressões dentro de ''then'' e ''else'' contidas num mesmo ''if'' devem possuir o mesmo tipo?}}
 
== Casamento de padrões: introdução ==
153

edições