Синтаксис
Начнем изучение синтаксиса с переменных.
Переменные - это такие "ячейки" для хранения информации, они обозначаются буквой латинского алфавита или словом, которое может содержать буквы, цифры и символ _ , например:
Причем a1 или A1 - это одна и та же переменная;
имя переменной может быть таким - variable_2.
Но следует помнить, что имя переменной не может начинаться с цифры, не может содержать кириллические символы и символы типа %, *, + и т.д.
То есть назвать переменную так: 1variable или Variable& нельзя.
Переменные бывают различных типов, тип переменной говорит о том, какую информацию в ней можно хранить.
Например в переменной типа Byte можно хранить целое число от -128 до +127, если тип переменной String, в ней можно хранить строку текста неограниченной длины.
Чтобы работать с переменной надо ее сперва объявить, это делается так:
Var1.b или var1.b=5. ;так можно объявить переменную типа Byte или
Var2.f=2.5 ;аналогично, так объявляется переменная типа Float
Var3.s="строка текста" ;тип - String
После символа ; пишется комментарий, который программа игнорирует, он нужен чтобы человеку было легче разобраться в коде.
Чуть ниже я приведу таблицу, в которой кратко описаны все типы переменных, используемые в PureBasic, и способы их объявления:
Имя типа | Способ объявления | Занимаемая память | Возможные значения |
Byte | a.b | 1 byte | от -128 до +127 |
Character | a.c | 1 byte (ascii) | от 0 до 255 |
Character | a.c | 2 bytes (unicode) | от 0 до 65535 |
Word | a.w | 2 bytes | от -32768 до +32767 |
Long | a.l | 4 bytes | от -2147483648 до +2147483647 |
Float | a.f | 4 bytes | неограниченно |
Quad | a.q | 8 bytes | от - 9223372036854775808 до + 9223372036854775807 |
Double | a.d | 8 bytes | неограниченно |
String | a.s | длинна строки + 1 byte | неограниченно |
Fixed String | a.s{Length} | длинна строки | неограниченно |
Вобщем-то наиболее часто применяемые типы это Byte, Long - целые числа, Float и Double - дробные числа и String - строка текста.
Часто необходимо использовать не одну переменную, а целый массив. Массив - другими словами матрица, состоящая из некоторого множества однотипных элементов - переменных.
Создается массив командой Dim, примерно следующим образом:
Dim a.s (10)
так мы создали массив строк, состоящий из 11 элементов: a.s (0), a.s (1), a.s (2) ..... a.s (10).
Можем присваивать им значения:
a (0)= "A+B "
a (1)= "равно C"
a (2)= a (0) + a (1)
Если значения не присвоить все элементы массива будут равны 0 или пустой строке, в зависимости от типа.
Размер массива в последствии можно менять:
ReDim a (15) ;теперь в массиве 15 элементов
Вновь приобретенные элементы равны пустой строке (или 0).
Если захотите создать константу сделайте это так:
#Const.l=120
Операторы:
Основные операторы это: =, +, -, *, /, ( ).Я думаю их назначение и применение не вызывает вопросов. С их помощью записываются математические выражения:
a=(b+1)/3
a=15%2 ;результат будет 1, вычисляем остаток от деления
Оператор And служит как логическое "и";
If a=3 And b=3
--код--
EndIf
--код-- выполнится только когда совпадут оба условия.
Or - логическое "или"
Xor - исключающее "или" (должно выполнятся только одно из условий)
Not - логическое отрицание (условие не должно выполнятся)
Циклы:
For a=1 To 10 Step 1--код--
Next
--код-- будет выполнятся 9 раз, пока переменная a не станет равна 10.
Step 1 можно было бы не писать, так как шаг по умолчанию равен 1.
Другой цикл:
While a=10
--код--
Wend
В данном цикле --код-- будет выполнятся до тех пор пока справедливо выражение a=10.
Еще один цикл:
Repeat
--код--
Until a=10
--код-- будет выполнятся пока не наступит равенство a=10
Любой цикл может быть прерван с помощью Break
Например так:
a=1
Repeat
a=a+1
If a=9
Break
EndIf
Until a=10
Условие a=10 не будет выполнено никогда.
Аналогично можно использовать Continue, только этот оператор не приводит к выходу из цикла, а досрочно отправляет на следующий "виток".
Select :
Select a.lCase 1
b=10
Case 2
b=20
Default
b=0
EndSelect
Из данного примера следует, что если переменная a равна 1 то переменной b будет присвоено значение 10, если a=2 то 20. В любом ином случае b будет равна 0.
Поддержка процедур :
Procedure.b Summa(a1.b, a2.b)b=a1+a2
ProcedureReturn b
EndProcedure
Процедуры в PureBasic'e - это функции, которые мы сами можем создавать и использовать в последствии.
Данную процедуру мы решили назвать Summa, так как она просто возвращает сумму двух своих аргументов.
Отмечу, что обязательно надо указывать тип возвращаемого значения и аргументов:
Procedure.b - тип byte;
Summa(a1.b, a2.b) - оба аргумента также имеют тип byte;
Использовать процедуру можно как и любую другую функцию, например так:
m1.b=1
m2.b=5
m3.b=Summa(m1, m2)
Обязательно следите за тем, чтобы совпадали используемые типы данных, то есть если аргумент функции имеет тип byte, то и переменная, которая подставляется в качестве него также должна иметь тип byte.
Использовать процедуру можно только после ее описания (создания), если Вы хотите описать процедуру в самом низу кода, а вызывать ее выше, то перед первым вызовом ее надо объявить:
Declare.b Summa(a1.b, a2.b)
Использование процедур существенно облегчает программирование, во многих случаях очень удобно сначала описать какой-либо набор действий в процедуре, а затем просто вызывать ее там где необходимо.
Также надо знать, что в каждой процедуре используется "свой" набор переменных, то есть : name.s="michael" внутри процедуры может иметь совсем другое значение, переменные, объявленные вне процедуры в ней "не видны" и наоборот.
Если Вы хотите, чтобы переменная была одинаково "видна" как в основной части программы, так и во всех процедурах, ее надо сделать глобальной, а для этого объявим ее не так как описано выше, но следующим образом:
Global name.s="michael"
следующий код это демонстрирует:
Declare ShowName()
Global name.s="michael"
ShowName()
Procedure ShowName()
MessageRequester (" ", name)
EndProcedure
При каждом запуске процедуры все ее переменные объявляются заново, их прежние значения не сохраняются. Если необходимо, чтобы после отработки процедуры значение переменной, объявленной внутри нее сохранялось до следующего вызова, эту переменную надо объявить как статичную, короткий пример:
Procedure.l Prim()
Static A.l
A=A+1
ProcedureReturn A
EndProcedure
Как не трудно догадаться, переменная A.l будет равна количеству вызовов процедуры.
Подпрограмма
- часть программы, которую удобно записать отдельно.a = 1
b = 2
Gosub ComplexOperation ;вызов подпрограммы
Debug a
End
ComplexOperation:
a = Cos(b)
b = a+a*b
Return
Начинается подпрограмма с метки типа ComplexOperation: (или aaa:), имя метки можно придумать самостоятельно, но важно чтобы оно содержало только латинские символы и цифры и не начиналось с цифры.
Заканчивается метка словом Return, точно также, как процедура.
Gosub Имя_Метки - вызов подпрограммы.
Подпрограмма отличается от процедуры тем, что процедура может возвращать результат своей работы (хотя может этого и не делать), а также тем, что переменные, используемые в процедуре, "видны" только внутри нее, если Вы хотите сделать переменную, которая будет одинаково "видна" и в процедурах и в основной части программы, предварительно объявите ее как глобальную, т.е.:
Global a.l=10
Структура
- состоит из нескольких переменных, и нужна для удобного структурирования данных.Например данные о персоне удобнее записывать в следующую структуру, чем в отдельные переменные:
Structure Person
Name.s
Yo.l
Num.l
EndStructure
Потом создаем объект, относящийся к этой структуре:
Dim manager.Person ;это также, как создать переменную "типа Person"
и этот объект, в данном случае, обладает тремя свойствами:
manager\Name="Vasya"
manager\Yo=39
manager\Num=4207
Можно сделать массив объектов типа "Person":
Dim manager.Person(100)
manager(1)\Name="Vasya"
manager(1)\Yo=39
manager(1)\Num=4207
Операторы With : EndWith - удобно использовать вместе со структурами.
Возьмем предпоследний пример и перепишем его следующим образом:
With manager
\Name="Vasya"
\Yo=39
\Num=4207
EndWith