Skip to content

Commit

Permalink
Capítulo 03, review 11 até linha 479
Browse files Browse the repository at this point in the history
  • Loading branch information
joaostein committed Mar 17, 2015
1 parent bcd4ed3 commit d511607
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions chapters/03-funcoes.md
Original file line number Diff line number Diff line change
Expand Up @@ -470,13 +470,13 @@ Um princípio útil é não adicionar funcionalidades a menos que você tenha ce

## Funções e Efeitos Colaterais

Funções podem ser dividas em aquelas que são chamadas pelos seus efeitos colaterais e aquelas que são chamadas pelo seu valor de retorno. (Embora também seja definitivamente possível de ter ambos efeitos colaterais e retorno de um valor.)
Funções podem ser divididas naquelas que são invocadas para produzir um efeito colateral e naquelas que são invocadas para gerar um valor de retorno. (Embora também seja possível termos funções que produzem efeitos colaterais e que retornam um valor).

A primeira função auxiliar no exemplo da fazenda, `printZeroPaddedWithLabel`, é chamada pelo seu efeito colateral (ela imprimi uma linha). A segunda, `zeroPad`, é chamada pelo seu valor de retorno. Não é coincidência que a segunda é útil em mais situações que a primeira. Funções que criam valores são mais fáceis de ser combinadas em novas formas do que realizando diretamente um efeito colateral.
A primeira função auxiliar no exemplo da fazenda, `printZeroPaddedWithLabel`, é invocada para produzir um efeito colateral: imprimir uma linha. A segunda versão, `zeroPad, é chamada para produzir um valor de retorno. Não é coincidência que a segunda versão é útil em mais situações do que a primeira. Funções que criam valores são mais fáceis de serem combinadas em diferentes maneiras do que funções que produzem diretamente efeitos colaterais.

Uma função *pura* é um tipo específico de *função de produção de valor* que não somente não tem efeitos colaterais, como também não depende de efeitos colaterais de outro código - por exemplo, ela não variáveis que são ocasionalmente mudadas por outro código. Uma função pura tem a agradável propriedade que, quando chamada com os mesmos argumentos, ela sempre produz os mesmos valores (e não faz nada mais). Isso a torna fácil de ser pensada - uma chamada a ela pode ser mentalmente substituída por seu resultado, sem alterar o significado do código. Quando você não tem certeza se uma função está funcionando corretamente, você pode testá-la simplesmente chamando-a e sabendo que se ela funciona neste contexto, ela vai funcionar em qualquer contexto. Função impuras devem retornar valores diferentes baseado em vários tipos de valores e têm efeitos colaterais que podem ser difíceis de testar e pensar sobre.
Uma função *pura* é um tipo específico de função que produz valores e que não gera efeitos colaterais, como também não depende de efeitos colaterais de outros códigos — por exemplo, ela não utiliza variáveis globais que podem ser alteradas por outros códigos. Uma função pura tem a característica de que, se sempre chamada com os mesmos argumentos, irá produzir o mesmo valor (e não irá fazer nada além disso). Isso acaba fazendo com que seja fácil entendermos como ela funciona. Uma chamada para tal função pode ser mentalmente substituída pelo seu resultado, sem alterar o significado do código. Quando você não tem certeza se uma função pura está funcionando corretamente, você pode testá-la simplesmente invocando-a. Sabendo que ela funciona nesse contexto, funcionará em qualquer outro contexto. Funções que não são puras podem retornar valores diferentes baseados em vários fatores e produzem efeitos colaterais que podem fazer com que seja difícil testar e pensar sobre elas.

Não há necessidade de se sentir mal ao escrever função impuras, nem começar uma guerra santa e limpar todos os códigos impuros. Efeitos colaterais são úteis também. Não existe uma forma pura de escrever um `console.log`, por exemplo, e o `console.log` é certamente útil. Algumas operações também podem ser mais caras quando feitas sem efeitos colaterais, quando todo os dados envolvidos precisam ser copiados, ao invés de modificados.
Mesmo assim, não há necessidade de se sentir mal ao escrever funções que não são puras ou começar uma guerra santa” para eliminar códigos impuros. Efeitos colaterais são úteis em algumas situações. Não existe uma versão “pura de `console.log` por exemplo, e ela é certamente útil. Algumas operações são também mais fáceis de se expressar de forma mais eficiente quando usamos efeitos colaterais, portanto a velocidade de computação pode ser uma boa razão para se evitar a “pureza”.

## Resumo

Expand Down

0 comments on commit d511607

Please sign in to comment.