Объектно-ориентированное программирование.Язык Смолток

         

Оператор блока


Оператор блока

Блок (block) - это, формально говоря, описание отложенной последовательности действий. Иными словами, блок-сообщение – это группа сообщений, заключенная в квадратные скобки. Блок – объект специального вида (экземпляр класса Context (Контекст)), вычисление которого (т.е. выполнение списка внутренних операторов) производится путем посылки к нему сообщения - value (значение). Если оператор блока находится внутри программы, то создается автоматически экземпляр класса Context, и в нем накапливается вся необходимая информация для работы блока, однако оценка содержимого оператора блока при этом не выполняется. Чтобы она выполнялась, экземпляру класса Context и посылается сообщение value.

Например:

| x |

x := [ 'строка' inPos: 5 ]

^x. -- результат - экзКонтекст

Заменив последнюю строку на: ^x value, получим результат "к".

Блок может иметь аргументы. В этом случае сообщение для его вычисления будет ключевым:

[ :<аргумент>| <сообщения> ] value: <значение аргумента>

Например:

^[:i | i+5] value: 5                   -- 10

^[:i :j| i*j ] value:5 value: 3     -- 15

Аргументы блока описываются в начале блока (а не в начале программы как все остальные переменные). Символ '|' в данном случае - это символ окончания декларации параметров блока.

Например:

[ :i :j | i + j ]

i , j - параметры блока

| - символ окончания декларации параметров

i + j - "тело" блока

Аргумент блока (block argument) - это параметр, поставляемый при выполнении конкретного блока.

Например:

[:i | i+5 ] value:15 -- i - аргумент блока, принимающий значение 15



Содержание раздела