Filosofia no JavaScript - Funções são declaração ou expressão?

JavaScript

Capa

Primeiro, de maneira simples e clara a resposta da pergunta acima é: Tanto faz… Funções em Javascript funcionam tanto como Declaração ou Expressão. O que nos leva a segunda pergunta: Então para que este post se é algo tão simples? Assim como na filosofia alguns dos temas mais complexos se escondem na simplicidade (não que este seja o caso).

O certo porém, é que uma função em Javascript pode ser utilizada de maneiras diferentes, como nos seguintes casos:

  • Expressões - Expression
  • Passar valores - Passed as value
  • Retornar valores - Returned as value
  • Declarações - Statement

Contudo é bom observar alguns aspectos, já que dependendo do uso as funções podem sofrer limitações ou adquirir novos comportamentos.

Observe a função abaixo:

COD01

O mesmo código pode ser escrito atribuindo a função como expressão (retorno) de uma variável. Exatamente como no código abaixo:

COD02

OK... O código é o mesmo. Não mudou nada, correto? Não…

Uma função como instrução sempre é “hospedada” no escopo onde foi definida. Logo, não é desnecessário definir a função antes do uso. Você pode simplesmente comprovar isso no exemplo abaixo:

COD03

Notem que estamos chamando a função antes de sua definição. Dado o seu escopo este código está correto e o seu resultado será o esperado. Agora vamos tentar o mesmo utilizando a função como expressão. Observe o código abaixo:

COD04

Que lindo!!! minhaFuncao() é undefined!!! Throw exception in your face :|

Mesmo que “geralmente” tratem os “tipos” de função como sendo a mesma coisa, na prática são diferentes em relação a sua execução e objetivo. A maior utilidade (ou mais comum) para uma função como expressão é o uso em estruturas de decisão. Podemos fazer isso trabalhando com a palavra reservada return. Observe o código abaixo:

COD05

Notem quem ele imprime os dois valores, tanto o da função quanto o do IF. Agora basta trocar o valor do retorno para 0 e não vamos mais entrar no IF, ou seja, apenas a primeira sentença será impressa. [EXEMPLO 6 no código fonte]

Também é possível usar outra abordagem, considerar a função como um Valor. Tendo isso em mente podemos simplesmente atribuir nossa função como uma propriedade de um objeto. Observe o código abaixo:

COD07

Outra maneira seria passar nossa função como argumento de outra função:

COD08

Sei que não existe nada de inovador nisso, porém sempre é bom ver as coisas sob um novo angulo, e tentar sempre que possível entender aquilo que estamos programando.

 

Bons estudos e até a próxima pessoal  ;)


Author's profile picture

Vitor is a computer scientist who is passionate about creating software that will positively change the world we live in.

MVP Azure - Cloud Architect - Data science enthusiast


2 minutes to read