Pergunta

Existe uma maneira de sintetizar getters/setters em AS3?É muito comum você ter uma classe com muitas variáveis, principalmente em cálculos matemáticos (Modelo no padrão MVC), que você gostaria de expor.Existe algo como propriedade sintetizada em Objective-C, que permite gerar getters/setters?

Obrigado,

Nava

Foi útil?

Solução

EDITAR:Se você quiser usar o IDE (eclipse).Você pode clicar com o botão direito em class-> Source-> Generate Getters and Setters

Não é o mesmo uso que sintetizar, mas se você quiser apenas expô-los e não precisar usar a notação getMethod(), pode ajudá-lo a declarar os métodos com as palavras-chave get/set desta forma.

public function get example() : int
{
             return example;
}
public function set example( value : String ) : void
{
             example = value;
}

Ao utilizá-lo no momento do acesso você poderá utilizar as variáveis ​​como se fossem públicas e os métodos serão chamados ao invés do acesso direto

Outras dicas

Você pode tentar regex. Faça um backup antes de tentar isso.

Por exemplo, se o seu private variáveis ​​são nomeadas _str e você quer que seja public getter/setter a ser nomeado str, você pode usar os seguintes padrões.Pressione Ctrl-F no flex builder (ou eclipse), marque a caixa de seleção regex e adicione os seguintes padrões aos campos de pesquisa e substituição, respectivamente.Agora clique em 'Localizar' para encontrar a declaração de propriedade e clique em 'Substituir' para gerar setter e getter.

^((\t)+)private\s+var\s+_(\w+):(\w+)\s*;\s*(\n)

$0$5$1public function set $3(value:$4):void$5$1{$5$1$2_$3 = value;$5$1}$5$5$1public function get $3():$4$5$1{$5$1$2return _$3;$5$1}$5$5

Este padrão foi testado em

        private var _str:String;//indented by two tabs

E gerou com sucesso:

    private var _str:String;

    public function set str(value:String):void
    {
        _str = value;
    }
    public function get str():String
    {
        return _str;
    }

Para aqueles que usam o IDE Flex Builder 3, existem plug-ins para criar e colocar trechos de código, por exemplo.aqui: http://www.insideria.com/2008/04/flex-builder-enhancements-snippets-and-todo.html (existem algumas outras ferramentas pequenas, mas úteis, compiladas nesse site)

Eles podem ser usados ​​para uma geração getter/setter mais ou menos confortável.

No entanto, eu só crio getters e setters explícitos se precisar colocar algum código extra lá.Há quem diga que isso quebra o encapsulamento se você não usar getters e setters.No entanto, com uma linguagem onde você pode adicionar getters e setters posteriormente sem alterar a interface, não acho que isso seja mais verdade.Para o usuário, é completamente transparente se ele está usando uma atribuição de variável simples ou um conjunto de funções varName(arg:object):void.

E também tenha em mente que se você criar uma variável [Bindable] (ou seja,sem um nome de evento explícito), o compilador cria getters e setters para sua variável sem que você perceba (exceto que já existem getters e setters, é claro).Esta é, aliás, uma maneira rápida e suja de implementar interfaces que declaram funções getter e setter

Se você apenas faz de uma propriedade pública, não precisa se preocupar com getters e setters:

public var str:String;

No entanto, se você precisar de algo parecido com a despacho de eventos para se notificar sobre as alterações da propriedade, precisará codificá -lo. Esperançosamente, qualquer que o IDE que você esteja usando possa ajudar gerando esse tipo de código para você, ou pode ser necessário configurar algum tipo de snippet de código que o dado pode injetar para você.

Evite copiar e colar, se puder, você perderá o nome de algo que causará problemas no caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top