Надеюсь, прочитав этот урок, вы найдете для себя много нового . Давайте начнем с простого.
Переменные и как ими пользоватся
Сначала нам надо узнать, что вообще такое эти переменные. Переменная - это хранилище данных, куда мы можем записывать
различные данные для их последующего вызова. Тоесть действия с переменными предельно просты: запись информации,вывод и
использование информации. Если присмотрется ближе, то список можно пополнить еще одним пунктом - объявление переменной.
Каждая переменная имеет свое название, чтобы компилятор мог отличить друг от друга переменные, название мы задаем при
объявлении. Оператор объявления переменной - new. Вот пример объявления новой переменной:
new MyFirstVariable;
Тут мы объявили переменную и назвали ее MyFirstVariable (моя первая переменная). Название могут быть, естественно, разные,
но помните, что павн не поддерживает кириллицу (это вам не 1с)! Перейдем к следующему пункту - запись информации. Запись
информации осуществляется с помощью оператора присвоения или различных функций. Рассмотрим оператор присвоения:
MyFirstVariable = 3;
Таким образом мы присвоили предварительно созданной переменной значение 3. Ни в коем случае не путайте оператор присвоения(
= ) с оператором сравнения ( == ). Вот пример оператора объявления и оператора присвоения соединенных вместе:
new MySecondVariable = 3;
Тоесть переменная будет равна трем изначально.
Из пункта запись информации вытекает пункт - изменение информации. Изменять информацию мы можем как с помощью оператора
присвоения,так и с помощью специальных операторов, список приведен ниже.
//+= - оператор прибавления числа, выглядит так: Variable += 3;// прибавляем к текущему значению переменной 3 //-= - оператор отнятия числа от текущего значения переменной, выглядит так: Variable -= 3;// отнимаем от текущего значения переменной 3 //++ - оператор инкримента или прибавления числа один, выглядит так: Variable++;// прибавляем к текущему значению переменной 1 //-- - оператор декримента или отнятия числа один, выглядит так: Variable--;// отнимаем от текущего значения переменной 1
И естественно использование информации. Переменные фактически действуют как дефайны и в нужный момент и в нужном месте
"преобразовываются" в значения которые записаны в переменной. Вот несколько примеров:
new variable = 3; if(variable == 3)//пример в условии { GivePlayerWeapon(playerid,variable,3);//пример с playerid и variable, playerid ведь тоже переменная }
Ну думаю тут все легко и понятно. Так же хотелось бы разъяснить ситуацию с локальными переменными, поясню: переменные
объявленные в самом начале мода или не в пабликах/функциях (т.е не состоящие в фигурных скобках) называются глобальными (т.е
действуют абсолютно во всем моде), а состоящие в скобках - локальными. Локальные переменные дейсвуют во всех скобках
открытых после нее и "самоуничтожается" когда исполнение кода дойдет до закрытия скобок. Пример:
new Global;//глобальная переменная public OnGameModeInit() { new Local;//локальная переменная if(!local) { new DeepLocal;//локальная переменная "ниже уровнем" } }
Теперь надо разобратся с типами переменных, точнее с тегами. Тегами называются сочетания букв и цифр отделенные от
переменной двоеточием, они определяют тип данных в переменной. Известные нам теги:
bool,Float,Text,3DText,Player3DText и так далее
Теги типа - DB, DBResult я писать не стал, т.к для их использования требуется отдельный инклуд.
Как я уже говорил, теги определяют тип данных в переменной, вот основные типы которые вам понадобятся:
Integer - целочисленный тип или целое число, стандартный тип в павн, тег не требуется. (примеры: 3, -23, 2032) Float - вещественный тип или число с плавающей точкой или десятичная дробь, обычно используется для записи здоровья/координат. (примеры: -3.321, 7.213, 213.3) Bool - логический тип или boolean или ложь/правда, может иметь только два значения ложь и правда (true или false, по аналогии это 1 и 0, хотя числа использовать нельзя). (примеров не даю, все и так понятно)
Вот примеры работы с тегами в коде:
new IntVariable = 33;//переменная с типом integer new Float:FltVariable = 56.213;//переменная с типом Float new bool:TrueFalse = true;//переменная логического типа
Так же хочу заметить, что переменным можно присваивать буквы как значение (для каждой переменной только одну!), пример:
new Variable = 'a';
Эта переменная будет носить значение буквы a. На данной стадии для нас это бесполезно, хотя потом пригодится. Внимание:
буквы разного регистра считаются РАЗНЫМИ!
Массивы
Для того, чтобы представить, что такое массивы, нам надо представить таблицу, в которой есть строки и столбцы. Массивы
бывают двух видов - одномерные и двумерные (есть еще тремерные (не знаю как пишется, правда), но извращатся с ними не стоит)
, теперь вернулись к нашей мысленной табличке и представили, что у нас есть 1 строка и некоторое кол-во столбцов в которые
записываются данные (цифра или буква или другие данные (зависит от тега)) - это одномерный массив, а теперь подключим еще и
строки, это уже будет двумерный массив. Примеры:
new MyFirstMassive[12];//это одномерный массив с 12 "столбцами" new MySecondMassive[2][5];//это двумерный массив с 2 "столбцами" и 5 "строками", т.е получается 10 слотов для хранения данных, если угодно - полей MyFirstMassive[0] = 3;//мы присвоили первому элементу массива ("поля" называются элементами, членами и тд) MySecondMassive[1][3] = 4;//мы присвоили 1 "столбцу" и 3 "строке" и сответственно какому-то "полю" т.е члену или элементу массива значение 4.
Следует помнить, что при указании размера массива указывается общее число элементов, а поскольку отсчет в любом языке
скриптинга идет с 0, то цифра указанная как размер массива в операциях с массивом использоватся не может (максимальная цифра
будет: размер массива - 1).
Также следует знать оператор который определяет размер массива и называется он sizeof, примеры:
new Massive[5]; if(sizeof(Massive) == 5) return print("sizeof of massive = 5"); //а вот если массив двумерный и надо узнать "второй" размер, то поступаем так new MassiveTwo[4][5]; if(sizeof(MassiveTwo[]) == 5) return print("second sizeof of massive = 5");
С тегами и типами данных то же самое, что и в переменных.
new Float:floatmassive;
Все члены массива будут носить данные вещественного типа.
Так же существует еще один прием с массивами
new Massive[5] = 43;//все члены массива изначально будут равны 43
Теперь перейдем к строкам. В некоторых языках скриптинга есть отдельный тип для этого, string или строковый, в павн это
реализовано немного по другому. Для начало, что такое строки или строковый тип данных (которого в павн нет), это переменные
несущие набор букв/знаков/цифр как информацию. Как вы уже помните, я говорил, что переменной можно задать значение
буквы/знака или цифры как символа (смысла в этом нет, если это просто переменная), а вот если у нас массив, то каждому
элементу массива можно задать определенный символ и при выводе всего массива вместе, то получится текст. Все предельно
просто, мы можем либо задавать текст определенными функциями, либо оператором присвоения, чем мы сейчас и займемся.
new StringMassive[128];//как размер укажем максимальное кол-во символов StringMassive = "Hello World!";//скобки не одинарные, при присвоении массиву строкого значения скобки должны быть двойными new StringMassiveTwo[128] = "Hello World! vol.2";//также можно присвоить строковое значению массиву прямо при присвоении StringMassiveTwo[0] = 0;//таким образом можно обнулить строку.
И в конце этой "главы" рассмотрим присвоение значений массивам при обьявлении (каждому элементу)
//Если массив одномерный new Massive[3] = { //оператор присвоение и открытие фигурной скобки 2,3,5//через запятую перечисляем значения };//закрытие скобки и точка с запятой //если массив двумерный new MassiveTwo[3][5] = { {1,2,3,4,5},//каждый "столбец" обозначается отдельными фигурными скобками, отделяются каждые скобки запятыми {6,7,8,9,10}, {11,12,13,14,15} }; //если мы имеем дело со строками new StringMassive[3][128] = {"fsdfafs","fdsagas","fdsgsd"};//важно помнить, что нам надо выделить элементы еще и под буквами
С тегами все абсолютно тоже самое, только с тегами
Enum'ы
А теперь заключительная часть урока, енумы. Енумы на самом деле очень полезная вещь, она позволяет определить структуру
массива, зачем это надо я сейчас обьясню. Например: у нас есть один массив, в котором мы хотим видеть несколько типов
данных, например логический чередуется с целочисленным и завершается все это строкой которая нам совершенно не нужна до
этого. Но как же это реализовать? Мы будем использовать енумы.
enum MyEnum //сначала идет оператор enum и через пробел название енума {//открытие фигурной скобки IntType,//через запятую члены будущего массива, именно так задается структура будущего массива bool:Boolean, string[128]//и венчает все это массив о котором мы говорили };//закрытие фигурной скобки и точка с запятой //итак структура определена, теперь делаем массив new EnumMassive[MyEnum];//название енума или, если угодно, структуры суем туда где должен был быть размер EnumMassive[IntType] = 3;//целочисленный тип EnumMassive[Boolean] = true;//логический тип EnumMassive[string] = "Hello World! vol.3";//и массив EnumMassive[string][4] = 'o';//вот так будет выглядеть массив //так же можно присвоить значение члену структуры прямо в енуме, думаю понятно как это работает
Ну вот и весь урок.
Урок написан REALman'ом. Версия 2.0, отредактировано 18.06.2011.
Сообщение отредактировал Mike: 18 января 2012 - 15:41