Your SlideShare is downloading. ×
Comandos e expressões
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Comandos e expressões

343
views

Published on

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Comando case ● Em C e Java: switch (E) { case v1: C1 … case vn: Cn default: C0 }
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Chamada de funções, operadores ϴ ϴ ϴ ϴ ϴ ϴ ← ←
  • 30. Chamada de funções, operadores
  • 31. Ordem de Avaliação ● ● ● ● ○
  • 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. ● ● ○ ○ ● ○
  • 34. Operadores - Haskell
  • 35. ● ●
  • 36. ● ●
  • 37. ● ●
  • 38. ● ● ● ●
  • 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. 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. Haskell: Expressão if
  • 42. Guards - Haskell Haskell ainda tem outros elementos como guards e casamento de padrões. menor x y |if x <= y = | otherwise = x y