Скриптовый модуль: операторы и функции

Things you must know!

Moderators: Murderator+, Murderator

Post Reply
Yoko
Site Admin
Posts: 1964
Joined: 2004-04-03 16:49:38
Contact:

Скриптовый модуль: операторы и функции

Post by Yoko »

SIN
COS
STRLEN - длина строки
LEN - длина строки
STR(число, кол-во знаков после запятой) - число в строку
STR(число) - число в строку
VAL - строку в число
INT(число) - == floor()
IsString(аргумент) - TRUE, если аргумент - строка
IsNumber(аргумент) - TRUE, если аргумент - число
- ^^ полезны, например для определени типа переменной FatalError
IsArray
IsClass

StrToMoney(строка) - возвр. число, соотв. строке денег
MoneyToStr(число_денег, ширина_ячейки, выравнивание, знаков_после_запятой)

Date(строка) - возвр. число, соответствующее заданной дате. Формат строки: "dd/mm/yyyy" или "d/m/yy", главное, чтоб не было пробелов.
Date(день, месяц, год) - то же самое. Возвращенная дата - число дней с 30/12/1899
DateToStr(дата_как_число) - вернуть строку, соотв. дате
DateToStr(дата_как_число, ширина) - если ширина 8, будет dd/mm/yy, если >=10 dd/mm/yyyy. Если <8 - будут звездочки.
Day(дата_как_число) - вернуть день данной даты
Month(дата_как_число)
Year(дата_как_число)
IsLeapYear(год) - true, если год - високосный

FormatStr(строка,ширина)
FormatStr(строка,ширина,не_показывать_точки) - урезать/расширить строку до данной ширины. Если строка длиннее - последние 3 символа будут "...", если не_показывать_точки==false или опущено.

LTrim - убрать пробелы слева
RTrim - справа
Trim - слева и справа

Left(строка,число букв) - как в Basic
Right(строка,число букв)
Mid(строка, позиция, число букв) - позиция считается от 0
_______________________________________________________
(Просто перепечатываю один из файлов документации, которые оставил автор скриптового модуля)

Язычок:

Один оператор в строке!!! перед оператором может быть метка. Метка только одна на строке.

Булевские операторы:

Code: Select all

  AND или && 
  OR или ||
  NOT
  <, >, <=, >=, <>


Есть поддержка рекурсии.

\ - продолжение строчки переходит на следующую, перед \ должен стоять пробел!!! Нельзя пихать в середину слова!!! Да и вообще, лучше не использовать...

# - комментарий до конца строки. Так же можно использовать ';' - как в ассемблере.

Code: Select all

VAR переменная1, переменная2... 


- объявление переменных. Переменные нетипизированы, вначале имеют неопределенный тип. Переменные - буквы (в т.ч. русские), цифры, _. Без учета регистра.

Объявление переменной типа класс:

Code: Select all

VAR переменная = Имя_класса() 
   переменная.Create() - вызов конструктора
   переменная.Destroy() - вызов деструктора


Задание массива

Code: Select all

DIM массив[размер], массив[размер]... 


Обращение к элементам: имя_массива[номер_элемента]. Нельзя писать имя_массива1 = имя_массива2 для присвоения содержимого одного массива другому.

Обращение к отдельным буквам в строке - так же, как к эл-там массива:
переменная[номер_буквы]. Номер - от 0, в случае выхода за конец строки - ошибка.

Замечания по поводу массивов
Массивы можно передавать в качестве параметров функциям. При этом передается САМ массив, а не его копия!!!. Т.е. все действия внутри функции над элементами массива будут производиться над первоначальным массивом. Возвращать массивы из функций НЕЛЬЗЯ!!!

Code: Select all

SUB имя_функции 
<тело функции>
RETURN выражение
ENDSUB


или:

Code: Select all

SUB имя_функции (параметр1, параметр2...) 
<тело функции>
ENDSUB

- объявление функции.

Вызов функции:

Code: Select all

имя_функции (параметры) 
переменная = имя_функции (параметры)
SAFECALL имя_функции (параметры)
переменная = SAFECALL имя_функции (параметры)


Если указано слово SAFECALL, то в случае, если функция вернула ошибку, значение ошибки присваивается глобальной псевдо-переменной FATALERROR и интерпретатор продолжает выполнение скрипта. Если не написано SAFECALL, скрипт прервется по ошибке. В последнем примере значение переменной в случае ошибки будет равно значению FATALERROR.
(прим.Yoko: забудьте про SAFECALL, оно вам не надо)

Code: Select all

IF условие THEN 
<операторы>
ENDIF

или:

Code: Select all

IF условие THEN 
<операторы>
ELSE
<операторы>
ENDIF

- условные операторы

Code: Select all

имя_метки: 

- объявление метки

Code: Select all

GOTO имя_метки 

- переход. НЕЛЬЗЯ делать goto за пределы циклов!!! Будут глюки!!!

Code: Select all

переменная = выражение 

- присвоение

Code: Select all

REPEAT 
  команды
UNTIL условие

- цикл. Выполняется пока условие не станет истинным (т.е. пока условие ложно). Команды выполняются по крайней мере один раз.

Code: Select all

WHILE условие 
  команды
WEND

- цикл. Выполняется, пока условие истинно. На каждый WHILE должен быть только один WEND в продедуре. т.е. конструкции вида:

Code: Select all

IF условие THEN 
  WEND
ENDIF

НЕДОПУСТИМЫ!!! То же самое и относительно других видов циклов. Делать GOTO из цикла наружу - тоже нельзя!

Code: Select all

FOR [VAR] переменная = нач.значение TO конечное_значение [STEP шаг] 
  команды
NEXT

- цикл от нач. значения до конечного (включительно) с шагом шаг, Шаг можно опустить. Если указано VAR - будет определение переменной, иначе - переменная должна быть определена до FOR.

(прим.Yoko: напоминаю, автор скриптового модуля не я, а Мамайх.)
Post Reply