Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com

https://si...
Comandos
Comando (ou statement) é uma construção que ira ser
executada para atualizar variáveis.
São característicos de li...
Skips
● U skip é um comando com nenhum efeito.
● Exemplo:
○ “;” in C and Java
○ “null;” in Ada.

● Skips podem ser usados ...
Atribuições
● Uma atribuição armazena um valor em uma variavel.
● Atribuição simples:
■ “V = E;” em C e Java
■ “V := E;” e...
Exemplo Lua - Atribuições
Lua ainda permite atribuir dois valores distintos a variáveis
distintas. Trocar dois valores é t...
Chamadas de procedimento
● Uma chamada de procedimento alcança seus efeitos pela
aplicação de um procedimento a alguns arg...
Comandos sequencias
Comando sequenciais, condicionais e iterativos (encontrados
em todas linguagens imperativas) permite c...
Comandos condicionais
● Um comando condicional escolhe um dos subcomandos
para ser executado dependendo da condição.
● Um ...
Comando if
Forma (Ada e C/Java, respectivamente):
if E then
if (E)
C1
C1
else
else
E deve ser um
C2
C2
boolean
end if;
– s...
Comando if
Generalizando multiplas condições (em Ada):
if E1 then
C1
elsif E2 then
C2
…
elsif En then
Cn
else
C0
end if;
Comando case
● Em C e Java:
switch (E) {
case v1:
C1
…
case vn:
Cn
default:
C0
}
Ada: exemplo

