Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Константы заглавными буквами (http://www.flasher.ru/forum/showthread.php?t=213929)

callme 02.03.2017 11:01

Константы заглавными буквами
 
Для читабельности мы именуем константы заглавными буквами. Например Keyboard.DOWN. Но почему мы тогда не помечаем переменные суффиксами: applesInt, addressString, orangesArray?

Tails 02.03.2017 11:05

В типизированном языке в этом мало смысла.

callme 02.03.2017 11:14

Цитата:

Сообщение от Tails (Сообщение 1199439)
В типизированном языке в этом мало смысла.

а какой смысл в именовании констант заглавными буквами?

undefined 02.03.2017 11:36

смысл показать что это именно константа.К тому же бывает встречаются и переменные типа iCount

callme 02.03.2017 11:51

Цитата:

Сообщение от undefined (Сообщение 1199441)
смысл показать что это именно константа.

Зачем нам нужно знать, что это константа?

Цитата:

Сообщение от undefined (Сообщение 1199441)
К тому же бывает встречаются и переменные типа iCount

Ну это вы привели какой-то частный случай. Давайте говорить об общей практике именования переменных и констант.

undefined 02.03.2017 12:03

Цитата:

Зачем нам нужно знать, что это константа?
чтоб не написать нечто вроде
Код AS1/AS2:

Keyboard.DOWN="new value";


callme 02.03.2017 12:08

Цитата:

Сообщение от undefined (Сообщение 1199443)
чтоб не написать нечто вроде
Код AS1/AS2:

Keyboard.DOWN="new value";


По той же логике надо помечать переменные суффиксами, например applesInt, чтобы не сделать так:
Код AS3:

apples.eat();


Tails 02.03.2017 13:41

Цитата:

Сообщение от callme (Сообщение 1199440)
а какой смысл в именовании констант заглавными буквами?

Такой стандарт. А смысл в том, в чём смысл любого другого стандарта - сделать жизнь проще.

ZackMercury 02.03.2017 13:55

Правильней было бы numApples, если это int. Тогда точно не сделаешь так
Код AS3:

apples.eat();

С адресом странный пример, сложно придумать случай, где ты забыл, что у тебя адрес - строка.
oranges:Array - это логично. Только в этом случае стоит использовать существительное во множественном числе без какой-либо приставки типа num.

callme 02.03.2017 14:10

Цитата:

Сообщение от Tails (Сообщение 1199447)
Такой стандарт. А смысл в том, в чём смысл любого другого стандарта - сделать жизнь проще.

Меня интересует почему авторы стандарта рекомендуют написание констант заглавными, а суффиксы нет.

Цитата:

Сообщение от ZackMercury (Сообщение 1199448)
С адресом странный пример, сложно придумать случай, где ты забыл, что у тебя адрес - строка.

А если это не строка, а экземпляр класса Address?

Цитата:

Сообщение от ZackMercury (Сообщение 1199448)
oranges:Array - это логично. Только в этом случае стоит использовать существительное во множественном числе без какой-либо приставки типа num.

А если это не array а пул? Писать pullOfOranges?

illuzor 02.03.2017 14:39

Цитата:

Сообщение от callme (Сообщение 1199449)
Меня интересует почему авторы стандарта рекомендуют написание констант заглавными, а суффиксы нет.

Спросите это у разработчиков ecmascript.

А вообще, это всё похоже на троллинг.

callme 02.03.2017 15:02

Цитата:

Сообщение от illuzor (Сообщение 1199452)
А вообще, это всё похоже на троллинг.

Понимаю, что вопрос кажется копеечным, но у него есть предыстория. Мы с другим программистом дискутировали на совсем другую, важную для нас тему, и дискуссия свелась к аргументу с его стороны: типа по моей логике тогда уж и именование констант не должно отличаться от именования обычных переменных.

И тогда я подумал: "ну да, а почему бы и нет"?

То есть какие-то неясности в архитектуре в мелочах потом начинают обрастать как снежный ком.

undefined 02.03.2017 15:18

так naming conventions - это же рекомендации.Никто не заставляет им следовать.Причем тут архитектура?
А то можно дойти и до
Код AS3:

var instanceMySuperPuperClass;

В жаве, например,почему-то все поля класса пишутся с префиксом m:
Код AS1/AS2:

private AppLovinIncentivizedInterstitial mIncent;

Что это значит нигде не пишут.

ZackMercury 02.03.2017 15:19

Цитата:

А если это не строка, а экземпляр класса Address?
В этом случае(если вдруг забыл, что такое address) можно воспользоваться помощью FlashDevelop
https://pp.userapi.com/c636317/v6363...xqFuyIWlhE.jpg

Цитата:

А если это не array а пул? Писать pullOfOranges?
А они чем-то отличаются в функциональном плане? И тем не менее, мне кажется красивым такой вариант: orangesPool.

Добавлено через 1 минуту
undefined, m значит member

undefined 02.03.2017 15:29

Цитата:

undefined, m значит member
Благодарю.

callme 02.03.2017 15:43

Цитата:

Сообщение от undefined (Сообщение 1199454)
так naming conventions - это же рекомендации.Никто не заставляет им следовать.

Я это понимаю.

Цитата:

Сообщение от ZackMercury (Сообщение 1199455)
В этом случае(если вдруг забыл, что такое address) можно воспользоваться помощью FlashDevelop

С константами тоже самое, необязательно их заглавными буквами писать. IDE их может цветом пометить например.

Цитата:

Сообщение от ZackMercury (Сообщение 1199455)
А они чем-то отличаются в функциональном плане?

Это экземпляры разных классов. С экземпляром одного класса нельзя делать то, что можно делать с экземпляром другого. Если один класс наследует другой, то можно, но все равно только часть.

Wolsh 02.03.2017 17:34

Вы понимаете, что константа и переменная это не Классы? Что это сущности гораздо более высокого уровня? Что пул и массив это сущности другого уровня, они просто Классы и на уровне языка они не различаются, то есть и то, и другое — класс?
Цитата:

Меня интересует почему авторы стандарта рекомендуют написание констант заглавными, а суффиксы нет.
Вам уже ответили выше — в типизированном языке суффиксы не имеют смысла. И еще раз, ваши суффиксы говорили бы только о том, какой это Класс. Константы и переменные — это не классы. Вы сравниваете теплое с зеленым.

callme 02.03.2017 17:52

Wolsh

Мы даем константам имена в верхнем регистре, чтобы в коде отличать их от обычных переменных.

Вопрос: зачем нам знать, что сущность перед нами является константой?
Ответ: чтобы не совершать над константой недопустимые действия, а именно — не пытаться присвоить ей новое значение.

По той же логике давайте добавлять суффиксы переменным.
Вопрос: зачем?
Ответ: чтобы не совершать над объектом недопустимые действия, а именно — пытаться вызвать несуществующие методы.

Но! Компилятор и так отловит попытку вызова несуществующих методов. Так что суффиксы в в типизированном языке не нужны.

Но! Возвращаемся к константам. Присвоить новое значение константе не даст компилятор. Получается и именование констант в верхнем регистре не нужно.

amesqit 02.03.2017 19:21

Не знаю как вы, а я часто использую в коде префиксы. Да для типизированных языков они не имеют смысла, но они увеличивают наглядность кода. В основном я их использую для приватных/локальных переменных "элементарных" типов: строки (strSome), числа (numSome), массивы/векторы (arrSome/vecSome), булевы флаги (isSome). Заглавные константы - это тоже удобство, конечно компилятор будет ругаться на попытку изменения, но зачем пытаться, если сразу видно, что это делать нельзя? По той же причине и имена классов начинаются с заглавной буквы, чтобы их было легко отличить от переменной, не прибегая к помощи подсказок IDE и поиску определения переменной в тексте класса.

Psycho Tiger 02.03.2017 19:35

Суффиксы сосут.

Примите за правду, что бОльшую часть времени Вы код читаете, а не пишете.
Константа = что-то, что можно инлайнить "головой" при чтении кода и это немного, но помогает.
Причём, пожалуйста, не путайте константу с КОНСТАНТОЙ. Первое – это то что не меняется в скоупе. В AS3 это недоступно, но ближайший приятель где это есть – это ES6.
Код:

const hello = 'world';
Оно может быть и будет разным. Второй же варианты КОНСТАНТЫ – это явный индикатор что он никогда не изменится. Скорее всего, он итак нечто очень явное, например, количество струн в укулеле, но 4 это куда менее читабельно, чем UKULELE_STRINGS_COUNT. Ещё это может быть нечто менее явное – например, количество блоков в странице памяти – всех их объеденяет одно – скорее всего это был magic number, который стал чем-то читабельным.

Но почему суффиксы сосут? Спасибо что спросили!
Если зайти со стороны строго-типизированных компилируемых языков, то они просто не нужны. IDE сама подскажет какой тип, компилятор сам выведет тип и подскажет, если где-то есть нестыковка.
Если зайти со стороны интерпретируемых языков (мы не знаем какой тип у переменной до рантайма!) – то... то это взять что-то, что не подразумевает жесткой типизации и пытаться наложить на него типизацию через именование переменных. Если кто-так делает, то кому-то нужно взять другой язык/инструмент – текущий просто не удовлетворяет чьим-то критериям.

Wolsh 02.03.2017 19:45

callme, пока Вы меряете мир булей "разрешит/не разрешит компилятор", сотни разных вещей не будут иметь никакого смысла. Может Вам слегка раздвинуть щелочку? Пока для Вас понятия "постоянная" и "не дадут изменить" тождественны, я не вижу возможности что-то объяснить. Для меня Event.ENTER_FRAME и event.target понятия совершенно разного смысла уже где-то на интуитивном уровне; при этом в моей голове даже не возникает мысли — а дай-ка я напишу Event.ENTER_FRAME = "timerTick"; Для меня ключевым является то, что эта фигня написанная большими буквами будет гарантированно одной и той же фигней ВСЕГДА и везде. А вот кто такой будет target — это как раз бабушка надвое вилами на воде писала.

callme 02.03.2017 20:51

Цитата:

Сообщение от Psycho Tiger (Сообщение 1199467)
Примите за правду, что бОльшую часть времени Вы код читаете, а не пишете.

С чего вы решили, что я думаю иначе. Слово "читабельность" присутствует еще в моем первом посте. Я помешан на читабельности. Именно поэтому вообще появилась эта тема.


Цитата:

Сообщение от Psycho Tiger (Сообщение 1199467)
Причём, пожалуйста, не путайте константу с КОНСТАНТОЙ.

Я и не путаю. Тема вообще не про это.


Цитата:

Сообщение от Psycho Tiger (Сообщение 1199467)
Второй же варианты КОНСТАНТЫ – это явный индикатор что он никогда не изменится. Скорее всего, он итак нечто очень явное, например, количество струн в укулеле, но 4 это куда менее читабельно, чем UKULELE_STRINGS_COUNT. Ещё это может быть нечто менее явное – например, количество блоков в странице памяти – всех их объеденяет одно – скорее всего это был magic number, который стал чем-то читабельным.

Никто и не спорит, что UKULELE_STRINGS_COUNT читабельнее чем 4.


Цитата:

Сообщение от Psycho Tiger (Сообщение 1199467)
Но почему суффиксы сосут? Спасибо что спросили!
Если зайти со стороны строго-типизированных компилируемых языков, то они просто не нужны. IDE сама подскажет какой тип, компилятор сам выведет тип и подскажет, если где-то есть нестыковка.

Так ведь и константы нам может ИДЕ подсказывать, например цветом помечать. О чем я уже писал.


Цитата:

Сообщение от Psycho Tiger (Сообщение 1199467)
Если зайти со стороны интерпретируемых языков (мы не знаем какой тип у переменной до рантайма!) – то... то это взять что-то, что не подразумевает жесткой типизации и пытаться наложить на него типизацию через именование переменных. Если кто-так делает, то кому-то нужно взять другой язык/инструмент – текущий просто не удовлетворяет чьим-то критериям.

Ну это вобще оффтоп, никакого отношения к теме.


Wolsh
Я же не спорю, что удобно знать, что перед нами константа. Но точно так же удобны и суффиксы.

Nooob 02.03.2017 22:33

Доводы и придирки вполне верны и понятны, вот мое толкование:
Заглавными буквами обозначают не константные переменные, а так называемый тип enum в других языках, так как в AS3 нету enum то их принято таким образом обозначать. а enum это частный случай использования константных переменных, константы на стеке или в полях например обозначаются маленькими. Это пошло из Си когда там есть enum но все же отсутствуют перечисления для строк и приходится комбинировать в коде enum и static const с заглавными буквами, но например в C# не принято обозначать их особым образом так как они есть в языке изначально.

Суффикс не следует указывать, так как в языке есть обозначение типа, в тоже время принято например переменные с поведением очереди или стека на основе базового типа Vector указывать явно commandQueue:Vector.<Command>, commandStack:Vector.<Command> так как в языке отсутствуют generics и тип один, а поведение разное
Цитата:

Сообщение от callme (Сообщение 1199449)
А если это не array а пул? Писать pullOfOranges?

Все верно, только нужно именовать лаконично orangePull:Array от общего к частному одуванчикПолевойЛекарственный, а не pullOfOranges растущийНаПолеОдуванчикДляЛекарств
В целом необходимо придерживаться правила что нужно всегда конкретизировать те моменты которые отсутствуют в языке (и контекст определения отсутствует в визуальной области видимости использования), тоже самое касается именования переменных обобщенных типов */Object, методов в непредсказуемых местах и многого другого, аргументы и доводы можно прочитать в Clean Code by Robert C. Martin (но в контексте AS3 нужно так же относиться критически)

если кидаться в крайности никто в здравом уме не станет именовать переменную applesPublicStaticVarInt, хотя я встречал людей которые именуют private переменные как _apples, static изменяемые переменные как $apples, что я не одобряю, ругаю, но иногда мирюсь с этим

KBAC 02.03.2017 22:41

Код может читать не только его автор. Вот тогда единая схема именования реально решает.


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

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