синтезировать геттеры / сеттеры в AS3 - PullRequest
0 голосов
/ 16 ноября 2009

Есть ли способ синтезировать геттеры / сеттеры в AS3? Очень часто у вас есть класс с большим количеством переменных, особенно в математических вычислениях (модель в шаблоне MVC), который вы хотели бы представить. Есть ли что-то вроде свойства синтеза в Objective-C, которое позволяет генерировать геттеры / сеттеры?

Спасибо

Нава

Ответы [ 4 ]

2 голосов
/ 16 ноября 2009

Для тех, кто использует IDE Flex Builder 3, существуют плагины для создания и размещения фрагментов кода, например, здесь: http://www.insideria.com/2008/04/flex-builder-enhancements-snippets-and-todo.html (на этом сайте собраны некоторые другие небольшие, но полезные инструменты)

Они могут использоваться для более или менее комфортного поколения геттеров / сеттеров.

Однако я создаю явные методы получения и установки только в том случае, если мне нужно поместить туда дополнительный код. Некоторые говорят, что это нарушает инкапсуляцию, если вы не используете геттеры и сеттеры. Однако, с языком, где вы можете добавлять геттеры и сеттеры позже, не меняя интерфейс, я не думаю, что это больше так. Для пользователя он полностью прозрачен, если он использует простой набор переменных или набор функций varName (arg: object): void.

И помните, что если вы создадите переменную [Bindable] (т.е. без явного имени события), компилятор создаст для вашей переменной методы получения и установки, даже если вы не заметите ее (за исключением того, что уже есть методы получения и установки курс). Кстати, это быстрый и грязный способ реализации интерфейсов, которые объявляют функции получения и установки

2 голосов
/ 16 ноября 2009

Вы можете попробовать регулярное выражение. Сделайте резервную копию перед попыткой этого .

Например, если ваши private переменные имеют имя _str и вы хотите, чтобы public getter / setter был назван str, вы можете использовать следующие шаблоны. Нажмите Ctrl-F во Flex Builder (или Eclipse), поставьте флажок в поле регулярного выражения и добавьте следующие шаблоны в поля поиска и замены соответственно. Теперь нажмите «Найти», чтобы найти объявление свойства, и нажмите «Заменить», чтобы сгенерировать сеттер и геттер.

^((\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

Этот шаблон был протестирован на

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

И это успешно сгенерировано:

    private var _str:String;

    public function set str(value:String):void
    {
        _str = value;
    }
    public function get str():String
    {
        return _str;
    }
1 голос
/ 16 ноября 2009

Если вы просто сделаете это общедоступной собственностью, вам не придется беспокоиться о методах получения и установки:

public var str:String;

Однако, если вам нужно что-то в соответствии с рассылкой событий, чтобы уведомить себя об изменениях свойств, вам нужно будет написать это самостоятельно. Надеемся, что любая используемая вами IDE может помочь в создании такого кода для вас, или вам может потребоваться настроить какой-то фрагмент кода, который DIE может внедрить для вас.

Избегайте копирования и вставки, если можете, вы наверняка пропустите изменение имени чего-то, что вызовет проблемы в будущем.

0 голосов
/ 16 ноября 2009

РЕДАКТИРОВАТЬ: Если вы хотите использовать IDE (затмение). Вы можете щелкнуть правой кнопкой мыши по классу-> Source-> Generate Getters and Setters

Это не то же самое использование, что и для синтеза, но если вы хотите просто представить их и не использовать нотацию getMethod (), это может помочь вам объявить методы с ключевыми словами get / set следующим образом.

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

Когда вы используете его во время доступа, вы можете использовать переменные, как если бы они были открытыми, и методы будут вызываться вместо прямого доступа

...