Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > f.g.programmer

Оценить эту запись

ActionScript 3.0. Правила именования.

Запись от f.g.programmer размещена 25.09.2010 в 02:12
Обновил(-а) BlooDHounD 29.09.2010 в 14:10

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

Сразу скажу, что признаю возможность своей неправоты и не призываю строго придерживаться правил описанных мною. Каждый предпочитает что-то своё, и что подходит одному не всегда подойдёт другому.

Базовые принципы

* Имя должно отображать суть.
* Имя должно быть легко читаемым.
* Сокращения используются только если они узнаваемы и не ухудшают читаемость.
* Имя должно быть англоязычным.



Имя класса
Здесь всё просто, правило общее для многих языков.
Набор слов, каждое начинается с прописной буквы, по сути - существительное в единственном числе с определяющими словами. Аббревиатуры пишутся прописными буквами.
Примеры
Код AS3:
BigGreenSquare
AngryCat
XMLParser

Имя поля

Имя поля - это переменная-свойство класса или его экземпляра. Служат для хранения и управления состояниями объектов.
Код AS3:
class  AngryCat {
    private static var _manager:AngryCatManager; // поле класса
    private var _sex:int; // поле экземпляра
}
Поля классов всегда private, поля экземляров - private или protected.
Имя по сути - существительное в единственном или множественном числе с определяющими словами. Все буквы в имени строчные, слова отделяются друг от друга символом подчёркивания, начинается с символа подчёркивания.
Примеры
Код AS3:
_x
_begin_speed
_current_target
_new_best_friends // в случае с множественным числом, это обычно Array или Vector
Поля экземпляров также могут быть определяющим словом или словами относящимися к самому экземляру, примеры
Код AS3:
_ready
_loaded
Локальные переменные и параметры методов
По сути - существительное в ед. или мн. числе с определяющими словами. Все буквы строчные, слова отделяются друг от друга символом подчёркивания, начинается с буквы.
Код AS3:
Примеры
local_variable
temp_state
result
args

Функции, методы, геттеры, сеттеры

Набор слов, первое начинается со строчной буквы, остальные с прописной.
Имена функций и методов по сути представляют из себя некоторый процесс, действие или вопрос, обычно начинаются с глагола.
Имена геттеров, сеттеров по сути то же что и поля
Примеры функций и методов
Код AS3:
doSomething()
createNewCat()
isReady()
Примеры геттеров, сеттеров
те же что и для полей, но с правилами набора букв как у функций
Код AS3:
beginSpeed
currentTarget
loaded

Константы

Набор слов, разделённых символом подчёркивания, состоящий из прописных букв. По сути ближе всего к переменным.
Примеры
Код AS3:
MAX_VALUE
RADIAN_COOF

Интерфейсы
Интерфейсы в AS3 состоят из списка методов или геттеров, сеттеров. По сути служат для отображения способности что-то делать.
Имя начинается с большой буквы “I”, все остальные слова пишутся с заглавной буквы. Часто кончается на “able”, или представляет из себя абстракцию высокого уровня.
Примеры
Код AS3:
IDrawable
IClonable
ITrajectory
Всего комментариев 59

Комментарии

Старый 25.09.2010 13:48 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Старый 25.09.2010 14:22 ZGG вне форума
ZGG
 
Аватар для ZGG
DClick предлагает свои принципы именование, которые, как мне кажется, более удобны:

adobe-flex-coding-guidelines-v12-english.pdf
Старый 25.09.2010 14:28 andrew911 вне форума
andrew911
Старый 27.09.2010 11:44 AS3Coder вне форума
AS3Coder
 
Аватар для AS3Coder
Всё правильно
Старый 27.09.2010 13:32 etc вне форума
etc
 
Аватар для etc
Подчеркивания в именах локальных переменных и полей — убого.
Старый 27.09.2010 14:10 Котяра вне форума
Котяра
 
Аватар для Котяра
300 раз уже обсуждалось. Используйте общепринятые ковенции, не надо своего изобретать.
Иначе при подключении внешних библиотек получится каша.
Я, например, очень мучаюсь с box2D - раздражает он меня)
Старый 27.09.2010 15:01 AS3Coder вне форума
AS3Coder
 
