eunikitin
offline
Опыт:
715Активность: |
Длинные имена идентификаторов и их замена
Привет комрады! Пишу на Jass (с использованием vJass и cJass) достаточно недолго. Написал пару библиотек для карты, и поскольку я в основное время пишу код для каких нибудь громоздких enterprise приложений, которые разрабатываются большим количеством людей, я привык давать идентификаторам длинные и информативные имена. Сейчас такая практика себя хорошо зарекомендовала, так как позволяет быстро разобраться в чужом, да и своем коде, вот только беда в том, что:
Я хочу поделиться способом, который может частично решить эти проблемы. Его я придумал недавно (возможно не первый и не последний), и еще не успел прощупать всех его плюсов и минусов. Он основан на использовании текстовым макросов, так что для него необходим vJass. Идея такая: мы оборачиваем какой-либо кусок кода, чаще всего содержание всего файла текстовым макросом, аргументами которого будут наши заменяемые значения, используем их в коде, а затем сразу после описания макроса вызываем его, передавая реальные имена переменных в качестве значений аргументов.
Пример:
((код jass
Filename - SampleFile.j
! textmacro SampleFileUsing takes Controller, Model, View
scope SampleScope { private $Controller$ controller; private $Model$ model; private $View$ view; } scope OtherSampleScope {
private $Model$ model; private $View$ view; } ! endtextmacro ! runtextmacro SampleFileUsing("SomeSampleLib_Controller", "SomeSampleLib_Model", "SomeSampleLib_View"); )) Внимание вопрос знатокам: Возможно у вас есть более оптимальные пути решения? Отредактировано eunikitin, 10.03.2015 в 07:05. |
10.03.2015, 06:37 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
define |
10.03.2015, 11:29 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
#define
#include Старая версия манула, но думаю там есть база. Я еще много чего писал в комментариях и на вики:
http://cjass.xgm.guru/manual-ru
http://cjass.xgm.guru/feedback.php https://code.google.com/p/cjass/w/list ADOLF добавил:
Если я правильно понял суть проблемы, вы используете префикс public в библиотеках. Мое мнение - он не нужен. То, что private - пусть будет private, а объекты без ограничения области видимости могут использоваться как есть, без префикса. |
10.03.2015, 11:51 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
eunikitin
offline
Опыт:
715Активность: |
DioD, Cпасибо! TESH про него не знает, а доки по cJass я нашел только 10 минут назад.
eunikitin добавил:
ADOLF, Спасибо за материалы, очень пригодятся! ADOLF:
Может я не совсем понял вас, но:
((код jass
library Lib {
struct StructOne {} public struct StructTwo {} } library OtherLib initializer Init {
void Init() { Без явного указания того, что структура публичная, у меня сыпется ошибка о несуществующем типе Lib_StructOne one = Lib_Test.create();
}
)) Или вы про другое?
P.S. Сейчас почитаю доки, возможно пойму что вы имели ввиду:) |
||||||||
10.03.2015, 12:16 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
поставьте сижассовый tesh - HORUS cjass.xgm.guru/files/?Horus-latest.zip
ScorpioT1000 добавил: И зря вы пишете длинные имена в варкрафте, скорость исполнения кода напрямую зависит от длины имени, а с кучей скоупов прайватов вам некоторой задержки не миновать (а ядро то одно всегда). |
10.03.2015, 13:06 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
eunikitin
offline
Опыт:
715Активность: |
ScorpioT1000, Спасибо! Кстати про длину имен - можно использовать обфускатор, если есть готовый, ну или написать самому. Когда карта идет в продакшн мы прогоняем код на обфускаторе, он заменяет имена на более короткие и мы не только не теряем, но и выигрываем в производительности.
сейчас поискал, xgm.guru/p/wc3/wc3mapopt-rus это вроде умеет Отредактировано eunikitin, 10.03.2015 в 15:31. |
10.03.2015, 14:09 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Вот скорость исполнения это явно последнее дело в данном случае, тем более, что в релизах можно пройтись и оптимизатором.
Он и есть. И умеет.
Эх, к сожалению я не могу советовать использовать его таки с чистой совестью - там есть некоторые баги. Нет, не критичные, просто при определенных ошибках в коде он может молча, по английски падать. Хотя, если знать, как его курить - то можно иметь очень неиллюзорный profit. Также, многие вещи из последних, достаточно вкусных нигде не описаны (будь то callback или цикл for для юнитов). В любом случае, если будут проблемы с cJass - пишите мне в личку, я их если не исправлю, то смогу подсказать, в чем дело и как это обойти.
Удачи в проекте.
ADOLF добавил: Кстати вот прикольная демка cJass. |
10.03.2015, 16:25 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|