PLP 2017.1

Suporte a Parâmetros Opcionais em Funções e Procedimentos

Introdução

Este é um trabalho desenvolvido na disciplina Paradigmas e Linguagens de Programação da UFPE, semestre 2017.1, sob a orientação do Prof. Dr. Augusto Cesar Alves Sampaio.

Escopo

O objetivo deste projeto é estender as linguagens LF2 (Linguagem Funcional 2) e OO1 (Linguagem Orientada a Objetos 1) para fornecer o suporte a parâmetros opcionais em funções (para LF2) e procedimentos/métodos (para OO1). Tal suporte permite que uma função ou um procedimento seja chamado omitindo um ou mais parâmetros, possuindo um valor padrão definido para esses na especificação da função.

Java não dá suporte direto a esta funcionalidade, sendo implementada somente por técnicas como sobrecarga de métodos. Por outro lado, diversas linguagens permitem a definição de parâmetros opcionais diretamente na declaração de uma função, incluindo C++, JavaScript, Python e C#.

Exemplo de código com parâmetro opcional em JavaScript:

function multiply (a, b = 1) {
  return a * b;
}

A chamada multiply(3) retorna 3, pois o valor 1 é fornecido como default para o parâmetro b.

Enquanto algumas linguagens (como C#) - que dão suporte a essa funcionalidade - restringem o valor padrão a ser uma constante, outras linguagens, como JavaScript, permitem a referência a outras variáveis, incluindo outro parâmetro formal, por exemplo:

function multiply2 (a, b = a) {
  return a * b;
}

A chamada multiply2(3) retorna 9 neste caso.

Vamos adotar o comportamento implementado por JavaScript, não restringindo valores default a constantes, neste projeto. Dessa forma, o valor padrão a ser atribuído a um parâmetro opcional pode ser uma constante ou uma expressão referenciando uma variável definida em um escopo externo ou um parâmetro da própria função.

Equipe

Referências

  • Gary Ford and Brian Hansche. Optional, repeatable, and varying type parameters. SIGPLAN Not., 17(2):41–48, 1982.
  • James Noble. Arguments and results. The Comp. J., 43(6):439–450, 2000.
  • Matti O. Jokinen. Parameter Transmission Abstractions. Comput. J. 33(2):133-139, 1990.
  • V. R. Prasad. Variable number of parameters in typed languages. Software - Practice & Experience 10, 507-517, 1980.
  • J. Y. Gil and K. Lenza. Keyword- and default- parameters in java. Journal of Object Technology, 11(1):1-17, 2012.
  • Richard L. Naugle and Joseph B. Schlam. Extending APL “optional arguments”. Proceedings of the international conference on APL, 229-233, 1982.