  | 
 | 
  | 
 
 | 
 
 
 
		
		
		
	
		
		
	
		
		
			| 
				
				[JASS] Урок 2. Потоки, синхронность, структура триггера
				 |  
				
			  |  
| Duosora | Дата: Среда, 27 Марта 2013, 22:09:36 | Сообщение # 1 |  
| 
 The cats never sleep... 
Группа: Ветераны 
Сообщений: 6734 
Награды:  10 
Репутация:  2161 
Блокировки:    
 
 | Есть два способа создания дизайна программы. Один из них, это сделать его настолько простым, что в нем, очевидно, не будет недостатков. Другой способ — сделать его настолько запутанным, что в нем не будет очевидных недостатков.   — Чарльз Энтони Ричард Хоар  
   Рад вас видеть снова на втором уроке по языку JASS!   На прошлом уроке мы разобрались, что такое JASS и где его писать. Сегодня я познакомлю вас с более интересными аспектами языка JASS. 
   Начну урок с объяснения вам того, что такое поток. В бытовом смысле поток - течение, например, воды из крана. Наблюдали, как течёт вода? Точно так же передаются данные по такому же "потоку", только не водному, а информационному. В одном потоке все действия, которые вы хотите совершить, выполняются не параллельно, а друг за другом. Стоит заметить, что в WarCraft 3 настоящий поток только один. На будущее прошу запомнить: таймеры и события используют псведопотоки (кажется, что это настоящие потоки, но это не так). С таймерами мы более подробно познакомимся позднее, а вот события сегодня вам ещё встретятся. 
   Сталкивались ли вы с понятием "синхронизация"? Думаю, многие знают, что это такое. Противоположное ему понятие "десинхронизация" мы с вами разберём позднее, оно требует кое-каких знаний кода. А вот что такое синхронный и асинхронный код, я расскажу сейчас и покажу на примере, как он реализуется.   Потоки имеют нехорошее свойство перегружаться и заставлять игру зависать. Использование асинхронного кода позволяет движку отвечать на запросы во время выполнения длительных операций в вашей карте. Поэтому предпочтительнее использовать именно такой код. Дело в том, что если использовать синхронный код, тогда при перегрузке потока запущенный WarCraft 3 не будет отвечать ни на какие запросы и попросту зависнет. А в асинхронном коде всё будет так, как будто никакой перегрузки и не было! Красота, которой в GUI добиться крайне сложно без костылей. 
   Поговорив о потоках и синхронности кода, я спокойно начинаю описывать вам структуру триггера. Ранее я уже говорил, что JASS - язык событийно-ориентированный. Это значит, что действия выполняются в ответ на какое-нибудь событие, если оно удовлетворяет условиям (в случае наличия таковых). Отсюда выводим типовую структуру кода любого триггера: Событие -> Условие -> Действия.   Всё, достаточно теории. Переходим к практике. 
   Создайте новый триггер. Сконвертируйте его в код. Как это делать, я писал в уроке 1.   Что вы видите? Пока что непонятную, совершенно неструктурированную кашу букв. Будем разбираться. Для начала усвойте простое правило: русскоязычное название триггера для нас криминал, потому что, если, например, триггер называется "Безымянный триггер 001", то его название будет интерпретировано конвертером кода, как "______________________________________001". Зачем вам этот геморой? Поэтому считайте, что я лично вам запретил называть триггеры на русском языке. Ваш триггер всё ещё с русскоязычным названием? Тогда мы идем к Вам!   Я назвал триггер HelloWorld. У меня получилось вот это:   Код function Trig_HelloWorld_Actions takes nothing returns nothing   endfunction 
   //===========================================================================   function InitTrig_HelloWorld takes nothing returns nothing       set gg_trg_HelloWorld = CreateTrigger(  )       call TriggerAddAction( gg_trg_HelloWorld, function Trig_HelloWorld_Actions )   endfunction   
   Сначала давайте подумаем, что мы видим знакомого. Да! Нам встречается имя нашего триггера, причём несколько раз. Trig_HelloWorld_Actions, InitTrig_HelloWorld, gg_trg_HelloWorld. Первые два элемента, куда входит знакомое нам название - функции, выполняющие наши действия. Последний - это глобальная переменная, в которой хранится наш триггер. Подчеркну, что функция, имя которой начинается с InitTrig_, обязательна для любого триггера - там как раз и задаётся, где будут события, где условия, а где - действия.   Вкратце (пока что вкратце!) объясню: переменная - это ячейка памяти. Она как коробка: может в себе что-то содержать, а может просто быть пустой. В нашем конкретном случае переменная не пустая.   Мы начнём наше знакомство с программированием на JASS классическим для всех программистов путём: выведем на экран слова "Hello, World!".   Удалите созданный вами триггер, создайте новый с таким же именем и поставьте ему в события "Время - Прошло 0.00 секунд с начала игры". Теперь сконвертируем наш триггер. Появилась новая непонятная для нас пока строка: это событие. Поднимаемся до функции Trig_HelloWorld_Actions, ставим пустую строчку перед endfunction. В ней прописываем то, что выведет наше сообщение: call BJDebugMsg("Hello, World!"). Если всё сделано правильно, то при запуске карты появится надпись: Hello, World! 
   Всем спасибо, на третьем уроке мы изучим, что такое функции и как они работают. 
   Домашнее задание:- Создайте новую карту размером 32х32, изначально на мелководье. 
   - Откройте Редактор триггеров, удалите оттуда все триггеры. 
   - Создайте папку "Домашние задания" в Редакторе триггеров. 
   - Создайте триггер "Lesson2" в папке "Домашние задания". 
   - Выведите текст "Домашнее задание второго урока" спустя 3 секунды после начала игры. 
   - Сохраните карту и пришлите мне в ЛС.
   
   Вопросы по теории:- Если проводить аналогию программирования с пахотным делом, что является "жнецом" кода? 
   - Как написать текст с двойными кавычками в строке в JASS? 
   - Проводя аналогию потока с текущей водой, как объяснить на языке программиста внезапную заморозку воды? 
   - Проводя аналогию потока с текущей водой, что означает открытие и закрытие крана? 
   - Если бы условия и действия поженились и переехали жить к условиям, код был бы асинхронный или синхронный? 
   - Как правильно: Jass, JASS, Jass2, J или JASS2, когда речь идёт о языке скриптинга на WarCraft? 
   - Можно ли называть триггеры по-корейски?
   
   Ответы также присылайте мне в ЛС. Тот, кто ответит на все вопросы, получает 5+ по начальной теории Jass и от меня и Тузика получает жирный плюс в репутацию.
  
