Linguagens de Programação Conceitos e Técnicas Expressões Prof. Isabel Cafezeiro [email protected] Linguagens de Programação Expressões Expressão: Uma expressão é uma frase do programa que, ao ser avaliada, produz como resultado um valor. 1 “aa” 1+4 f(1,g(x)) Elementos da expressão: Operadores Operandos Resultado Linguagens de Programação Expressões Classificação Simples – sem operador Compostas Notação Prefixada: Infixada: Posfixada: Outros: !b a+b b++ x > y? x:y Linguagens de Programação Expressões Aridade dos operadores unários, binários, ternários, etc eneários: aridade variável Em Lisp: (+ 1) (+ 1 2) (+ 1 2 4) (+ 3 4 1 2) ... Em C e C++, o programador pode construir funções com número de parâmetros variável Linguagens de Programação Origem dos operadores Pré-existentes Definidos pelo Programador Valores & tipos de dados Em Java: boolean positivo (int n) { return n > 0; } Composição de operadores Em ML: val par = fn (n: int) => (n mod 2 = 0) val negação = fn (t:bool) => if t then false else true val impar = negação o par Linguagens de Programação Tipos de expressões: Literais, constantes e variáveis de Agregação (estática, dinâmica) Constroem valores compostos Aritméticas, Relacionais, Booleanas Binárias Operam nos bits Condicionais O valor computado depende de uma condição Chamadas de Função Referenciamento/Derreferenciamento Categóricas Operam sobre tipos Interativas Expressões Linguagens de Programação Tipos de expressões: Expressões Literais Resultam no valor explícito do texto do programa de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas 2,72 99 0143 ‘c’ ... Linguagens de Programação Tipos de expressões: constantes gera o valor da constante de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Expressões Linguagens de Programação Tipos de expressões: variáveis gera o valor corrente da variável de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Expressões Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Constroem valores compostos Aritméticas, Relacionais, Booleanas Binárias Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas operandos Em C: int c[ ] = {1, 2, 3}; operador Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Constroem valores compostos Aritméticas, Relacionais, Booleanas Em C: void f(int i) { Binárias Condicionais } Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas int a[] = {3 + 5, 2, 16/4}; int b[] = {3*i, 4*i, 5*i}; int c[] = {i + 2, 3 + 4, 2*i}; Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Constroem valores compostos Aritméticas, Relacionais, Booleanas Em C: void f(int i) { Binárias Condicionais } Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas int a[] = {3 + 5, 2, 16/4}; int b[] = {3*i, 4*i, 5*i}; int c[] = {i + 2, 3 + 4, 2*i}; Construtores ● Exemplo: Data d = new Data(); declaração de referência para a classe Data Data d = new; criação da instância associação da referência à instância Erro de compilação!!! Criação da instância sem a chamada do construtor invocação do construtor Data() C:\>javac demodata1.java demodata1.java:5: <identifier> expected Data hoje = new; ^ 1 error 13 Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Em C: Aritméticas, Relacionais, Booleanas void main() { Binárias int j = 10; char c = 2; Condicionais printf(“%d\n”, ~c); /* imprime –3 */ printf(“%d\n”, j & c); /* imprime 2 */ Chamadas de Função printf(“%d\n”, j | c); /* imprime 10 */ printf(“%d\n”, j ^ c); /* imprime 8 */ Referenciamento/Derreferenciamento printf(“%d\n”, j << c);/* imprime 40 */ Categóricas printf(“%d\n”, j >> c);/* imprime 2 */ Interativas } Operam nos bits Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Em JAVA: max = x > y ? x : y; Condicionais par = z % 2 == 0 ? true : false O valor computado depende de uma condição Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Condicionais Função é uma abstração de expressão: o usuário informa os argumentos e recebe o resultado sem se importar na forma de implementação Chamadas de Função Busca( 3,vet ); Referenciamento/Derreferenciamento Categóricas operador operandos Interativas Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) F( x,...,w ); Aritméticas, Relacionais, Booleanas Binárias Condicionais Um identificador ou uma expressão que gere uma função Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Em HASKELL: (if ... then sin else cos) (x) Linguagens de Programação Tipos de expressões: Literais, constantes, variáveis Expressões F( x,...,w ); de Agregação (estática, dinâmica) Uma n-upla, ou n valores Em C: Aritméticas, Relacionais, Booleanas typedef struct s { int a,b,c; } params; Binárias Condicionais int f(x) params x;{ return x.a+x.b+x.c; } int main() { Chamadas de Função int y; Referenciamento/Derreferenciamento params k; Categóricas k.a = 1; k.b = 2; k.c = 3; Interativas y = f(k); y = f(1,2,3); } Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Funções ≈ operações Em C++, Ada, HASKELL: E1 op E2 ≈ op E1 E2 Operadores podem ser definidos... assim como funções! Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Resulta no endereço de variáveis ou constantes x := x+1 Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Valor da variável Endereço da variável: referenciamento implícito !!! Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Resulta no endereço de variáveis ou constantes int x = 10; int *p; p = &x; Operador de referenciamento Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Interativas Resulta no conteúdo de um endereço int *p; *p = 12; Derreferenciamento explícito para compensar o referenciamento implícito Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Aritméticas, Relacionais, Booleanas Binárias float * p = (float *) malloc (10 * sizeof (float)) Condicionais Chamadas de Função Referenciamento/Derreferenciamento Categóricas Operam sobre tipos Interativas float f; int num = 9, den = 5; f = (float)num/den; Profissao p = new Engenheiro ( ); if (p instanceof Medico) Linguagens de Programação Tipos de expressões: Expressões Literais, constantes, variáveis de Agregação (estática, dinâmica) Lista de valores Aritméticas, Relacionais, Booleanas Binárias Condicionais Em HASKELL: [y | y <- ys, y 'mod' 100 = 0] Chamadas de Função Referenciamento/Derreferenciamento Categóricas Operam sobre tipos Interativas Semelhança com a notação matemática: { y | y mod 100 = 0}