Funções e argumentos variádicos: implementações nas linguagens

Jota Feldmann
Tech@Grupo ZAP
Published in
2 min readOct 4, 2017

Numa dessas discussões de dev do dia-a-dia com o Marcio Rodrigues, surgiu a curiosidade sobre como outras linguagens lidam com a variância da quantidade de parâmetros esperados ou a serem passados.

Esse aspecto nas linguagens de programação é chamado de função variádica.

Segue abaixo a lista com algumas linguagens, como são chamadas as aplicações desse aspecto e como são aplicadas da maneira mais simples, sempre com um link de referência.

As versões foram desconsideradas e a lista pode ser atualizada a qualquer momento :]

JavaScript

Função variádica (rest parameters)

function minhaFuncao(...args) {}

Argumentos variádicos (spread operator)

const objIteravel = [1, 2, 3]
minhaFuncao(...objIteravel)

PHP

Função variádica (ellipsis token/operator)

function minhaFuncao(...$args) {}

Argumentos variádicos (unpack/splat operator)

$objIteravel = [1, 2, 3];
minhaFuncao(...$objIteravel);

Python

Função variádica (unpack operator)

def minhaFuncao(*args):

Argumentos variádicos (unpack/splat operator)

objIteravel = [1, 2, 3]
minhaFuncao(*objIteravel)

Ruby

Função variádica (unpack operator)

def minhaFuncao(*args)
end

Argumentos variádicos (unpack/splat operator)

objIteravel = [1, 2, 3]
minhaFuncao *objIteravel

Scala

Função variádica (repeated parameters)

def minhaFuncao(args: Any*) {}

Argumentos variádicos (sequence argument)

var objIteravel = Array(1, 2, 3)
minhaFuncao(objIteravel: _*)

Java

Função variádica (varargs)

public static void minhaFuncao(Integer... args) {}

C++

Função variádica (ellipsis argument)

#include <cstdarg>int minhaFuncao(int args, ...){}

Go

Função variádica (variadic functions)

func minhaFuncao(args ...int) {}

Argumentos variádicos (variadic argument)

objIteravel := []int{1, 2, 3, 4}
minhaFuncao(objIteravel...)

Groovy

PS: código do Groovy gentilmente enviado pelo camarada Felipe Mamud.

Função variádica (varargs)

def minhaFuncao(int... args) {}

Argumentos variádicos (spread operator)

def objIteravel = [1,2,3,4,5]
minhaFuncao(*objIteravel)

Para saber mais

O site Rosetta Code demonstra algoritmos e soluções para vários problemas em mais de 600 linguagens. Lá você pode ver a aplicação de funções variádicas também em outras linguagens.

--

--