Не зли других и сам не злись.   Мы - гости в этом мире.   И если что не так - смирись,   Будь поумнее - улыбнись,   Ведь в мире всё закономерно.   Зло, излучённое тобой,   К тебе вернётся непременно. 
 |  
|   | 
 |   
  |  
| Ramazan(off) | Дата: Среда, 27 Марта 2013, 22:59:36 | Сообщение # 2 |  
| 
 11 уровень 
Группа: Проверенные 
Сообщений: 1670 
Награды:  1 
Репутация:  775 
Блокировки:    
 
 | Я понял и знал это, но могу понять ещё кое-что.   Новички опустят руки после таких заумностей.
 |  
|   | 
 |   
  |  
| vladhellgate | Дата: Среда, 27 Марта 2013, 23:06:15 | Сообщение # 3 |  
 
7 уровень
 
Группа: Проверенные 
Сообщений: 255 
Награды:  0 
Репутация:  33 
Блокировки:    
 
 | сказали же в лс... меня переполняют чувства...
 |  
|   | 
 |   
  |  
| anree | Дата: Среда, 27 Марта 2013, 23:13:46 | Сообщение # 4 |  
3 уровень
 
Группа: Проверенные 
Сообщений: 43 
Награды:  0 
Репутация:  26 
Блокировки:    
 
 | Цитата (Duosora) Выведите текст "Домашнее задание второго урока" спустя 3 секунды после начала игры.      на всякий случай спрошу:сделать триггерно Text Message или просто коментарий к триггеру?
  
 |  
|   | 
 |   
  |  
| Ty3uK | Дата: Четверг, 28 Марта 2013, 00:32:56 | Сообщение # 5 |  
 
Группа: Ветераны 
Сообщений: 6125 
Награды:  2 
Репутация:  1617 
Блокировки:    
 
 | У Лавсона ошибка есть, не ссыте.
  
 |  
|   | 
 |   
  |  
| goldplay99 | Дата: Четверг, 28 Марта 2013, 00:33:29 | Сообщение # 6 |  
 
1 уровень
 
Группа: Пользователи 
Сообщений: 13 
Награды:  0 
Репутация:  0 
Блокировки:    
 
 | Или переменная-триггер
  
Я знаю *ВСЕ*, но *ВСЕ* - ничегошеньки незнает обо мне. 
 |  
|   | 
 |   
  |  
| lawson | Дата: Четверг, 28 Марта 2013, 00:38:55 | Сообщение # 7 |  
| 
 Группа: Проверенные 