today: Date;
...
case today.m is
when jan => put("JAN");
when feb => put("FEB");
...
when nov => put("NOV");...
Java - C : Exemplo
Date today;
...
switch (today.m) {
case 1: System.out.print("JAN"); break;
case 2: System.out.print("FE...
Comandos iterativos
● Um comando iterativo (ou laço) executa repetidamente um
subcomando que é o corpo do laço.
● Cada exe...
Comandos iterativos
● Indefinido é comumente suportado pelo comando while
● Forma (Ada e C/Java):
while E loop
C
end loop;...
Comandos iterativos: mais formas
Lua:

JavaScript:

t = {1,2,3}
for i, v in pairs (t) do
print (i, v)
do

a = [1,2,3]
for ...
Comandos iterativos: mais formas
Podemos ainda usar funções de alta ordem (funções que
recebem outras funções como paramet...
Efeitos colaterais
Está ligado ao indeterminismo, por exemplo
int a = 10;
int f (int x) {
a = a + 1;
return a + x;
}

f (5...
Expressões com efeitos colaterais
● O proposito principal de avaliar uma expressão é o retorno
de um valor.
● Em muitos ca...
Efeitos colaterais: Exemplo C
● A funcão C getchar(f) lê um character e atualiza a variavel
file que f aponta.
● O seguint...
Efeitos colaterais e funcionais
Funções em linguagens funcionais não podem ter efeitos
colaterais.
Esse sempre foi o grand...
Efeitos colaterais e funcionais
Funções em linguagens funcionais não podem ter efeitos
colaterais.
Esse sempre foi o grand...
Expressões
● Uma expressão é uma construção que pode ser avaliada para um
dado valor
● Formas de expressão:
○ literals (tr...
Construtores
● Construtor é uma expressão que constrõe um valor composto a
partir dos seus componentes
● Em C, os valores ...
Construtores - Ada
● Registros:
type Date is record
m: Month;
d: Day_Number;
end record;
today: Date := (Dec, 25);
tomorro...
Construtores - Haskell
● Tupla
today = (Dec, 25)
(m, d) = today
tomorrow = (m, d+1)

● Lista:
monthLengths =
[31, if isLea...
Construtores - Java
● Classes:
class Date {
public int m, d;
public Date (int m, int d) {
this.m = m; this.d = d;}
…
}

● ...
Chamada de funções
● Calcula um resultado aplicando uma função a seus argumentos.
● Se uma função tem um único argumento, ...
Chamada de funções, operadores

ϴ
ϴ

ϴ
ϴ
ϴ

ϴ

←
←
Chamada de funções, operadores
Ordem de Avaliação
●
●
●
●
○
Ordem de Avaliação - Precedência
Nas linguagens , a ordem de precedência normalmente é a
mesma (baseada na matemática)

Ru...
●
●

○
○
●
○
Operadores - Haskell
●

●
●

●
●

●
●

●
●
●
Expressões condicionais
● Java if-expression:
x>y ? x : y

● Comparando expressões e comandos

int max1 (int x, int y) {
r...
Expressões condicionais
Haskell if-expression:

if x>y then x else y
Haskell case-expression:

case m of
feb -> if isLeap ...
Haskell: Expressão if
Guards - Haskell
Haskell ainda tem outros elementos como guards e casamento
de padrões.

menor x y
|if x <= y =
| otherwis...
Comandos e expressões
Upcoming SlideShare
Loading in...5
×

Comandos e expressões

512

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
512
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
20
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Comandos e expressões

  1. 1. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  2. 2. Comandos Comando (ou statement) é uma construção que ira ser executada para atualizar variáveis. São característicos de linguagens imperativas. Tipos de comandos: ○ skips ○ atribuições ○ chamadas de procedimentos ○ comandos sequenciais ○ comandos de seleção ○ comandos iterativos
  3. 3. Skips ● U skip é um comando com nenhum efeito. ● Exemplo: ○ “;” in C and Java ○ “null;” in Ada. ● Skips podem ser usados em com comandos condicionais.
  4. 4. Atribuições ● Uma atribuição armazena um valor em uma variavel. ● Atribuição simples: ■ “V = E;” em C e Java ■ “V := E;” em Ada – o valor da expressão E é armazenada em variavel V. ● Atribuição múltipla: ○ “V1 = ... = Vn = E;” em C e Java – o valor de E é armazenada em cada de V1,..., Vn. ● Atribuição combinada com operador binario: ○ “V (x)= E;” em C e Java significa o mesmo como “V = V (x) E;”.
  5. 5. Exemplo Lua - Atribuições Lua ainda permite atribuir dois valores distintos a variáveis distintas. Trocar dois valores é tão simples assim: a= 10 b = 5 a, b = b, a
  6. 6. Chamadas de procedimento ● Uma chamada de procedimento alcança seus efeitos pela aplicação de um procedimento a alguns argumentos. ● Forma: P(E1,..., En); Aqui P determina procedimento ser aplicada, e E1, ... , En são avaliados para determinar os argumentos. Cada argumento pode ser ou um valor ou uma referencia para a variável.
  7. 7. Comandos sequencias Comando sequenciais, condicionais e iterativos (encontrados em todas linguagens imperativas) permite compor comandos alcançando controle de fluxo. Comando sequencia especifica que dois (ou mais) comandos são executado em sequencia: C1C2
  8. 8. Comandos condicionais ● Um comando condicional escolhe um dos subcomandos para ser executado dependendo da condição. ● Um comando if escolhe entre dos subcomando usando uma condição booleana. ● Um comando case escolhe entre vários subcomandos.
  9. 9. Comando if Forma (Ada e C/Java, respectivamente): if E then if (E) C1 C1 else else E deve ser um C2 C2 boolean end if; – se E é verdadeiro C1 é executado; caso contrario C2 é executado Abreviação (Ada): if E then if E then C1 C1 end if; else null; end if;
  10. 10. Comando if Generalizando multiplas condições (em Ada): if E1 then C1 elsif E2 then C2 … elsif En then Cn else C0 end if;
  11. 11. Comando case ● Em C e Java: switch (E) { case v1: C1 … case vn: Cn default: C0 }
  12. 12. Ada: exemplo today: Date; ... case today.m is when jan => put("JAN"); when feb => put("FEB"); ... when nov => put("NOV"); when dec => put("DEC"); end case;
  13. 13. Java - C : Exemplo Date today; ... switch (today.m) { case 1: System.out.print("JAN"); break; case 2: System.out.print("FEB"); break; ... case 11: System.out.print("NOV"); break; case 12: System.out.print("DEC"); }
  14. 14. Comandos iterativos ● Um comando iterativo (ou laço) executa repetidamente um subcomando que é o corpo do laço. ● Cada execução do corpo do laço é chamado de iteração. ● Os comandos iterativos podem ser: ○ Indefinidos: o número de iterações não é predeterminada. ○ Definido: o número de iterações é predeterminada.
  15. 15. Comandos iterativos ● Indefinido é comumente suportado pelo comando while ● Forma (Ada e C/Java): while E loop C end loop; while (E) C ● Interação definida (estilo C): for (C1; E; C2) C3 C1 while (E) { C3 C2 }
  16. 16. Comandos iterativos: mais formas Lua: JavaScript: t = {1,2,3} for i, v in pairs (t) do print (i, v) do a = [1,2,3] for (x in a){ .. } Python: a = ['cat', 'window', 'defenestrate'] for x in a: print x, len(x)
  17. 17. Comandos iterativos: mais formas Podemos ainda usar funções de alta ordem (funções que recebem outras funções como parametros) Lua: tabela = {4,7,8,12,55} table.foreach (tabela, function (i, v) print (i, v) end )
  18. 18. Efeitos colaterais Está ligado ao indeterminismo, por exemplo int a = 10; int f (int x) { a = a + 1; return a + x; } f (5) f (5) leva a 16 leva a 17
  19. 19. Expressões com efeitos colaterais ● O proposito principal de avaliar uma expressão é o retorno de um valor. ● Em muitos casos em linguagens imperativas, a avaliação de uma expressão pode atualizar valor de variáveis – efeitos colaterais. ● In C e Java, atribuições são na verdade expressões com efeitos colaterais: “V = E” armazena o valor de E em V. Similarmente “V (X) = E”.
  20. 20. Efeitos colaterais: Exemplo C ● A funcão C getchar(f) lê um character e atualiza a variavel file que f aponta. ● O seguinte código é correto e conciso: char ch; while ((ch = getchar(f)) != NUL) putchar(ch); ● O seguinte codigo é incorreto (Por que?): enum Gender {female, male}; Gender g; if (getchar(f) == 'F') g = female; else if (getchar(f) == 'M') g = male; else ..
  21. 21. Efeitos colaterais e funcionais Funções em linguagens funcionais não podem ter efeitos colaterais. Esse sempre foi o grande desafio para as linguagens funcionais, como tratar entradas e saídas ? LF consiste num conjunto de funções, sem efeitos colaterais tensão O objetivo de executar qualqer programa é ter algum efeito colateral
  22. 22. Efeitos colaterais e funcionais Funções em linguagens funcionais não podem ter efeitos colaterais. Esse sempre foi o grande desafio para as linguagens funcionais, como tratar entradas e saídas ? LF consiste num conjunto de funções, sem efeitos colaterais tensão Haskell usou o conceito O objetivo de executar de monadas IO, que permite qualqer programa é ter separar comando com algum efeito colateral efeitos de funções puras.
  23. 23. Expressões ● Uma expressão é uma construção que pode ser avaliada para um dado valor ● Formas de expressão: ○ literals (trivial) ○ constant/variable accesses (trivial) ○ construções ○ chamada de funções ○ expressões condicionais ○ expressões iterativas
  24. 24. Construtores ● Construtor é uma expressão que constrõe um valor composto a partir dos seus componentes ● Em C, os valores componentes são restrito a literais. {jan, 1} ● Ada, Java, e Haskell, os valores componentes são avaliadas como subexpressões: tomorrow: Date := (today.m, today.d + 1);
  25. 25. Construtores - Ada ● Registros: type Date is record m: Month; d: Day_Number; end record; today: Date := (Dec, 25); tomorrow: Date := (today.m, today.d+1); ● Arranjo: leap: Integer range 0 .. 1; … month_length: array (Month) of Integer := (31, 28+leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
  26. 26. Construtores - Haskell ● Tupla today = (Dec, 25) (m, d) = today tomorrow = (m, d+1) ● Lista: monthLengths = [31, if isLeap y then 29 else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  27. 27. Construtores - Java ● Classes: class Date { public int m, d; public Date (int m, int d) { this.m = m; this.d = d;} … } ● Objeto: Date today = new Date(12, 25); Date tomorrow = new Date(today.m, today.d+1)
  28. 28. Chamada de funções ● Calcula um resultado aplicando uma função a seus argumentos. ● Se uma função tem um único argumento, então uma chamada é tipicamente na forma ○ “F(E)”, ○ ou apenas “F E”, ● Onde F determina a função ser aplicada, e a expressão E é avaliada para um determinada argumento.
  29. 29. Chamada de funções, operadores ϴ ϴ ϴ ϴ ϴ ϴ ← ←
  30. 30. Chamada de funções, operadores
  31. 31. Ordem de Avaliação ● ● ● ● ○
  32. 32. Ordem de Avaliação - Precedência Nas linguagens , a ordem de precedência normalmente é a mesma (baseada na matemática) Ruby ** ++ e -posfixados **, abs ++ e – *, /, mod, rem préfixados, + e – unários *, / e % Mais baixa Ada + e – unários Mais alta C *, / e % + e – binários + e – binários
  33. 33. ● ● ○ ○ ● ○
  34. 34. Operadores - Haskell
  35. 35. ● ●
  36. 36. ● ●
  37. 37. ● ●
  38. 38. ● ● ● ●
  39. 39. Expressões condicionais ● Java if-expression: x>y ? x : y ● Comparando expressões e comandos int max1 (int x, int y) { return (x>y ? x : y); } int max2 (int x, int y) { if (x>y) return x; else return y; }
  40. 40. Expressões condicionais Haskell if-expression: if x>y then x else y Haskell case-expression: case m of feb -> if isLeap y then 29 else 28 apr -> 30 jun -> 30 sep -> 30 nov -> 30 _ -> 31
  41. 41. Haskell: Expressão if
  42. 42. Guards - Haskell Haskell ainda tem outros elementos como guards e casamento de padrões. menor x y |if x <= y = | otherwise = x y
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×