PLP Varargs 20122021 Edeilson Milhomem ems Eduardo Ribas
![PLP - Varargs 20/12/2021 Edeilson Milhomem [ems] Eduardo Ribas [erp] Lucas Albertins [lal 2] PLP - Varargs 20/12/2021 Edeilson Milhomem [ems] Eduardo Ribas [erp] Lucas Albertins [lal 2]](https://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-1.jpg)
PLP - Varargs 20/12/2021 Edeilson Milhomem [ems] Eduardo Ribas [erp] Lucas Albertins [lal 2] Yguaratã [ycc] Prof. : Augusto Sampaio 1

Motivação • Alternativa à sobrecarga de funções/métodos • Maior flexibilidade – – Funções genéricas (reúso de código) Menor overhead Menor esforço de codificação Algumas funções são essencialmente VARARGS: • soma(*args) -> soma(1, 2, 3) = 6 • sub(*args) -> sub(2, 1) = 1 15/01/2007 2
![Varargs [1] • O que é ? – Funcionalidade que permite a declaração de Varargs [1] • O que é ? – Funcionalidade que permite a declaração de](http://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-3.jpg)
Varargs [1] • O que é ? – Funcionalidade que permite a declaração de um método/função com um parâmetro que pode receber vários argumentos. 15/01/2007 3
![Varargs [2] • Características: – Lista arbitrária de parâmetros – É uma lista imutável Varargs [2] • Características: – Lista arbitrária de parâmetros – É uma lista imutável](http://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-4.jpg)
Varargs [2] • Características: – Lista arbitrária de parâmetros – É uma lista imutável – Em métodos com vários parâmetros, o varargs deve ser o último – Os “N” parâmetros passados são armazenados dentro de uma estrutura de dados – Os elementos de um Varargs podem ser acessados da seguinte forma: args[0], args[length(args) - 1] 15/01/2007 4
![Varargs [3] def funcao(arg 1, *args): . . . funcao(2) funcao(2, 30, 5) Exemplo Varargs [3] def funcao(arg 1, *args): . . . funcao(2) funcao(2, 30, 5) Exemplo](http://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-5.jpg)
Varargs [3] def funcao(arg 1, *args): . . . funcao(2) funcao(2, 30, 5) Exemplo em Python 15/01/2007 5
![Varargs [4] • // chamada de método passando várias Strings cadastrar. Pilotos(“Alonso”, ”Massa”, ”Barichello”, Varargs [4] • // chamada de método passando várias Strings cadastrar. Pilotos(“Alonso”, ”Massa”, ”Barichello”,](http://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-6.jpg)
Varargs [4] • // chamada de método passando várias Strings cadastrar. Pilotos(“Alonso”, ”Massa”, ”Barichello”, ”Schumacher”); public void cadastrar. Pilotos(String. . . pilotos){ //vararg pilotos recebe todas Strings for (String piloto: pilotos) { // itera-se sobre a vararg como array System. out. printf(“Valor é: %sn”, piloto); } Exemplo em Java 15/01/2007 6

Pré-requisitos para Implementação de Varargs • Definição de Tupla; • Passagem de Tuplas como argumento de função; • Acesso aos elementos da Tupla; • Concatenação de Tupla; • Tamanho da Tupla; • O elemento de uma Tupla pode ser uma outra Tupla, e assim sucessivamente. 15/01/2007 7

Definição de Tupla let var tupla = (5, 4, 9) in tupla Let var tupla = (4, true, ”string”, (false, true)) in tupla let var tupla 1 = (4, true, ”string”, (false, true)) in let var tupla 2(tupla 1, 20) in tupla 2 15/01/2007 8

Passagem de Tuplas como argumento de função let var t 1 = (1, 2) in let func a t = a + t[0] in func(10, t 1) let func a t = a + t[0] in func(10, (4, 5)) 15/01/2007 9

Concatenação de Tupla let var t 1 = (5, 7, 16, “projeto") in t 1 ++ (“de PLP”, “ - Var. Args”) 15/01/2007 10

Tupla como elemento de Tupla let var t 1 = (5, 8+3), var t 2 = (1, t 1), var t 3 = (1, t 2), var t 4 = (7, 8, 9, t 3, t 2) in t 4[3][1][1][1] 15/01/2007 11

Varargs em LF 1 • Baseada em Python – Pode conter diferentes tipos – É representado por “*” seguido do identificador – Seus elementos são acessados como um array • Exemplo: let func a b *args = a + b - args[0] in func(1, 2, 3, 4, 5, 6, 7) 15/01/2007 12
![BNF • [Endereço] 15/01/2007 13 BNF • [Endereço] 15/01/2007 13](http://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-13.jpg)
BNF • [Endereço] 15/01/2007 13
![Código • [Endereço] 15/01/2007 14 Código • [Endereço] 15/01/2007 14](http://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-14.jpg)
Código • [Endereço] 15/01/2007 14
![Exemplos • [Endereço] 15/01/2007 15 Exemplos • [Endereço] 15/01/2007 15](http://slidetodoc.com/presentation_image_h2/203285e6cbefdc303a18de39e55daf41/image-15.jpg)
Exemplos • [Endereço] 15/01/2007 15

Dúvidas? 20/12/2021 16
- Slides: 16