preload
Янв 01

ОператорыОператор MIDletPascal может быть следующим:

· цикл for
· цикл while
· цикл repeat .. until
· оператор break
· оператор if .. then .. else
· оператор присваивания
· вызов процедуры/функции

Цикл for

Цикл for имеет следующий синтаксис:

for loopIndex := НачальноеЗначение to КонечноеЗначение do
begin
Операторы;
end;

Для того, чтобы создать цикл с обратным (уменьшающимся) отсчётом, необходимо вместо to использовать downto.

Следующий пример вычисляет сумму всех цифр от 1 до 10:

...
for i:= 1 to 10 do
begin
sum := sum + i;
end;
...

Если внутри цикла только один оператор, ключевые слова begin и end можно опустить.


Цикл while

Цикл while имеет следующий синтаксис:

while Условие do
begin
Операторы;
end;

Например, чтобы подождать нажатия кнопки пользователем, мы можем написать:

...
while (getKeyClicked = KE_NONE) do
begin
delay(100);
end;
...

Если внутри цикла только один оператор, ключевые слова begin и end можно опустить.

Цикл repeat .. until

Цикл repeat .. until имеет следующий синтаксис:

repeat
Операторы;
until УсловиеОкончания;

Чтобы подождать нажатия кнопки пользователем, мы можем написать:

...
repeat
delay(100);
until (getKeyClicked <> KE_NONE);
...

Оператор break

Оператор break используется для прерывания циклов for, while и repeat.

...
repeat
for i := 1 to 10 do
begin
if doSomething(i) = -1 then break; // выходим из цикла for
end;

until getClickedCommand <> emptyCommand;
...

Оператор if .. then .. else.

Оператор if .. then .. else имеет следующий синтаксис:

if Условие then
begin
Операторы; { выполняется, если Условие истинно }
end
[
else
begin
Операторы; { выполняется, если Условие ложно }
end;
]

ветвь else может быть опущена. Если внутри ветви используется один оператор, ключевые слова begin и end могут быть опущены.

Оператор присваивания

Оператор присваивания используется для присваивания значений переменным и имеет следующий синтаксис: Читать полностью »


Янв 01

Объявления процедур и функций
Функции, это подпрограммы, возвращающие какое-либо значение. Процедуры, это подпрограммы, которые ничего не возвращают. Читать полностью »


Янв 01

Объявления переменных
Чтобы объявить переменную, используйте ключевое слово var:

program variableDeclarations;
var
index: integer;
field: array[1..15] of integer;
begin
for index := 1 to 15 do
field[index] := 10;
end.


Янв 01

Объявления типов
Вы можете объявлять собственные типы данных. Чтобы делать это, используйте ключевое слово type:

program myOwnTypes;
type
number = integer;
chessFieldType = array[1..8, 1..8] of integer;
chessElementType = record
positionRow, positionCol: integer;
elementType: integer;
end;
var
element: chessElementType;
field: chessFieldType;
numberOfPlayers: number;
begin
end.


Янв 01

Объявления констант
Константа определяет значение, закреплённое за именем. Посмотрим на пример:

program constantDeclaration;
const
minutesInHour = 60;
hoursInDay = 24;
famousQuote = 'Быть или не быть';
begin
end.


Янв 01

Массивы (arrays)
Массивы определяются следующим образом:

type chessFieldType = array[1..8, 1..8] of integer;

Этим выражением был задан новый тип - массив, размером 8 х 8 полей целочисленного типа. Можно задавать массивы в секции 'var':

type
chessFieldType = array[1..8, 1..8] of integer;
var
chessField: chessFieldType;

то же самое, что:

var
chessField: array[1..8, 1..8] of integer;

Следующий пример считает количество пустых клеток на шахматной доске:

type chessFieldType = array[1..8, 1..8] of integer;
var chessField: chessFieldType;
i, j, count: integer;
begin
...
{ Инициализация шахматной доски: заполнение некоторых клеток фигурами }
...
count := 0;
for i:=1 to 8 do
for j:=1 to 8 do
if chessField[i, j] = 0 then count := count + 1;
end.

MIDletPascal поддерживает массивы любой размерности. Вы можете использовать 1-, 2-х, или даже 10-размерные массивы (которые, правда, потребляют очень много памяти и нет уверенности в том, что они реально полезны).

При использовании массивов необходимо остерегаться попыток доступа к запредельным элементам массива. Например, следующий код вызовет падение мидлета:

var a:array[1..5] of integer;
begin
a[7] := 10; { a[7] не существует и здесь мидлет упадёт }
end.


Янв 01

Комбинированный тип (record)
Данная особенность языка позволяет создавать собственные типы данных, являющиеся совокупностью других типов. Например, если вы пишете игру, где игрок управляет персонажем на экране, вы вполне можете использовать комбинированный тип для описания позиции, здоровья и прочих параметров персонажа:

type heroType = record
positionX, positionY: integer;
health: integer;
end;

Чтобы создать переменную свежезаданного типа, используйте обычную формулировку в секции 'var':

var hero: heroType;

Также вы можете использовать созданный тип в качестве параметра, при описании процедур и функций:

function isHeroDead(hero: heroType): boolean;
begin
if (hero.health <= 0) then
isHeroDead := true;
else
isHeroDead := false;
end;

Новый тип может быть определен непосредственно в секции 'var':

var hero: record
positionX, positionY: integer;
health: integer;
end;

Чтобы получить доступ к отдельным элементам комбинированного типа, используйте оператор "." (точка):

...
{ передвигаем персонажа вправо }
hero.positionX := hero.positionX + 1;
...

Нельзя копировать впрямую из переменной в переменную данного типа:

var
a, b: record
x: integer;
end;
begin
...
a := b; { это - неправильно }
...
a.x := b.x; { нужно копировать каждый элемент комбинированного типа }
end.

Рекламное агентство Промо-зона - лучшие календари кубики трансформерв.


Янв 01

Тип resourceПри создании мидлета, вместе с классами в архиве JAR можно разместить различные файлы ресурсов приложения. Ресурсами можно распоряжаться, используя следующие процедуры и функции:


· openResource
· resourceAvailable
· closeResource
· readByte
· readLine


Пример:

var res   : resource;
byte  : integer;
line  : string;
index : integer;
begin
res := openResource('/data.txt');

if (resourceAvailable(res)) then
begin
byte := readByte(res);
line := readLine(res);

closeResource(res);
end;

showForm;
index := formAddString('Byte is: ' + chr(byte));
index := formAddString('Line is: ' + line);
delay(1000);
end.


Янв 01

Тип httpMIDletPascal предоставляет базовые вазможности для работы с HTTP. Соединения HTTP идентифицируются переменными соответствующего типа, 'http'. У HTTP следующий жизненный цикл:

· открытие подключения к удалённому web-серверу
· установка метода запроса http
· добавление полей-заголовков запроса (необязательно)
· добавление данных в тело запроса (только в случае, если запрос имеет тип POST)
· отправка запроса и ожидание ответа от сервера
· получение желаемых полей-заголовков из ответа
· получение данных ответа
· закрытие соединения


Следующий пример демонстрирует возможности соединения по HTTP:

var conn: http;
htmlBody: string;
contentType: string;
begin
if not openHttp(conn, 'http://www.google.com') then halt;
setHttpMethod(conn, GET);
addHttpHeader(conn, 'User-agent', 'MIDletPascal browser');
if sendHttpMessage(conn) <> 200 then halt;
htmlBody := getHttpResponse(conn);
contentType := getHttpHeader(conn, 'Content-type');
closeHttp(conn);
end.

Встроенный эмулятор не поддерживает соединения по HTTP. Для тестирования HTTP без телефона рекомендуется использовать эмулятор Wireless Toolkit от Sun.


Янв 01

Тип recordStore
Хранилище на мобильных телефонах аналогично файлам на компьютерах: приложения могут сохранять некие данные в хранилище и впоследствии получать обратно сохранённые данные. Как и файлы, хранилища идентифицируются по имени. Их нельзя группировать внутри каталогово и каждый установленный мидлет имеет доступ только к своим собственным хранилищам. В отличии от файлов, где данные сохраняются последовательно, хранилище больше напоминает массив, где каждая запись имеет свой собственный индекс.

var rs: recordStore;
index: integer;
name: string;
begin
// Записываем некие данные в хранилище
rs := openRecordStore('names');
index := addRecordStoreEntry(rs, 'John Smith');
closeRecordStore(rs);

// Считываем данные
rs := openRecordStore('names');
name := readRecordStoreEntry(rs, index);
closeRecordStore(rs);
end.

См. также:
openRecordStore, closeRecordStore, deleteRecordStore, addRecordStoreEntry, readRecordStoreEntry, deleteRecordStoreEntry, getRecordStoreSize