Сообщений: 3482 
Награды:  0 
Репутация:  974 
Блокировки:    
 
 | Ty3uK, пфф, пропали мои +10
  
Nic nie wiem bo mam chuj.   редактирую посты! ВСЕ! 
 |  
|   | 
 |   
  |  
| Ty3uK | Дата: Четверг, 28 Марта 2013, 00:56:02 | Сообщение # 8 |  
 
Группа: Ветераны 
Сообщений: 6125 
Награды:  2 
Репутация:  1617 
Блокировки:    
 
 | Да я тебе экстерном могу за знания дать     И за то, что ты няшка  
  
 |  
|   | 
 |   
  |  
| Kakolookia | Дата: Четверг, 28 Марта 2013, 07:21:24 | Сообщение # 9 |  
6 уровень
 
Группа: Проверенные 
Сообщений: 220 
Награды:  0 
Репутация:  93 
Блокировки:    
 
 | А почему именно на мелководье? Это понадобится в следующих уроках?
 |  
|   | 
 |   
  |  
| lawson | Дата: Четверг, 28 Марта 2013, 11:36:49 | Сообщение # 10 |  
| 
 Группа: Проверенные 
Сообщений: 3482 
Награды:  0 
Репутация:  974 
Блокировки:    
 
 | Ty3uK,  
  
Nic nie wiem bo mam chuj.   редактирую посты! ВСЕ! 
 |  
|   | 
 |   
  |  
| SirNikolas | Дата: Четверг, 28 Марта 2013, 12:01:14 | Сообщение # 11 |  
 
Группа: Модераторы 
Сообщений: 6729 
Награды:  1 
Репутация:  1867 
Блокировки:    
 
 | Асинхронный код на втором уроке?  
  
 |  
|   | 
 |   
  |  
| lawson | Дата: Четверг, 28 Марта 2013, 12:02:15 | Сообщение # 12 |  
| 
 Группа: Проверенные 
Сообщений: 3482 
Награды:  0 
Репутация:  974 
Блокировки:    
 
 | Цитата (SirNikolas) Асинхронный код на втором уроке?     шмуос молодец, может хоть это отпугнет будущих картостроителей от этой затеи.
  
Nic nie wiem bo mam chuj.   редактирую посты! ВСЕ! 
 |  
|   | 
 |   
  |  
| Imba_pvL | Дата: Четверг, 28 Марта 2013, 12:12:32 | Сообщение # 13 |  
10 уровень
 
Группа: Проверенные 
Сообщений: 3151 
Награды:  1 
Репутация:  1260 
Блокировки:    
 
 | у меня все получилось, Дуосон принимай)
  
 |  
|   | 
 |   
  |  
| Ty3uK | Дата: Четверг, 28 Марта 2013, 12:55:01 | Сообщение # 14 |  
 
Группа: Ветераны 
Сообщений: 6125 
Награды:  2 
Репутация:  1617 
Блокировки:    
 
 | Да тут об ассинхронном коде крохи инфы.
  
 |  
|   | 
 |   
  |  
| Duosora | Дата: Четверг, 28 Марта 2013, 17:47:07 | Сообщение # 15 |  
| 
 The cats never sleep... 
Группа: Ветераны 
Сообщений: 6734 
Награды:  10 
Репутация:  2161 
Блокировки:    
 
 | Цитата (Kakolookia) А почему именно на мелководье? Это понадобится в следующих уроках?     Абсолютно верно. Там будут примеры гораздо разнообразнее.   Цитата (SirNikolas) Асинхронный код на втором уроке?     С другой стороны, почему бы обзорно не ознакомить?   Цитата (anree) на всякий случай спрошу:сделать триггерно Text Message или просто коментарий к триггеру?      Всё в уроке ведь написано. Никаких действий в триггере, только руками и кодом.
  
Не зли других и сам не злись.   Мы - гости в этом мире.   И если что не так - смирись,   Будь поумнее - улыбнись,   Ведь в мире всё закономерно.   Зло, излучённое тобой,   К тебе вернётся непременно. 
 |  
|   | 
 |   
  |  
| Imba_pvL | Дата: Четверг, 28 Марта 2013, 18:34:47 | Сообщение # 16 |  
10 уровень
 
Группа: Проверенные 
Сообщений: 3151 
Награды:  1 
Репутация:  1260 
Блокировки:    
 
 | Duosora, Тебе ответы на вопросы пришли???   Цитата (Fredbob) как часто будут выходить уроки?     для вопросов есть другая тему
  
 |  
|   | 
 |   
  |  
| anree | Дата: Пятница, 29 Марта 2013, 02:40:40 | Сообщение # 17 |  
3 уровень
 
