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}