A avaliação estrita, também conhecida como avaliação ansiosa, é a estratégia de avaliação usada pela maioria das linguagens de programação funcionais em que uma expressão é avaliada assim que é associada a uma variável. A avaliação estrita está em oposição direta à avaliação preguiçosa, onde a avaliação de uma expressão é atrasada até que seu valor seja necessário. Haskell é a linguagem de programação mais popular que usa avaliação preguiçosa. A maioria das linguagens de programação usa avaliação estrita para argumentos de função (às vezes chamados de parâmetros), como Java, Scheme (uma linguagem Lisp) e JavaScript.
Usar resultados de avaliação rígidos em código que é facilmente compreensível em termos de ordem de execução, um processo de depuração mais fácil em comparação com outras estratégias de avaliação e a responsabilidade pelo desempenho do código sendo transferida para o programador, o que significa que um processo de otimização de código cuidadoso é necessário.
Estratégias de avaliação em programação
Estratégias de avaliação são usadas em linguagens de programação para determinar quando avaliar os argumentos de uma chamada de função e que tipo de valor passar para a função. Existem muitas estratégias de avaliação, mas a maioria cai em uma das duas categorias gerais: Avaliação restrita e preguiçosa.
Estratégias de avaliação estritas
- Chamada por valor: A estratégia de avaliação mais comum que consiste em copiar o conteúdo dos parâmetros reais para os parâmetros formais. Se a função puder atribuir valores a seus parâmetros, apenas sua variável local será atribuída, o que significa que qualquer coisa passada em uma chamada de função permanece inalterada. Chamada por valor não é uma estratégia de avaliação única, mas sim uma família na qual os argumentos de uma função são avaliados antes de serem passados para a função. Linguagens de programação como C, Eiffel e Common Lisp usam uma estratégia de chamada por valor.
- Chamada por referência: Outra estratégia comum. Enquanto a estratégia de chamada por valor copia o conteúdo do parâmetro real para o parâmetro formal, uma estratégia de chamada por referência copia o endereço do parâmetro real para o formal. Uma função recebe uma referência implícita a uma variável usada como um argumento, em vez de uma cópia de seu valor. C ++ usa a estratégia chamada por referência.
Estratégias de avaliação preguiçosa
- Ordem normal: Uma expressão é avaliada avaliando repetidamente a expressão redutível mais à esquerda e mais externa primeiro.
- Chamada por nome: O parâmetro real só é avaliado se usado dentro da função. Se um parâmetro não for usado no corpo da função, ele nunca será avaliado. Se for usado várias vezes, será reavaliado sempre que aparecer.
- Expansão por macro: Semelhante à chamada por nome, mas evita substituição. Fornece aos desenvolvedores um mecanismo para adicionar uma nova sintaxe à gramática da linguagem central, conhecida como macros. As macros são expandidas em código por um pré-processador de macro.
- Chamada por necessidade: Um parâmetro é avaliado apenas se for usado. Uma vez que a primeira avaliação acontece, o resultado é armazenado em cache, portanto, outros usos do parâmetro não requerem reavaliação.