2.5. Direção do argumento
Até agora falamos que os argumentos são passados para o objeto, ou seja, eles entram no objeto. Essa é a direção padrão, onde as informações são identificadas pelo objeto “chamador” e enviadas para o objeto “executado”. Para essa configuração padrão, dizemos que a direção é “in” (entrada).
Entretanto há outra possibilidade. Os argumentos podem ser passados vazios para o objeto e dentro do método as informações são criadas e armazenadas nos argumentos. Feito isso, o objeto “chamador” pode, então, utilizar essas informações. Dessa forma, os argumentos não entram no objeto executado, mas sim o oposto, as informações saem do objeto chamado. A ideia aqui é que ao invés de um objeto retornar apenas um valor (o que acontece quando usamos o atributo de retorno no final da chamada), ele pode retornar vários valores. Para essa configuração, mais rara, mas ainda comum em programação, declaramos a direção como “out” (saída).
A forma padrão para citar a direção é incluir as opções “in” ou “out” antes de declarar o argumento. Para o nosso exemplo anterior, a nomenclatura completa seria ajustada para:
venderLivro (in cliente:Pessoa, in livrosAComprar:Livros[1..*], in pagamentoEscolhido:FormaPagamento): VendaConcluida
Para entender melhor a questão da direção do tipo “out”, vamos pensar num exemplo hipotético. Suponha que você queira consultar todos os livros e todos os autores relacionados a uma determinada editora. Perceba que neste cenário poderia haver um objeto que retornasse dois conjuntos distintos de informação: livros e autores. Não seria possível retornar esses dois objetos como um retorno normal de um objeto, mas poderíamos utilizar então do artifício proposto (argumento do tipo “out”). Para isso, passaríamos como entrada os dados da editora, e o método retornaria os dois conjuntos de informação que solicitamos.