XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Xoniks

offline
Опыт: 1,858
Активность:
Зачем пишут константы?
просмотрев некоторые заклинания заметил что создают триггер и пишут там
        private constant boolean USE_HASH_TABLE      = true
        private constant boolean USE_FLEXIBLE_OFFSET = false

        private constant integer OFFSET     = 0x100000
        private constant integer ARRAY_SIZE = 8190
etc... для чего ??
Старый 27.03.2012, 18:54
Doc

offline
Опыт: 63,163
Активность:
Больше для понту.
А так вообще это типа настройки.
Старый 27.03.2012, 19:00
alpha

offline
Опыт: 7,387
Активность:
для удобного управления кодом, в основном
  private constant boolean USE_HASH_TABLE      = true
Тут, к примеру, "Использовать хэштеэбл = да", поставив значение "нет" в алгоритме она использована не будет, если это сделано не просто как комментарий мол в системе используется хеш-таблица
        private constant integer OFFSET     = 0x100000
        private constant integer ARRAY_SIZE = 8190
Это сокращения для читабельности, скорее всего
Всё это можно заменить дефайнами для простоты
Старый 27.03.2012, 19:02
ScorpioT1000
Работаем
offline
Опыт: отключен
Doc ничего не понимает в кодинге, так вот объясняю:
оптимизатор подставляет их в места использования, тем самым ускоряя работу кода, кроме того, основная их задача - запретить пользователю изменять их, чтобы не вызвать человеческих ошибок, т.е. это политика проектирования (причем одна из самых старинных)
есть еще константные функции (в жассе они унылы) - сделаны для того, чтобы явно дать знать, что функция ничего не изменяет снаружи (или метод - не меняет свой класс)
кроме того, константные функции могут вызывать только другие константные функции, тем самым поддерживается политика чтение / запись
и, опять же, оптимизатор может вложить тело константных функций в места их вызова (читать inline), тем самым в разы ускоряя работу кода засчет небольшого его увеличения
ну, это для справки)
ScorpioT1000 добавил:
Всё это можно заменить дефайнами для простоты
можно, если нету адекватного оптимизатора (я например раньше не полагался на JassHelper, но сейчас он хорошо делает свое дело)
дифайны теряют типобезопасность, т.е. не сразу ясно, какого типа был дифайн (особенно если там юзертип или "класс") и с этим возможны косяки (особенно в реалтайме, когда париться придется несколько часов), ведь код забывается со временем
Старый 27.03.2012, 19:19
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, все это не относится к жассу, успокойся. Особенно политика проектирования.
Так вот, мое сообщение:
Больше для понту.
Подразумевало, что это может ускорить работу кода(чем если ипользовать неконстанты), но настолько незначительно, что это просто не влияет.
И поверь, я об этом знаю не меньше тебя.
Старый 27.03.2012, 19:19
ScorpioT1000
Работаем
offline
Опыт: отключен
Потом изза таких как ты приходят люди на работу и пишут говно с говном, потому что у них всё "для понту".
ScorpioT1000 добавил:
Кстати в жаве ни о какой константной политике и речи не идёт =) максимум get/set и final (который вообще не для того предназначен изначально)
Старый 27.03.2012, 19:25
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, читай собственную подпись, там отлично объяснено почему в джаве нет констант как таковых.
Старый 27.03.2012, 19:44
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, читай что я написал выше про константные методы.
Старый 27.03.2012, 19:49
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, в основу джавы заложены другие принципы, исключающие ручную низкоуровневую оптимизацию кода. Оптимизация байткода в джаве происходит автоматически, на уровне виртуальной машины.
Старый 28.03.2012, 00:04
Doc

offline
Опыт: 63,163
Активность:
Стоит разделять различные принципы написания в различных языках, а не гнать все под одну сидваплюсгребенку. В жассе ни о какой низкоуровневой оптимизации и тем более проектной политике речи идти не может, т.к. во-первых, язык абсолютно скриптовый и тормозной сам по себе, во-вторых, не существует серьезных проектов на нем, в-третьих, не существует серьезных IDE, в которых может быть применена эта проектная политика, а в четвертых, ты и сам все это и понимаешь и непонятно почему упираешься рогом в сраный жасс.
Плюсы - самый лучший язык. После асм =) и речь ещё как идёт, я же не виноват, что это у тебя ничего "не идёт" © Sc
Это уже твое субъективное мнение :) Все-таки ни одного серьезного продолжительного проекта вк3 не видел, где было-бы больше одного жасс-программиста и где всерьез нужна была-бы политика проектирования.
Да, я такой субъективный, такой изменчивый. Я тебе назвал масс причин юзания констант, которые уже применяются сейчас в самых крупных проектах, а ты насрал какого-то сомнительного говна и защищаешь его © Sc

Отредактировано ScorpioT1000, 29.03.2012 в 13:24.
Старый 28.03.2012, 00:43
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
ScorpioT1000:
Потом изза таких как ты приходят люди на работу и пишут говно с говном, потому что у них всё "для понту".
Хорошо звучит.
Doc:
проектной политике речи идти не может
Проектирование оно и в Африке проектирование. Оно применима для всех языков, как это бы странно не звучало
Старый 28.03.2012, 09:10
DioD

offline
Опыт: 45,134
Активность:
в ванильном джасе - настройки + понт
в надстройках - инлайн методы, читай совершенно копеечная оптимизация которая нужна только задротам, там экономия пару тиков.

в нормальных языках это имеет более "глубокий смысл" однако если код разрабатывает один человек - опять таки или понт или настройки.
Старый 29.03.2012, 10:09
ScorpioT1000
Работаем
offline
Опыт: отключен
Они нужны чтобы при надобности превратить в переменные.
Старый 29.03.2012, 10:28
Uncolo

offline
Опыт: 580
Активность:
Xoniks, к примеру у тебя такой код:

Код:
real x = 10.
real y = 10.

constant defaultXY = 10.


где нибудь ты меняешь значение Х и У к примеру на 100. , а тебе нужно вернуть начальное значение - 10. , то можно присовить константу defaultXY к X и Y, чтобы не перебирать весь код и вручную менять к примеру со 100 на 200.

самый простой пример и далеко не единственный
Старый 29.03.2012, 11:04
adic3x

offline
Опыт: 108,439
Активность:
Кстати, Векс использует логические константы при его условной компиляции (static if), это так, к слову.
и, опять же, оптимизатор может вложить тело константных функций в места их вызова (читать inline), тем самым в разы ускоряя работу кода засчет небольшого его увеличения
Насколько я помню, JassHelper пытается делать это со всеми, и константностью при этом не руководствуется.
Макроопределения же (define) не должны по идее использоваться как inline функции, и вообще, это штука взрывоопасная, позволяющая стрелять себе не только в ноги.
Всё это можно заменить дефайнами для простоты
Опасно на самом деле. Лучше как раз использовать константы (значения которых оптимизатор подставит в код).
Старый 29.03.2012, 23:09
alpha

offline
Опыт: 7,387
Активность:
ADOLF, опасно-опасно.. А чем?
Старый 30.03.2012, 01:30
ScorpioT1000
Работаем
offline
Опыт: отключен
сложные конструкции может и не распарсить + щитай внутри них некоторые дифайны то не пашут ) это вам не C препроц
Старый 30.03.2012, 04:20
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:12.