Аватар для AS3Coder
Цитата:
Иначе при подключении внешних библиотек получится каша.
В любом случае получается каша С тем же Box2D
Старый 27.09.2010 17:43 expl вне форума
expl
Цитата:
Подчеркивания в именах локальных переменных и полей — убого.
Про обязательное написание this перед всеми полями объекта можно тоже так сказать
Ни то ни другое не является адобовским стандартом
Старый 27.09.2010 19:11 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
По негласным стандартам "_" таки пишется перед приватными-протектедными полями. Локальные не являются таковыми, поэтому нельзя сказать что писать "_" перед локальными переменными хорошо, однако это не является достаточным условием чтобы сказать, что это плохо.
Старый 27.09.2010 20:32 dimarik вне форума
dimarik
 
Аватар для dimarik
Цитата:
это переменная-свойство
Пишется через тире (Alt + 0151), либо дефис обрамляйте пробелами.
Старый 27.09.2010 20:36 dimarik вне форума
dimarik
 
Аватар для dimarik
Не пишу подчерк ('_') перед protected и вам не советую.
Старый 27.09.2010 20:38 dimarik вне форума
dimarik
 
Аватар для dimarik
Цитата:
DClick предлагает свои принципы именование, которые, как мне кажется, более удобны:

adobe-flex-coding-guidelines-v12-english.pdf
Докатились, качаем convention с файлопомойки.
Старый 28.09.2010 01:30 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
Цитата:
Пишется через тире (Alt + 0151), либо дефис обрамляйте пробелами.
не в этот раз. тут мы имеем случай "человек-паук", а не "человек — не паук!"
Старый 28.09.2010 16:34 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Не пишу подчерк ('_') перед protected и вам не советую.
Я пишу подчерк ('_') для переменных, видимых в этом классе или в этом пакете. То есть для private и internal. Остальное может вылезать за пределы пакета (protected может быть виден классу наследнику, который написал кто-то другой в своем пакете) и для него я подчерк не пишу. Типа разделения на "мой код" и "не мой код"
Старый 28.09.2010 18:17 expl вне форума
expl
Офтоп: Да с каких пор поля стали "переменными" называть, сбивает же с толку, а то можно подумать что Вы локальные переменные с "_" пишете
Старый 29.09.2010 01:09 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Поле класса может быть как изменяемым, так и не изменяемым (const и var). Соответственно, поле класса может быть переменной. Или как?
Старый 29.09.2010 13:29 i.o. вне форума
i.o.
 
Аватар для i.o.
var - variable - переменная.
С таким же успехом можно спросить: давно ли стали переменные класса называть полями?
Старый 29.09.2010 14:09 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
@i.o
вы путаете тёплое с мягким. это определения разного уровня.
Старый 29.09.2010 15:33 i.o. вне форума
i.o.
 
Аватар для i.o.
BlooDHounD, а вот и не путаю. Советую внимательнее ознакомиться с вопросом
Цитата:
Да с каких пор поля стали "переменными" называть
и моим ответом
Цитата:
давно ли стали переменные класса называть полями?
Полная аналогия, не замечаете?
Обновил(-а) i.o. 29.09.2010 в 15:55
Старый 29.09.2010 16:47 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
i.o., ваше замечание не в тему. непонятно что вы имели виду. когда смысл слов expl донесён абсолютно чётко.
Старый 30.09.2010 00:17 expl вне форума
expl
Цитата:
Поле класса может быть как изменяемым, так и не изменяемым (const и var). Соответственно, поле класса может быть переменной. Или как?
Просто, вроде такая терминология устоялась:
- переменная - локальная переменная, объявленная внутри метода/анонимной функции;
- поле - поле экземпляра класса (protected var item:Item, private var item:Item и т.п)
- статическое поле - поле класса (private static var item:Item, ...)
ИМХО называть поля переменными - все равно что называть методы функциями,
зачем путаться, когда терминология уже есть.
Обновил(-а) expl 30.09.2010 в 00:19
Старый 30.09.2010 01:45 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
все равно что называть методы функциями
Метод является функцией. Функция может быть методом.
Точно так же, в моем понимании, и с полями класса. По сему - не вижу в сказанном ни ошибки, ни путаницы
Старый 30.09.2010 02:00 f.g.programmer вне форума
f.g.programmer
 
Аватар для f.g.programmer
Возможно использование подчёркивания не очень удобно при наборе, при использовании автокомплита это неудобство нейтрализуется.

Мною был выбран такой способ именования так как он позволяет делать имена полей, переменных и геттеров-сеттеров визуально различными.
Код AS3:
_field_name // имя поля
local_variable_name // имя локальной переменной или параметра
getterName // имя метода-геттера
В принципе, с некоторыми дополнениями, официальные соглашения тоже позволяют это делать, например
Код AS3:
_fieldName
localVariableName
this.getterName
Но первый способ мне понравился больше.
Старый 30.09.2010 12:05 etc вне форума
etc
 
