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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: Bru  
Форум о Warcraft 3 » Раздел для картостроителей » Школа картостроения » [JASS] Урок 4. Переменные
[JASS] Урок 4. Переменные
DuosoraДата: Суббота, 13 Апреля 2013, 00:40:06 | Сообщение # 1
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
В теории, теория и практика неразделимы. На практике это не так.
Йогги Берра


Сегодня нам нужно разобрать очень важную тему: тему о переменных.

Переменная - обозначенная каким-либо образом ячейка памяти, в которой хранятся данные и к которой можно обратиться. Представьте себе переменную как открытую коробку: вы её видите, можете взять, положить в неё что-то и взять что-то оттуда.
В большинстве языков программирования переменные обозначаются именами, то есть у каждой переменной есть своё уникальное название. Зачастую при использовании переменных с одинаковым именем компилятор вернет ошибку, хотя исключения из этого правила тоже имеются.
Выделение определённого объёма памяти (либо его перераспределение) на хранение данных называется объявлением переменной.
В JASS переменные бывают локальные и глобальные. Глобальные переменные действуют по всему коду, а локальные - только в пределах функции, где они объявлены. Не приплетая сюда vJass и cJass, также скажу, что у глобальных переменных, созданных через WE, префикс udg_ перед названием. У названий переменных, генерируемых Редактором, также встречаются префиксы gg_trg_ (триггеры), gg_rct_ (области rect), а также gg_cam_ (камеры) и gg_unit_ (боевые единицы, войска).
Существуют суперглобальные неизменяемые переменные, которые чаще называют константами. Существуют и функции-константы. Если вы ещё не сталкивались с таким понятием, то константа - это постоянная, неизменяемая величина. Множество таких переменных можно увидеть, открыв common.j или blizzard.j
Средствами JASS (без vJass / cJass) можно в текстовом интерфейсе WE объявлять только локальные переменные. Глобальные же делаются Редактором переменных, который находится в Редакторе триггеров.
Преимущество написания триггеров в текстовом интерфейсе над написанием их в графическом в том числе и в том, что с локальными переменными можно работать напрямую, без посредничества глобальных.
Пролистав теорию переменных, разбив их на типы, можно сказать и о синтаксисе объявления переменных в JASS. Начнём с локальных. Локальные переменные объявляются до вызова любого действия функции, даже назначения другой переменной (оператор set). Объявлять их нужно так:

local тип [array] имя

В квадратных скобках указан параметр, который писать не обязательно. Он отвечает за то, будет ли переменная массивом или нет. Массивы в JASS могут содержать до 8192 ячеек (индексы от 0 до 8191, всего 8192). В JASS массивы динамические (расширяются по мере необходимости, а их крайние границы - 0 и 8191).

Переменным (если это, конечно, не массивы) можно задавать значение сразу при их объявлении. Делается это так:

local тип имя = значение

По мере выполнения функции можно присваивать переменным новые значения. Для этого нужно использовать оператор set. Смотрите пример присвоения переменной:

set имя = новое_значение

При присвоении переменной нового значения можно свободно использовать теущее. Следовательно, если нужно получить её текущее значение, нужно написать её имя (пример: set i = i + 1 прибавляет к текущему значению переменной i единицу). Все аргументы, которые принимает функция, тоже ведут себя, как локальные переменные.

Про типы переменных можно рассказывать много и очень долго. Я упомяну некоторые основные моменты, нам это пригодится. Для этого откройте файл common,j и найдите там слово type. То, что вы найдёте, будет иметь вид type тип extends другой тип. Такие штуки называются наследованием типов. Базовыми являются code, integer, real, string, boolean и handle, от которого наследуются все прочие типы игры.
Наследуемые типы можно взаимозаменять, но не всегда и не везде. Рассмотрим пример: type unit extends widget. Мы можем передать в функцию вместо типа widget тип unit, но не можем передать вместо типа unit тип widget: тип unit имеет настройки шире. Более высокий уровень наследования может заменяться на более низкий, но более низкий уровень наследования не может заменяться более высоким.

Последнее, о чём вам стоит знать, прежде чем мы перейдём к разделу практики и домашним заданиям - обнуление переменных. Здесь руководствуйтесь простым правилом: все переменные, которые так или иначе наследуются от типа handle, нуждаются в обнулении, чтобы избежать утечки памяти (когда ячейка в памяти резервируется, но не освобождается). Обнуление переменных производится путём присваивания им значения null после их использования до выхода из функции. Делается это так:

set имя = null

С глобальными переменными так можно и не поступать.
Почти все наследуемые от handle типы требуют не просто обнулить значение переменной, но ещё и уничтожить её содержимое специальной функцией. Я приведу список типов и функций, которые предотвращают утечку содержимого.

boolexpr: DestroyBoolExpr
conditionfunc: DestroyCondition
defeatcondition: DestroyDefeatCondition
destructable: RemoveDestructable
dialog: DialogDestroy
effect: DestroyEffect
filterfunc: DestroyFilter
fogmodifier: DestroyFogModifier
force: DestroyForce
group: DestroyGroup
image: DestroyImage
item: RemoveItem
itempool: DestroyItemPool
leaderboard: DestroyLeaderboard
lightning: DestroyLightning
location: RemoveLocation
multiboard: DestroyMultiboard
multiboarditem: MultiboardReleaseItem
quest: DestroyQuest
rect: RemoveRect
region: RemoveRegion
texttag: DestroyTextTag
timer: DestroyTimer
timerdialog: DestroyTimerDialog
trigger: DestroyTrigger
ubersplat: DestroyUbersplat
unit: RemoveUnit
unitpool: DestroyUnitPool
weathereffect: RemoveWeatherEffect

Домашнее задание:
  • Откройте созданную вами карту. Создайте триггер Lesson3Test.
  • Объявите две функции: одной из них присвойте имя MyNewFunc2, а через другую вызовите первую.
  • В функции MyNewFunc2 создайте переменную, которая бы хранила в себе точку с координатами (0;15), выводила сообщение "(0;15)", затем меняла бы точку на (4;15) и удаляла бы её из памяти корректно. Для отличной оценки не должно быть утечек памяти!
  • Заставьте значение переменной (предварительно её объявив) в функции, которая вызывает MyNewFunc2, вычислять значение тройки, возведённой в степень самой себя восемь раз.
  • Удалите триггер, созданный на уроке 2 через функцию MyNewFunc2.
  • Пришлите карту с результатом мне в ЛС.


Успехов всем!

Помогали писать урок и корректировать его: Ty3uK, Alice


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.


Сообщение отредактировал Duosora - Суббота, 13 Апреля 2013, 12:36:22
 

lawsonДата: Суббота, 13 Апреля 2013, 02:14:18 | Сообщение # 2
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
о да такой большой урок и писали наверное его долго, по абзацу в день.
Следующий урок ждать не раньше лета?

Добавлено (13 Апреля 2013, 02:14:18)
---------------------------------------------
вот вам и вся школа, хспади.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

DuosoraДата: Суббота, 13 Апреля 2013, 02:55:08 | Сообщение # 3
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
lawson,
Ссылки на XGM запрещены.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.


Сообщение отредактировал Duosora - Суббота, 13 Апреля 2013, 12:38:32
 

элитаДата: Суббота, 13 Апреля 2013, 06:48:16 | Сообщение # 4
1 уровень
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Блокировки:
Цитата (Duosora)
у глобальных переменных префикс udg_ перед названием

Пропущено: , созданных через WE.
Цитата (Duosora)
можно в текстовом интерфейсе объявлять только локальные переменные.

Пропущено: WE
Цитата (Duosora)
Обнуление переменных производится путём присваивания им значения null после их использования в самом конце функции.

Не в самом конце функции, а до выхода из функции.
 

H_A_PKДата: Суббота, 13 Апреля 2013, 09:52:32 | Сообщение # 5
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Цитата (Duosora)
вычислять значение тройки, возведённой в степень самой себя восемь раз.

я нимного не понимаю, нужно тройку возвести в куб 8 раз ?
по если судить прямо, то возводить 3 в куб 8 раз подряд кажется сплошным тупизмом : D

или же
Код
3^3 = 27
27^3 = 19683
19683^3 = 7625597484987

так ? :о
или например
Код
3^3 = 27
27^27 = 4,4342648824303776994824963061915e+38

на самом деле из данных слов не совсем понятно, степень константа или переменная, возводимое число константа или переменная ?

Добавлено (13 Апреля 2013, 09:52:32)
---------------------------------------------
или 3^(3*8) -_-


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец


Сообщение отредактировал H_A_PK - Суббота, 13 Апреля 2013, 09:49:37
 

элитаДата: Суббота, 13 Апреля 2013, 11:10:19 | Сообщение # 6
1 уровень
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Блокировки:
H_A_PK, все проще. Требуется заставить переменную не понять что вычислить. Переменная не способна что-либо вычислять. Задача решений не имеет.
 

DuosoraДата: Суббота, 13 Апреля 2013, 12:38:06 | Сообщение # 7
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Добавил контрибьюторов, внёс коррективы. Алисе отдельное спасибо за уточнения.

Добавлено (13 Апреля 2013, 12:38:06)
---------------------------------------------
Цитата (H_A_PK)
я нимного не понимаю, нужно тройку возвести в куб 8 раз ?

Да. Чем меньше ресурсов будет есть твоё вычисление, тем больше ты получишь баллов.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.


Сообщение отредактировал Duosora - Суббота, 13 Апреля 2013, 12:38:15
 

Imba_pvLДата: Суббота, 13 Апреля 2013, 12:48:11 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
Цитата (Duosora)
Удалите триггер, созданный на уроке 2 через функцию MyNewFunc2.

а что дз там делать нужно чтоли?
я удалил его


 

goldplay99Дата: Суббота, 13 Апреля 2013, 13:18:54 | Сообщение # 9
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 0
Блокировки:
Карту не сдам :3 Моб без юсб, может в лс написать примерный код?)

Я знаю *ВСЕ*, но *ВСЕ* - ничегошеньки незнает обо мне.
 

элитаДата: Суббота, 13 Апреля 2013, 13:24:13 | Сообщение # 10
1 уровень
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Блокировки:
Цитата (Duosora)
]color=green]Alice[/color[

Alice в группе пользователи, цвет группы - grey.
 

DuosoraДата: Суббота, 13 Апреля 2013, 13:35:25 | Сообщение # 11
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
элита,
Ты ведь и проверенных ломала.

Добавлено (13 Апреля 2013, 13:35:25)
---------------------------------------------

Цитата (Imba_pvL)
а что дз там делать нужно чтоли?

Угу.
Цитата (goldplay99)
Моб без юсб, может в лс написать примерный код?)

Можно.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

ВолчачкаДата: Суббота, 13 Апреля 2013, 13:49:52 | Сообщение # 12
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (Duosora)
Ты ведь и проверенных ломала.

С вашего позволения, аккаунт Alice не достиг группы проверенных. => Alice до сих пор пользователь.

Предупреждение за оффтоп в разделе Школы.


Сообщение отредактировал SirNikolas - Суббота, 13 Апреля 2013, 14:07:22
 

H_A_PKДата: Суббота, 13 Апреля 2013, 14:07:37 | Сообщение # 13
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Цитата (элита)
H_A_PK, все проще. Требуется заставить переменную не понять что вычислить. Переменная не способна что-либо вычислять. Задача решений не имеет.

я подумал, что нам придётся воспользоваться командой set, блин ну что за идиотизм, зачем тогда вообще нужно было писать этот пункт, Дуос как всегда решил потешить чсв помучав учеников своими заданиями


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

Ty3uKДата: Суббота, 13 Апреля 2013, 14:10:35 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Pow?

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

DuosoraДата: Суббота, 13 Апреля 2013, 22:28:50 | Сообщение # 15
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Ty3uK,
Pow.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Ty3uKДата: Суббота, 13 Апреля 2013, 22:43:50 | Сообщение # 16
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Я Нарку писал.
И это саркастический вопрос.


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

H_A_PKДата: Понедельник, 15 Апреля 2013, 11:22:50 | Сообщение # 17
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
я луп ещё воткнул

проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

FredbobДата: Понедельник, 15 Апреля 2013, 12:39:52 | Сообщение # 18
1 уровень
Группа: Пользователи
Сообщений: 14
Награды: 0
Репутация: 0
Блокировки:
а надо создавать вторую функцию чтобы еевызвать или вызывать существующую(простите за нубский вопрос)
 

H_A_PKДата: Понедельник, 15 Апреля 2013, 14:05:30 | Сообщение # 19
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
создаёшь триггер, в триггере вызываешь СВОЮ ФУНКЦИЮ и в своей функции ты вызываешь MyNewFunc2

проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

vladhellgateДата: Понедельник, 15 Апреля 2013, 16:22:16 | Сообщение # 20
7 уровень
Группа: Проверенные
Сообщений: 255
Награды: 0
Репутация: 33
Блокировки:
Выпишите меня из школы jass.

Сообщение отредактировал vladhellgate - Понедельник, 15 Апреля 2013, 23:29:51
 

SirNikolasДата: Понедельник, 15 Апреля 2013, 16:52:07 | Сообщение # 21
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (vladhellgate)
Я за три дня сам в C++ дошёл далеко
Можно посмотреть код последней программы, написанной тобой?


 

peinДата: Понедельник, 15 Апреля 2013, 20:21:06 | Сообщение # 22
9 уровень
Группа: Проверенные
Сообщений: 1114
Награды: 1
Репутация: 272
Блокировки:
Duosora, вычеркни меня с учасщихся плз
 

vladhellgateДата: Понедельник, 15 Апреля 2013, 21:26:58 | Сообщение # 23
7 уровень
Группа: Проверенные
Сообщений: 255
Награды: 0
Репутация: 33
Блокировки:
.

Сообщение отредактировал vladhellgate - Понедельник, 15 Апреля 2013, 23:30:58
 

lawsonДата: Понедельник, 15 Апреля 2013, 21:48:11 | Сообщение # 24
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
vladhellgate, красава, заткнул этого ника, сразу видно ты норм кодер.

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

vladhellgateДата: Понедельник, 15 Апреля 2013, 22:29:17 | Сообщение # 25
7 уровень
Группа: Проверенные
Сообщений: 255
Награды: 0
Репутация: 33
Блокировки:
,

Сообщение отредактировал vladhellgate - Понедельник, 15 Апреля 2013, 23:31:29
 

Форум о Warcraft 3 » Раздел для картостроителей » Школа картостроения » [JASS] Урок 4. Переменные
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

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