flushlocals
также нет клоунского ограничения на объявление переменных в начале функции
Это не имеет никакого отношения в синтаксису.
В cJass есть whilenot, do - whilenot и препроцессорные штуки include, define и enum и прочие препроцессорные директивы, инкремент и декремент. У ZINC препроцессор такой же, как и у vJass, есть циклы for и while. Также отличается определение функций. На этом синтаксические отличия заканчиваются. В обоих одинаковые логические операторы, не нужно писать local, set и call, блоки определяются скобками. Тем самым бóльшая часть кода будет идентична с точки зрения подсветки и автодополнения.
И очень классно ты переделал вот это.
на самом деле cJass мало чем отличается от ZINC по синтаксису
В наши дни дефайны лишь стон изголодавшегося разума по вменяемо написанному коду.
"этим не пользуюсь я - это бесполезно всем"
Не надо утрировать. Текстовый препроцессинг откровенно устаревшая фича, которая заменяется адекватными гигиеническими макросами и строго определенной внутри основного языка семантикой метапрограммирования в целом.
Насчет отсутствия отличий с Zinc - бред, помимо упомянутых макросов есть вещи типа flushlocals и foreach по группам (через генерацию FirstInGroup), а также нет клоунского ограничения на объявление переменных в начале функции.
дефайны являются невероятно мощным инструментом для решения многих задач
Невероятно мощным инструментам полагается иметь свой синтаксис и семантику. Например, к месту упомянутые дженерики или аннотации. В наши дни дефайны лишь стон изголодавшегося разума по вменяемо написанному коду.
GetLocalPlayer, у дефайнов есть возможность определять области видимости, и корректное использованные дефайны являются невероятно мощным инструментом для решения многих задач, например, реализации дженериков.
В рамках констант особо ничем, окромя засорения пространства имен. Вce выше этого тянет за собой сложности отладки и непредсказуемое поведение кода. Простой пример:
nothing Test()
{
integer a = 2
integer b = 3
a = square(a++)
b = square(++b)
BJDebugMsg(I2S(a))
BJDebugMsg(I2S(b))
}
Что будет выведено на экран, если square, это функция и что, если это макрос? А в процессе работы, тебе известно что это функция или макрос? Будешь ли ты в состоянии держать в уме, что это макрос, если у тебя десятки тысяч строк кода? А когда ты будешь волосы на голове рвать, не понимая что происходит в больших системах с кучей взаимосвязей?
За большим количеством примеров можно обратится к гуглу.
Комментарии проекта За огненной стеной
Выбор редакции
JNGP: Rebuild от PT153
Сборка от PT153 оптимизирована для vJass и включает в себя обновления pjass.exe и TESH.
Отредактирован PT153
Отредактирован Doc
За большим количеством примеров можно обратится к гуглу.