Аватар для etc
expl, а что, Адобовские рекомендации уже закон что ли? Если там попросят переносить открывающую фигурную скобку на пустую строку, будем переносить?
Старый 30.09.2010 12:47 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Локальные переменные пишу без _
Приватные и протектедные поля пишу с _. Паблик без. Интернал использую крайне редко, не могу сказать что использую там )
Это позволяет четко видеть, что доступно за пределами класса, а что нет. protected считаю недоступным за пределом класса, несмотря на наследование и всё остальное. Вроде бы протектед с _ с флешера пишу вообще только я)

Из конвенции кода следую всему, кроме парочки вещей. Одна из - это break на одном уровне с case. Мне крайне неудобно когда break идёт во вложенности case`а. )
Старый 30.09.2010 12:59 easy.proger вне форума
easy.proger
Цитата:
expl, а что, Адобовские рекомендации уже закон что ли? Если там попросят переносить открывающую фигурную скобку на пустую строку, будем переносить?
Не знаю, мне лично, там говорят не кушать после 7ми и ходить один раз в туалет ! я выполняю без прекословно !
Старый 30.09.2010 23:03 expl вне форума
expl
Цитата:
expl, а что, Адобовские рекомендации уже закон что ли? Если там попросят переносить открывающую фигурную скобку на пустую строку, будем переносить?
Это про объявление объекта?
Код AS3:
var object:Object =
{
    a: 10,
    b: 20
}
Я переносил и никаких неудобств это не вызвало, но потом посмотрел, что колеги это игнорят напрочь и поправил наше соглашение по кодированию.

Да, есть там спорные моменты, например не разделяю рекомендуемые ими неявные приведения к булеву типу (if (sprite) ...),

... да, параллель я не чёткую провел, пытаясь обломать критику "_" перед приватными полями.
Да, то что пишут "this" где надо и не надо и это не являетя стандартом - не означает, что они не имеют права критиковать "_", который тоже не по стандартам перед каждым полем
Но все равно, "убого" - это для вас убого, а для других - это зашибись.

Цитата:
Вроде бы протектед с _ с флешера пишу вообще только я)
Не, еще пишет большая часть флешеров нашей конторы, причем даже для статических протектед - что их, собственно, различать? Сегодня поле private - завтра оно протектет - зачем туда-сюда "_" гонять?
Обновил(-а) expl 30.09.2010 в 23:15
Старый 30.09.2010 23:23 f.g.programmer вне форума
f.g.programmer
 
Аватар для f.g.programmer
Статические протектед? Звучит жутковато
Старый 30.09.2010 23:38 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
даже для статических протектед
Меня тоже удивило =)
Старый 01.10.2010 11:29 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
Метод является функцией. Функция может быть методом.
Точно так же, в моем понимании, и с полями класса. По сему - не вижу в сказанном ни ошибки, ни путаницы
Может, но в теории, а на практике это звучит безграмотно.
Старый 01.10.2010 14:51 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Приватные статические, протектед статические. Вполне нормальная практика. Вы их не используете?
Старый 01.10.2010 21:58 dimarik вне форума
dimarik
 
Аватар для dimarik
Цитата:
не в этот раз. тут мы имеем случай "человек-паук", а не "человек — не паук!"
Согласен. Тогда теплое отделяем от мягкого, выкидываем слово "переменная", так как она есть подмножество определения и получаем стилистически грамотное предложение.

"Имя поля - это название свойства класса или его экземпляра".
Старый 01.10.2010 23:51 f.g.programmer вне форума
f.g.programmer
 
Аватар для f.g.programmer
Цитата:
Приватные статические, протектед статические. Вполне нормальная практика. Вы их не используете?
public static function, private static function - для фабричных методов и методов использующих private statiс
public static const, private static const - для констант
private static var - для переменных

где может быть оправдано использование protected static на ум не приходит
Старый 01.10.2010 23:53 easy.proger вне форума
easy.proger
Блин, вам не надоело ? зачем всех причесывать под одну гребенку ? в 99% случаев ваш код увидите только вы сами... в остальных 1% есть правила команды...
Старый 02.10.2010 03:13 dimarik вне форума
dimarik
 
Аватар для dimarik
Цитата:
Блин, вам не надоело ?
Иногда хочется странного.
Старый 02.10.2010 04:42 i.o. вне форума
i.o.
 
Аватар для i.o.
Цитата:
где может быть оправдано использование protected static на ум не приходит
Ну значит еще не сталкивались с необходимостью использования. Очень удобно, между прочим, при многократном наследовании класоов. Позволяет напрямую (аля _прапраПредковскийСтатическийМетод()) вызывать внутренние статические функции, определенные в каком-нибудь пра-пра-предке.
Обновил(-а) i.o. 02.10.2010 в 06:51
Старый 02.10.2010 12:35 expl вне форума
expl
Цитата:
Блин, вам не надоело ? зачем всех причесывать под одну гребенку ? в 99% случаев ваш код увидите только вы сами... в остальных 1% есть правила команды...
Это только если вы фрилансер, в противном случае в 99% процентов случаев вы услышите много мата в свой адрес от коллег
Старый 02.10.2010 14:04 easy.proger вне форума
easy.proger
Цитата:
Это только если вы фрилансер, в противном случае в 99% процентов случаев вы услышите много мата в свой адрес от коллег
в таком случае колЛеги и будут вам диктовать правила... о чем выше я и написал
Старый 02.10.2010 15:52 Zik. вне форума
Zik.
 
Аватар для Zik.
Цитата:
не в этот раз. тут мы имеем случай "человек-паук", а не "человек — не паук!"
К сожалению перед отрицанием не ставится тире)
Старый 02.10.2010 19:53 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
easy.proger: в таком случае Вы навсегда останетесь тем, кому будут диктовать правила, а не кто.

f.g.programmer, самый простой пример - при изменении какой-нибудь величины, общей для всех экземпляров (например, скорость) потребуется громоздкое вычисление какой-нибудь другой величины, которую, однако, знать не потомкам не нужно - например необходимая сила, с которой нужно воздействовать на элемент для баланса системы.

ZIK68, ээ... ты не в теме)
Старый 02.10.2010 20:31 easy.proger вне форума
easy.proger
Цитата:
easy.proger: в таком случае Вы навсегда останетесь тем, кому будут диктовать правила, а не кто.
пфф... бесполезно
Старый 02.10.2010 21:12 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Есть стандарт, есть здравый смысл. Правила нормальной команды строятся на стандарте, с минимальными поправками на здравый смысл - etc отличный пример привёл. Если не принимать стандарт, а выдумать свой - то при использовании сторонних библиотек код превратится в помойку.
Старый 02.10.2010 22:08 f.g.programmer вне форума
f.g.programmer
 
Аватар для f.g.programmer
Psycho Tiger, хранить состояние системы объектов в статических переменных базового класса этих объектов не кажется хорошим примером.
Для данного случая, пожалуй, лучше завести некоторый класс системы, который будет управлять элементами системы.
Старый 03.10.2010 11:54 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Не состояние, а какую то дельту, которую по идее, можно вычислять каждый раз - но она прокэшировалась сразу и для всех.
Старый 04.10.2010 23:25 dimarik вне форума
dimarik
 
Аватар для dimarik
Цитата:
Сообщение от ZIK68
К сожалению перед отрицанием не ставится тире)
"Жизнь прожить — не поле перейти". (с) Русский могучий. Мальчики, гуглим.
Старый 06.10.2010 03:05 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
На самом деле с правилами все гораздо проще. У кого кнопка "разрешить" положить в репозитори, тот правила и устанавливает Ну не буквально конечно, но вы поняли. Я за if (foo == null) в случае, если foo - объект тупо реджектю и не волнует.
Старый 06.10.2010 10:49 Котяра вне форума
Котяра
 
Аватар для Котяра
2wvxwv это ты что весь код смотришь? Я б повесился.)
Старый 06.10.2010 12:39 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
wvxvw, а что может быть null, но не является объектом? String? Вроде тоже объект. Непонятно)
Старый 06.10.2010 22:46 dimarik вне форума
dimarik
 
Аватар для dimarik
О, Олешка вернулся! Много багов сдал в адоб? ) А что там про ссылку-нулл забавное можно послушать?
Старый 06.10.2010 23:15 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
хех, я баги не сдавал... но буду, куда деться. Индекс в массиве может быть либо null либо undefined и еще много чего, что может быть false, например, но за код, в котором будут undefined я тоже выпишу, так что, можно сказать, что никогда.
Кода пока не много, больше организационные моменты напрягают, так что я лучше посмотрю в код, чем буду выяснять кому и чего делать
 
Последние записи от f.g.programmer

 


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


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