PDA

Просмотр полной версии : [Вопрос] Переменные



gambit26
17.12.2015, 21:06
Подскажите, в чем отличие между new, static_const и const?

Osetin
17.12.2015, 21:30
Если воспользоваться поиском, можно найти вопросы на ваши вопросы. Данные вопросы описываются в книге от Daniel_Cortez, а также в некоторых темах.

Переменная new - величина, которая может менять своё значение в процессе выполнения скрипта.

new <тип>:<имя> = <начальное значение>;

В Pawn существуют следующие типы данных:

Целый (не имеет названия) - целые числа
Вещественный (Float) - числа с точкой
Логический (bool) - истина/ложь (true/false)
Файловый (File)

Константа - величина, не меняющаяся в процессе выполнения скрипта. В Pawn константы объявляются почти так же, как и переменные, однако каждое объявление начинается со слова const:

const <тип>:<имя> = <значение>;

Внимание! В отличие от переменных (new), в константах нужно обязательно указывать значение.


Локальные static-переменные создаются не в стеке (как в случае с new), а в секции данных, благодаря чему сохраняют своё значение даже после окончания выполнения функции.
Например, если внутри функции объявить переменную с атрибутом static и присвоить ей значение 3, то при следующем вызове функции переменная будет иметь начальное значение не 0, а 3, т.к. оно сохранилось с прошлого раза.

Также можно объявить и глобальную переменную с атрибутом static, но она будет видна только в пределах того файла, в котором она объявлена.
Пример: если static-переменная объявлена внутри включаемого файла "functions.inc", эта переменная будет видна только в пределах того файла, в основном файле (например, "main.pwn") её не будет существовать.

stock x;



Выбор между new/static на эффективность абсолютно никак не влияет. Тут дело не в эффективности, а в удобстве скриптера.

Всё это уже было описано в моём Учебнике.

Обобщу ещё раз.
Локальные переменные:
С помощью ключевого слова new объявляются переменные, которые создаются в стеке и существуют только во время выполнения функции, в которой эти переменные объявлены. Обычно инициализируются нулями (если не указать другого значения).
Через static же объявляются переменные, которые всё время находятся в секции данных. Не создаются перед и не уничтожаются после выполнения функции. По сути это те же глобальные переменные, но они видны только в пределах той функции, в которой они объявлены. Сохраняют своё значение после предыдущего выполнения функции.
Глобальные переменные:
new - переменные, которые будут видны в пределах текущего исходного файла и подключаемых файлов (если эти файлы подключены после new).
static - переменные, которые видны только в пределах текущего файла. Полезно, если вы пишете какой-нибудь инклуд и хотите, чтобы какая-то переменная была недоступна из мода и могла использоваться только в пределах вашего инклуда



Более подробную информацию можно узнать в данной теме: Нажмите сюда (http://pro-pawn.ru/showthread.php?4082)

gambit26
17.12.2015, 21:39
спасибо. подскажите, в каком случае какой тип лучше использовать?