21 de jan. de 2010

ActionScript por um programador Java: parte 2


Mais uma semana de desenvolvimento com Flex e ActionScript, mais algumas diferenças para o Java.

- Em ActionScript não é possível sobrecarregar um construtor ou um método, por exemplo, em Java posso fazer isso:

public void pagamento(Date dataPagamento, Double valor) { ... }
public void setPagamento(Double valor) { ... }

*Caso se o vencimento for omitido eu possa usar a data atual como data do pagamento.

Em ActionScript dá para fazer assim:

public function pagamento(valor:Number, data:Date=null) : void  { ... }

Nesta caso assumo a data com o valor padrão null, tornando o parâmetro opcional. Note, os parâmetros obrigatórios sempre tem que vir primeiro, como o valor. 

Agora posso chamar este método assim:  instancia.pagamento(100); ou assim: instancia.pagamento(100, new Date(2010, 1, 10));


- No ActionScript também existe algo semelhante ao varargs do Java, chamado de "rest". Posso declara o método como abaixo:

public function pagamento(valor:Number, ... outrosArgumentos) : void  { ... }

Neste caso, as reticências declaram um argumento "rest", que é um Array e pode ser iterado no corpo do método. Assim como no Java o argumento rest (varargs no Java) tem que ser o último argumento. No Java é assim:

public void pagamento(Double valor, Object ... outrosArgumentos) { ... }

ou 

public void pagamento(Double valor, Date ... datas) { ... }

Neste caso posso chamar este método definindo ou não o segundo argumento (terceiro, quarto...). Note que Java é tipado, ou seja, não há definição de tipo no Runtime como no ActionScript então ele deve fazer parte dos argumentos, diferente do AS.


- No ActionScript as funções são objetos e podem ser atribuídas a uma variável como abaixo:

var pagamento:Function = function (valor:Number) : void { ...}

Também podem ser passadas como parâmetros, como abaixo:

public function fazAlgo(metodo:Function) { ... }
Isto é especialmente útil para delegar ou fazer callbacks, caso dos retornos de chamadas no tratamento de Eventos, como abaixo:

btPagamento.addEventListener(MouseEvent.CLICK, pagamento);

Neste caso, pagamento é uma função. No C# é semelhante. Particularmente acho este método de tratamento de eventos muito melhor que no Java que usa o padrão Observer/Observable para implementar.

Bom, por enquanto é só, escrever ajuda a memorizar.

Nenhum comentário: