Записи участника ([DUОS]) - Форум


Правила форума ·

Результаты поиска

[DUОS]

#167 | Тема: [ВАЖНО] Предложения на модерацию
Quote (nikikin)
надо изменить дизайн кнопок)

Не забывай, что у меня накрылся комп и я с линукса. Но дизайн кнопок я постараюсь как можно скорее поменять.
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл

[DUОS]

#171 | Тема: Edgus
Edgus,
Однозначно хороший, трушный чел.
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл

[DUОS]

#173 | Тема: Примитивные типы данных в Jass
В информатике примитивным называется тип, который является базовым для языка программирования. В Jass таких типов шесть - integer, real, string, boolean, code и handle.

integer - самый простой тип данных. Jass использует 32-битные целочисленные, которые представляются путём парной арифметики (я сам не понял, что есть two's-complement, может, кто подскажет?), в общем, это то же самое, что и long на языке программирования С.
Примеры целочисленных:
Code
local integer a = 5              //  5
local integer b = 2+3            //  5
local integer c = a+3            //  8
local integer d = 19/10          //  1
local integer e = R2I(19.0/10.0) //  1
local integer f = S2I("5")       //  5
local integer g = 010            //  8
local integer h = 0x10           // 16
local integer i = 'a'            // 97
local integer j = 'abcd'         // 1633837924


Переменная d - пример деления. Jass отбрасывает дробную часть, когда одну целочисленную делит на другую.
Переменная e - Пример деления реальных (подробнее об этом ниже) и конвертации результата в целочисленную через R2I.
Переменная f - Конвертация строки через S2I.
Переменная g - Восьмеричное число.
Переменная h - Шестнадцатеричное число (или просто хекс).
Переменная i - Символ ASCII или 256-ричное число.
Переменная j - Комбинация четырёх ASCII символов. Известна больше как равкод.

Немного о равкодах. Если в GUI они имеют персональные типы "Тип объекта" и "Способность", то в Jass это простые, обычные числа. К примеру, равкод 'hfoo'. Значения в ASCII его символов такие: 'h', 'f' и 'o' равны 104 (0x68), 102 (0x66) и 111 (0x6F) соответственно.
Давайте рассмотрим несколько методов конвертации равкода в десятичное число.
Способ 1. Просто заменить каждый символ равкода на его шестнадцатеричный аналог. В примере получим 'hfoo' = 0x68666F6F, при конвертации в десятичную систему получим 1751543663.
Способ 2. Если с хексом у вас беда, просто сразу переведите в десятичную систему из 256-ричной. В примере 1751543663=((104*256+102)*256+111)*256+111.
real. Jass использует 32-битные floating points (тоже скажите мне корректный перевод Оо)для этого типа переменных - они эквивалентны типу float на языке программирования C. Поддерживается до трёх символов - выражение 0.0001 == 0.00 всегда вернёт true.
Примеры реальных:
Code
local real a = 5.00           //  5.000
local real b = 5.             //  5.000
local real c = S2R("5.0")     //  5.000
local real d = I2R(5)         //  5.000
local real e = 5              //  5.000
local real f = 19/10          //  1.000
local real g = 19./10.        //  1.900


Переменная c - пример конвертации строк через S2R.
Переменная d - пример конвертации целочисленной через I2R.
Переменная e - то же самое, что и переменная d, но конвертация неявная. Поэтому использование 5. по сравнению с 5 намного лучше, так как второе работает медленнее (требует конвертации).
Переменная f - такая же неявная конвертация целочисленных (и 19 и 10 - целочисленные, у них нет точки. Парсер сначала сделает деление целочисленных, затем сконвертирует в real).
Переменная g - надлежащий способ деления реальных.
string. На языке программирования C все строки являются по сути массивами символов, а тип string - указатель на первый символ в этом массиве. Строки в Jass немного сложнее - принцип указателя на первый символ остался, но настоящими указателями служат индексы во внутренней таблице строк. Поэтому строки в Jass могут считаться смарт-указателями.
Каждая строка, которую вы используете, должна быть размещена и записана где-то в памяти. Но если одна строка нужна более одного раза, то выделять на неё больше памяти неразумно, так как она уже где-то в ней есть. Таблица строк может гарантировать, что у вас никогда не будет двух одинаковых строк, записанных в память. Ниже даны примеры строк, а также пометки, когда память размещает их, а когда использует существующие строки.
Code
local string a = "foo" // "foo" рамещена
local string b = "bar" // "bar" размещена
local string c = "foobar" // "foobar" размещена
local string d = a+b // "foobar" использована
local string e = I2S(50) // "50" размещена
local string f = "50" // "50" использована

Таким образом, переменных 6, а размещённых строк - 4.
boolean в Jass 32-битная, хотя в большинстве случаев её значение может быть true (1) или false (0). Условие такого типа:
Code
if (boolvar) then
     call BJDebugMsg("yes")
else
     call BJDebugMsg("no")
endif

будет показывать "yes", если логическая boolvar будет иметь значение, не равное 0. Тем не менее, фильтр boolexpr будет считать как true только значение, равное 1. Из-за этого до патча 1.24 существовала ошибка с функцией IsUnitType, которая в некоторых случаях вместо 1 возвращала 64 и прочие не равные 1 числа.
code - тип данных, используемый для сохранения ссылок на функции и, скорее всего, является 32-битной целочисленной. Так как тип используется очень редко, известно о нём очень мало. Он используется в нескольких функциях, таких как TimerStart и ForGroup. Также это единственный известный тип, который не может быть использован в массиве.
handle - это 32-битный целочисленный смарт-указатель на объект. Это примитивный тип, от которого наследуются все прочие не описанные в этой статье типы данных. Сам тип почти вообще в Jass не использован - common.j не содержит ни одной native-функции, которая бы принимала или возвращала handle. Исключение из этого правила лишь одно - известная функция GetHandleId, официальный наследник неофициальной H2I.
Известно, что Jass применяет подсчёт ссылок, благодаря чему ссылки на уничтоженные объекты могут быть использованы позднее. Именно поэтому все локальные переменные типа handle и всех тех типов, которые от него наследуются, должны быть заданы как null.
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл

[DUОS]

#174 | Тема: Примитивные типы данных в Jass
Quote (KO3bMA)
кто нить из крутых программеров подумал о каком нить компиляторе в жас, кроме близзовского перевести в текст?

Ты про то, чтобы переписать компилятор близзов?
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл

[DUОS]

#175 | Тема: Примитивные типы данных в Jass
Quote (Spirit_of_Dragon)
Тип string представляет последовательность из нуля или более символов в кодировке Юникод. Тип string — это псевдоним для типа String платформы .NET Framework.

Несмотря на то, что тип string является ссылочным типом, операторы равенства (== и !=) определены для сравнения значений объектов типа string, а не ссылок. Это упрощает проверку равенства строк. (с) MSDN

Хммм, == и != да, тоже имеется такое.
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл

[DUОS]

#179 | Тема: Omni174 повышение в журналисты
N1ghtElf,
Ты видел его новости вообще?
Журналист должен хоть более-менее быть грамотным и чётко формулировать свои фразы. Давайте уж лучше я буду новости писать. Без обид, Омни.
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл

[DUОS]

#180 | Тема: Edgus
Quote (Edgus)
уже могу назначать переменные и выводить простые сообщения.

Hello World выведешь? biggrin
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл
Поиск: