Pregunta

¿Hay una manera de sintetizar getters / setters en AS3? Es muy común que tiene una clase con una gran cantidad de variables, especialmente en cálculos matemáticos (modelo en el patrón MVC), que desea exponer. ¿Hay algo así como propiedad sintetizar en Objective-C, que permite generar getters / setters?

Gracias,

Nava

¿Fue útil?

Solución

EDIT: Si desea utilizar el IDE (eclipse). Usted puede ir en rightClick de clase> Fuente-> Generar captadores y definidores

No es el mismo uso que la sintetizan, pero si quieres sólo para exponerlos y no tiene que utilizar la notación getMethod (), que puede ayudarle a declarar los métodos con las palabras clave get / set como este.

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

Cuando se utiliza el tiempo de acceso puede utilizar las variables como si fueran pública y los métodos serán llamados en lugar de acceso directo

Otros consejos

Puede probar expresiones regulares. Tome una copia de seguridad antes de intentar este .

Por ejemplo, si las variables se denominan private _str y que desea es public captador / definidor ser identificado str, puede utilizar los siguientes patrones. Pulse Ctrl-F en Flex Builder (o eclipse), marque la casilla de verificación de expresiones regulares, y añadir las siguientes pautas para la búsqueda y reemplazo campos de entrada, respectivamente. Ahora pulse 'Buscar' para encontrar la declaración de propiedad y pulsa 'Reemplazar' para generar setter y 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 patrón fue probado en

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

Y se generó correctamente:

    private var _str:String;

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

Para aquellos que están utilizando la 3 IDE Flex Builder, hay plug-ins para la creación y la colocación de fragmentos de código, por ejemplo aquí: http: //www.insideria. com / 2008/04 / Flex-constructor-mejoras-fragmentos-y-todo.html (hay algunas otras herramientas pequeñas pero útiles compiladas en ese sitio)

Estos pueden ser utilizados para la generación de un captador más o menos cómodo / definidor.

Sin embargo, yo sólo crean captadores y definidores explícitas si necesito colocar algún código extra allí. Hay algunos que dicen que se rompe la encapsulación si no se utiliza captadores y definidores. Sin embargo, con un lenguaje donde se puede añadir captadores y definidores más adelante sin cambiar la interfaz, no creo que esto es verdad más. Para el usuario, es completamente transparente si está utilizando una asignación variable de llano o una función ajustada varName (arg: objeto):. Void

Y también tener en cuenta, que si se hace una variable [Bindable] (es decir, sin un nombre de evento explícito), el compilador crea captadores y definidores de la variable de wihtout que se diera cuenta que (salvo que ya hay captadores y definidores de curso). Esto es cierto de manera rápida y sucia para implementar interfaces que declaran funciones get y set

Si usted acaba de hacer que una propiedad pública que no tiene que preocuparse por los captadores y definidores:

public var str:String;

Sin embargo, si necesita algo en la línea de despacho de eventos para notificar a sí mismo de los cambios de propiedad, tendrá que codificar por sí mismo. Es de esperar que sea IDE que está usando puede ayudar mediante la generación de este tipo de código para usted, o puede que tenga que establecer algún tipo de fragmento de código del DIE puede inyectar para usted.

Evitar copiar y pegar si se puede, que está obligado a perder cambiar el nombre de algo que va a causar algún problema en el camino.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top