вторник, 4 августа 2015 г.

Коротко. Сделал контроль типов для элементов массивов

По мотивам - ToDo. Написать про массивы, списки и итераторы

Коротко. Сделал контроль типов для элементов массивов.

Примерно так:

ARRAY VAR A
ARRAY OF STRING VAR B
A := [ 1 2 3 'hello' ] // - компилируется
B := [ 1 2 3 'hello' ] // - не компилируется

Ну и определение типа:

ARRAY VAR A
ARRAY OF STRING TYPE StringArray // - это "алиас" к ARRAY OF STRING
StringArray VAR B
A := [ 1 2 3 'hello' ] // - компилируется
B := [ 1 2 3 'hello' ] // - не компилируется

Более сложный вариант:

STRING FUNCTION X
 Result := 'hello'
;

ARRAY VAR A
ARRAY OF STRING TYPE StringArray // - это "алиас" к ARRAY OF STRING
StringArray VAR B
A := [ 1 2 3 X ] // - компилируется
B := [ 1 2 3 X ] // - компилируется, но получаем Run-Time ошибку

Со ссылкой на функцию:

STRING FUNCTION X
 Result := 'hello'
;

ARRAY VAR A
ARRAY OF STRING TYPE StringArray // - это "алиас" к ARRAY OF STRING
StringArray VAR B
A := [ 1 2 3 @ X ] // - компилируется
B := [ 1 2 3 @ X ] // - не компилируется

Понятное дело, что дальше буду делать "вывод типов" и уменьшать количество Run-time ошибок в пользу Compile-time.

Ну и ещё пример:

ARRAY VAR A
ARRAY OF STRING TYPE StringArray // - это "алиас" к ARRAY OF STRING
ARRAY OF INTEGER TYPE IntegerArray // - это "алиас" к ARRAY OF INTEGER
StringArray VAR B
IntegerArray VAR C
A := [ 1 2 3 'hello' ] // - компилируется
B := [ 1 2 3 'hello' ] // - не компилируется
C := [ 1 2 3 'hello' ] // - не компилируется

StringArray VAR B1
IntegerArray VAR C1
B1 := [ '1' '2' '3' 'hello' ] // - компилируется
C1 := [ 1 2 3 4 ] // - компилируется

Ну и понятно, что бывают ARRAY OF ARRAY OF X:

ARRAY OF ARRAY OF STRING VAR A
A := [ [ 'a' 'b' ] [ 'c' 'd' ] ] // - компилируется
A := [ [ 'a' 'b' ] [ 'c' 3 ] ] // - не компилируется

Ну и аналогично для Run-time:

INTEGER FUNCTION X
 Result := 3
;

ARRAY OF ARRAY OF STRING VAR A
A := [ [ 'a' 'b' ] [ 'c' 'd' ] ] // - компилируется
A := [ [ 'a' 'b' ] [ 'c' 'd' ] [ 'e' ] ] // - компилируется, т.е. размерность - не важна
A := [ [ 'a' 'b' ] [ 'c' X ] ] // - компилируется, но получаем Run-Time ошибку

Ну и учитывая - Коротко. Сделал описание части аксиоматики на Dephi, а части - на скриптах  - я теперь могу часть кода писать на Delphi, а часть на скриптах и всё интегрируется в EXE-файл.

Теперь можно и на Delphi7 использовать лямбды, итераторы и прочие "вкусности".

Комментариев нет:

Отправить комментарий