Скриптова мова MSL у сервері офісного месенджера MyChat
Мова MyChat Script Language або скорочено MSL за своєю семантикою нагадує Pascal. Стандартна схема будь-якого скрипту виглядає так:
program TestScript;
begin
end.
program — це службове необов'язкове слово, begin..end — операторні дужки. Наприкінці скрипта стоїть крапка, вона символізує кінець програми.
Усі оператори мови поділяються крапкою з комою, регістр літер немає значення. Змінні повинні описуватись заздалегідь і мати чітко визначений тип. У назві можуть бути великі та маленькі латинські літери, цифри та знак підкреслення. Назви змінних не можуть починатися з цифри та містити у своєму імені пробіли. Наприклад:
program Variables;
var
st: string;
x, y: integer;
begin
x := 100;
y := 150;
st := inttostr(x + y);
end.
У цій програмі оголошуються 3 змінні: один рядок і два цілим числом, а потім текстової змінної st присвоюється сума x і y. Зверніть увагу, що для цього довелося застосувати функцію переведення числа в рядок, так як у MSL здійснюється жорсткий контроль типів даних при перетвореннях.
MSL підтримує цикли, яких існує три види:
- Ітеративний:
for i := 1 to 100 do begin
end;
- З передумовою:
while x > 100 do begin
end;
- З постумовою:
repeat
until r = false;
Також є розгалуження з підтримкою логічних умов та оператор вибору:
if (x = 10) and (StrToInt(test) < 100) then begin
end;
В операторі case не може використовуватись змінна типу string.
case z of
1: begin
x := 100;
y := 200;
end;
2: x := 700;
3: y := 10000;
else x := 0;
end;
І, зрештою, підтримується механізм підпрограм. Це процедури та функції. Функція відрізняється від процедури тим, що повертає свого в своєму імені після відпрацювання значення. У процедури та функції можна передавати параметри за посиланням та за значенням, тобто, якщо перед змінною стоїть службове слово var (у параметрах функції), то це означає, що якщо змінити змінну функції, вона зміниться і в програмі, звідки викликається дана функція. Якщо службового слова var перед змінною немає — можна робити зі змінною що завгодно, у програмі, що викликає, (або підпрограмі) змінна, що передається, не зміниться.
procedure Test(x, y: integer; var st: string);
begin
st := IntToStr(x * y);
end;
function Fact(n: integer): integer;
var
i,x: integer;
begin
x := 1;
for i := 1 to n do x := x * i;
result := x;
end;
Для більш детального знайомства з мовою та варіантами її використання рекомендуємо подивитися приклади роботи з процедурами та функціями.
Також приклади використання скриптової мови ви можете знайти на офіційному форумі у розділі "Боти, плагіни, скрипти та різні доповнення".