Expressão (computação)

Uma expressão em linguagens de programação é uma combinação de valores, variáveis, operadores, e chamadas de funções que são interpretadas (avaliadas) de acordo com as regras de precedência e de associatividade particulares a uma determinada linguagem de programação, que calcula e, em seguida, produz (retorna) um valor. Expressões são os meios fundamentais de especificação de computações em uma linguagem de programação.[1] O propósito de uma expressão é especificar um valor a ser calculado. [2]

Por exemplo, 2+3 é uma expressão aritmética e de programação, que avalia a 5. Já a expressão de atribuição x = 2+3 também avalia a 5 e é uma expressão de programação, mas é uma equação em matemática e não uma expressão matemática. Uma variável é uma expressão, porque é um ponteiro para um valor na memória, então y+6 é uma expressão. Um exemplo de uma expressão de programação relacional seria 4 == 4, que avalia para o valor booleano verdadeiro.[3]

Expressões infixas, pré-fixas e pós-fixas

editar

Expressões podem ser representadas de diversas formas. Uma expressão onde os operadores binários estão inseridos entre os operandos é dita estar na forma infixa. Uma expressão infixa é a forma mais natural de representação de expressões. Em uma expressão posfixa, os operadores são posicionados após as operações de forma que os parentesis não são necessários.[4] Por exemplo, a expressão:

 ( a + b ) * ( c - d )

pode ser transformada na forma posfixa sem parentesis:

 a b + c d - *

Avaliação curto-circuito

editar

Expressões booleanas dão uma importante oportunidade para a melhoria da leitura eficiência de código.[5] Considerando-se a expressão:

 ( a > b ) and ( c >= d )

Se a < b então não há a necessidade de se avaliar a segunda parte da expressão, uma vez que já se sabe que o resultado da expressão como um todo será falso. Um compilador que é provido de avaliação curto-circuito irá gerar código que salte condicionalmente a segunda parte do código baseado no resultado da avaliação da primeira parte.

A linguagem Ada dispões de dois operadores lógicos que implementam explicitamente a avaliação curto-circuito. São os operadores and then e or else.[6] Por exemplo, ambas as partes das expressões abaixo serão avaliadas pois os operadores and e or em Ada não fazem avaliação curto-circuito:

  ( a = 0 ) and ( c/a < d )   -- para a = 0 (dará erro de divisão por zero)
  ( a > b ) or ( c < d )      -- para a > b

Contudo, nos casos abaixo, apenas a primeira parte das expressões será avaliada uma vez que a avaliação curto-circuito saltara a segunda parte de ambas as expressões:

  ( a = 0 ) and then ( c/a < d ) -- para a = 0 (não dará erro de divisão por zero, pois a segunda expressão não será avaliada)
  ( a > b ) or else ( c < d )    -- para a > b

Ver também

editar

Referências

  1. Sebesta, Robert W. (2006). Concepts of Programming Languages (em inglês) 7ª ed. Boston: Addison Wesley. pp. 311–320. ISBN 0-321-33025-0 
  2. Horowitz, Ellis (1984). Fundamentals of Programming Languages (em inglês) 2ª ed. Rockville: Computer Science Press. pp. 89–93. ISBN 0-088175-004-2 
  3. «Programming in C». Consultado em 10 de julho de 2010. Arquivado do original em 9 de janeiro de 2015 
  4. ORGANICK, E. I.;FORSYTHE, A. I.; PLUMMER, R. P (1978). Programming Languages Structures (em inglês) 2ª ed. New York: Academic Press. 52 páginas. ISBN 0-12-528260-5 
  5. SCOTT, Michael L (2000). Programming Language Pragmatics (em inglês). San Francisco: Morgan Kaufmann/Academic Press. 265 páginas. ISBN 1-55860-442-1 
  6. SMITH, James F.; FRANK, Thomas S (1994). Introduction to Programming Concepts and Methods with Ada (em inglês). New York: McGraw- Hill. 328 páginas. ISBN 0-07-911725-2