Группа: Проверенные 
Сообщений: 43 
Награды:  0 
Репутация:  26 
Блокировки:    
 
 | Цитата (Duosora) Всё в уроке ведь написано. Никаких действий в триггере, только руками и кодом.      А, понял. Мне даже стыдно.
  
 |  
|   | 
 |   
  |  
| Imba_pvL | Дата: Пятница, 29 Марта 2013, 13:00:26 | Сообщение # 18 |  
10 уровень
 
Группа: Проверенные 
Сообщений: 3151 
Награды:  1 
Репутация:  1260 
Блокировки:    
 
 | так пришли или нет?
  
 |  
|   | 
 |   
  |  
| Duosora | Дата: Пятница, 29 Марта 2013, 14:13:27 | Сообщение # 19 |  
| 
 The cats never sleep... 
Группа: Ветераны 
Сообщений: 6734 
Награды:  10 
Репутация:  2161 
Блокировки:    
 
 | Цитата (Imba_pvL) Тебе ответы на вопросы пришли???      Да, прочёл)   Ждите в субботу-воскресенье урок о функциях.
  
Не зли других и сам не злись.   Мы - гости в этом мире.   И если что не так - смирись,   Будь поумнее - улыбнись,   Ведь в мире всё закономерно.   Зло, излучённое тобой,   К тебе вернётся непременно. 
 |  
|   | 
 |   
  |  
| Imba_pvL | Дата: Пятница, 29 Марта 2013, 14:14:40 | Сообщение # 20 |  
10 уровень
 
Группа: Проверенные 
Сообщений: 3151 
Награды:  1 
Репутация:  1260 
Блокировки:    
 
 | А можно узнать результаты?)   того и того
  
 |  
|   | 
 |   
  |  
| Fredbob | Дата: Суббота, 30 Марта 2013, 05:55:10 | Сообщение # 21 |  
1 уровень
 
Группа: Пользователи 
Сообщений: 14 
Награды:  0 
Репутация:  0 
Блокировки:    
 
 | Duosora, я конечно не вправе критиковать но если уж показываешь код то объясняй что к чему как что работает и для чего это(прости за прямой текст)
 |  
|   | 
 |   
  |  
| Duosora | Дата: Суббота, 30 Марта 2013, 13:26:00 | Сообщение # 22 |  
| 
 The cats never sleep... 
Группа: Ветераны 
Сообщений: 6734 
Награды:  10 
Репутация:  2161 
Блокировки:    
 
 | Цитата (Fredbob)  я конечно не вправе критиковать но если уж показываешь код то объясняй что к чему как что работает и для чего это(прости за прямой текст     Откровенность за откровенность: если я сейчас начну объяснять, как и что работает в этом коде, то всё объяснение не поместится в один пост.
  
Не зли других и сам не злись.   Мы - гости в этом мире.   И если что не так - смирись,   Будь поумнее - улыбнись,   Ведь в мире всё закономерно.   Зло, излучённое тобой,   К тебе вернётся непременно. 
 |  
|   | 
 |   
  |  
| Fredbob | Дата: Суббота, 30 Марта 2013, 14:25:05 | Сообщение # 23 |  
1 уровень
 
Группа: Пользователи 
Сообщений: 14 
Награды:  0 
Репутация:  0 
Блокировки:    
 
 | Duosora, я же не говорю прям все подробно просто общее понятие доступным и простым языком
 |  
|   | 
 |   
  |  
| Zikkrat | Дата: Суббота, 30 Марта 2013, 15:01:47 | Сообщение # 24 |  
1 уровень
 
Группа: Пользователи 
Сообщений: 2 
Награды:  0 
Репутация:  0 
Блокировки:    
 
 | Fredbob,   Цитата (duos) Иди в гугл, не мозоль глаза.  Добавлено (30 Марта 2013, 15:01:47) --------------------------------------------- Imba_pvL, Он их сам не знает. 
 |  
|   | 
 |   
  |  
| Imba_pvL | Дата: Суббота, 30 Марта 2013, 15:12:42 | Сообщение # 25 |  
10 уровень
 
Группа: Проверенные 
Сообщений: 3151 
Награды:  1 
Репутация:  1260 
Блокировки:    
 
 | Цитата (Zikkrat)  Он их сам не знает.     ???   Дуосон, давай к след.уроку))Добавлено (30 Марта 2013, 15:12:42) --------------------------------------------- но сначала скажи результаты 
  
 |  
|   | 
 |   
  |     
		
		 | 
 | 
 
  | 
 | 
  | 
 
 
 | 
 
 
 |