Сейчас 23:03:19 Суббота, 30 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Статья] Заметки начинающего JASP'ера
Ty3uKДата: Понедельник, 18 Июня 2012, 14:07:07 | Сообщение # 1
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Всем добра! :) Сегодня я хочу поговорить с заинтересованными людьми о моем небольшом препроцессоре под названием JASP. Многие уже слышали про него, ведь я очень назойливый человек и уже не единожды приседал на мозг кому только можно... :-D В сегодняшней статье (точнее, в небольшом "опусе") я хочу рассказать что же можно делать с помощью JASP, как можно упростить себе работу по написанию кода и просто пополоскать вам мозги ;) Итак, приступим!

Думаю, что многие уже читали оффициальный мануал жаспа от вашего покорного слуги. В нем я сухо и по факту описал возможности парсера, но привел мало примеров. Что ж, время исправлять ошибки прошлого :-D Начнем, как и в мануале, с объявления новых переменных. Но тут, увы, сильно не разгуляешься. Все как в мануале:

Code
new timer t -> local timer t = CreateTimer()
//===============================================  
new force f, hashtable hash;
  ->
local force f = CreateForce()
local hashtable hash = InitHashtable()


Сразу же оговорю создание глобальных переменных:

Code
new global timer t
  ->  
globals
  timer t = CreateTimer()
endglobals
//================================================   
new global force f, hashtable hash
  ->
globals
  force f = CreateForce()
  hashtable hash = InitHashtable()
endglobals


Т.е. вы не может объявлять на одной строке глобальные и локальные переменные. Да это и не нужно думаю. Далее идет уничтожение переменных. Помимо стандартного

Code
new timer t;
free t;
  ->
local timer t = CreateTimer()
call DestroyTimer(t)


так же можно юзать чуть более сложные конструкции. Например,

Code
free GetExpiredTimer() -> call DestroyTimer(GetExpiredTimer())
free LoadUnitHandle(hash, hid, 0) -> call RemoveUnit(LoadUnitHandle(hash, hid, 0))


Ну и конечно же множественное уничтожение, куда без него

Code
new timer t, group g;
free t, g;


Но без нескольких аргументов в виде функций. Увы. Пока.

Обнуление переменных. Никаких финтов делать не позволяет, кроме как перечислить несколько обнуляемых переменных:

Code
flush t, g, f, h
  ->
set t = null
set g = null
set f = null
set h = null


Следом идет цикл repeat-until, который я без зазрения совести стащил из делфи. Он является менее громоздкой альтернативой

Code
do {
} while (!cond)


пример приводить не буду, ибо это будет копипастом с моего же мануала. Смысл?

Как говорится- все вкусное на последок. Динамическая типизация... Парсер сам определит тип вашей переменной, если вы его не указали, но задали ей значение в пределах данной функции. Например

Code
var t = CreateTimer() -> local timer t = CreateTimer()
//================================================   
var t;
if (cond)
{
  t = CreateTimer()
}
  ->
local timer t
if (cond)
{
  t = CreateTimer()
}


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

Code
var s = "Hello";
var temp = s;


РАБОТАТЬ НЕ БУДЕТ. Пока.

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

Code
var s = "Hello", i = 0, r = .15;
//НО НЕ ТАК
var s = "Hello", i = LoadInteger(hash, hid, 0), r = .15;
//БУДЕТ БЕЛИБЕРДА. ПОКА.



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


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Вторник, 19 Июня 2012, 09:34:54 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ty3uK)
Он является менее громоздкой альтернативой
Господи, три символа.

Ничего нового не узнал. :)


 

Ty3uKДата: Вторник, 19 Июня 2012, 09:44:29 | Сообщение # 3
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Quote (SirNikolas)
Господи, три символа.
зато более читабельно
И свернуть можно
Quote (SirNikolas)
Ничего нового не узнал
А как же
Code
free LoadUnitHandle(hash, hid, 0)

Я сам только недавно узнал trollface


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Вторник, 19 Июня 2012, 10:28:00 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ty3uK)
free LoadUnitHandle(hash, hid, 0)
Ты это юзал раньше в каком-то спелле.
Quote (Ty3uK)
И свернуть можно
do { ... } whilenot тоже сворачивается.


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz