Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отказываемся от Public var (http://www.flasher.ru/forum/showthread.php?t=171145)

in4core 09.11.2011 20:50

Отказываемся от Public var
 
Разговаривал я тут с одним хорошим java проггером, его постулат был - никаких публичных переменных, только геттеры и сеттеры.
Собственно хотелось бы обсудить данный вопрос, кто как считает?
Понятно , что с точки зрения полиморфа - только геттеры и сеттеры, с другой стороны если интерфейсность не нужны, то можно и пабликами обойтись !? , и третья сторона медали - Если есть инфо-класс содержащий только перменные и их допустим 100 , наверное тяжко будет вчитываться в такой класс с гет-сетами , нежели только с публик...
Вообщем как работаете Вы ?

Котяра 09.11.2011 20:53

В отличии от java у нас публичные переменные и акцессоры носят одно и то же имя, поэтому, если возникает необходимость добавить какие нибудь проверки в сеттер или продиспатчить событие, то это можно сделать в любой момент.
Я не сторонник бездумного раздувания кода и пишу сеттеры только при явной необходимости (но часто они реально нужны)
В яве же, нельзя поменять паблик на акцессор без изменения обращений к свойству во всём коде - поэтому описание свойств всегда через акцессоры - оправданы.
Разные языки - разные подходы.

in4core 09.11.2011 20:55

Мнение принятно, соглашусь. Хотелось бы услышать еще раздумья

Котяра 09.11.2011 21:03

Да про интерфейсы я как-то пропустил. Если они нужны, то да - используем акцессоры.

GBee 09.11.2011 21:05

Цитата:

Понятно , что с точки зрения полиморфа - только геттеры и сеттеры
Скорее с тз инкапсуляции.

Цитата:

Я не сторонник бездумного раздувания кода и пишу сеттеры только при явной необходимости
Я сюда же.

Wolsh 09.11.2011 21:14

Есть еще такая концепция деления классов на "классы" и "типы данных". Классы это то, что меняет данные, а типы данных - это набор данных безо всякой логики, то есть безо всякой обработки, без методов. В этом случае как раз нужно использовать public, но в случае с Классами такое встречается крайне редко: каждый Класс старается "защитить свои инвистиции", свои рабочие данные, и не позволить изменять их извне. Но исключения конечно есть, тот же Point.

Добавлено через 6 минут
Цитата:

Да про интерфейсы я как-то пропустил. Если они нужны, то да - используем акцессоры.
Вот как раз в контексте этой концепции ТипыДанных по определению не имеют интерфейса (что абсолютно разумно, так как они ничего не делают). И опять же, есть забавное исключение - IBitmapDrawable, маркерный интерфейс, "описывающий" не что объект делает, а что можно сделать с ним. Показательно, что он маркерный, то есть абсолютно пустой.

Котяра 09.11.2011 21:21

Как раз при использовании VO ("типы данных") чаще всего и приходится использовать акцессоры (для диспатча события об изменении)

Wolsh 09.11.2011 21:29

Нене, ТипыДанных служат для передачи данных (как обычно используется Ректангл и Пойнт для передачи параметров функциям), и ничего диспатчить они не собирались :) То, о чем говоришь ты – это уже Модель))

goodguy 09.11.2011 21:46

Часто использую публичные переменные в тех местах, где это не критично. Если сеттер только и делает то, что задает значение переменной, а геттер ее возвращает, то всегда использую просто public переменные где это возможно. К ним и доступ осуществляется быстрее, чем через геттеры.

Psycho Tiger 09.11.2011 22:09

Цитата:

Скорее с тз инкапсуляции.
А в чем она проявляется? Вот 2 варианта. Разницы нету.
Код AS3:

public function set item { _item = item; }
public function get item { return _item; }
 
public var item:*;

Использую акссесоры там, где нужно. Если акссесор не нужен - не использую.


Часовой пояс GMT +4, время: 21:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.