Выбрать главу

Команда return приводит к немедленному выходу из подпрограммы. Если подпрограмма является функцией или типом, в команде должна быть предусмотрена выдаваемая такой подпрограммой величина. То есть,

return

return {50, "FRED", {}}

2.5.7 команда exit (выйти)

Команда exit может использоваться в цикле while или в цикле for. Она вызывает немедленное прерывание цикла с передачей управления первой команде, следующей после тела цикла. То есть,

for i = 1 to 100 do

if a[i] = x then

location = i

exit

end if

end for

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

constant TRUE = 1

while TRUE do

...

if some_condition then

exit

end if

...

end while

То есть, это "бесконечный" цикл while, который прерывается командой exit в некоторой характерной точке в теле цикла.

Примечания о производительности: В Euphoria этот бесконечный тип цикла оптимизирован. Во время прогона программы никакие повторные проверки истинности выражения в команде while уже не выполняются, а совершается простой безусловный переход от end while обратно к первой команде внутри тела цикла. Если вам случится попасть в настоящий бесконечный цикл с интерпретатором ex.exe, когда не выполняются операции ввода/вывода, знайте, что простого пути остановить этот цикл не существует. Вы должны будете одновременно нажать клавиши Control-Alt-Delete, чтобы перезагрузиться под DOS, или прервать свой сеанс DOS под Windows. Если программа имела файлы, открытые на запись, будет полезно после перезагрузки запустить scandisk, чтобы проверить исправность своей файловой системы. Только если ваша программа ожидает ввода с клавиатуры, комбинация Control-c может прервать её исполнение (если вами не была выдана команда allow_break(0)).

С интерпретаторами exw.exe или exu комбинация control-c всегда работает и немедленно прервёт вашу программу, если у вас есть в этом необходимость.

2.6 Специальные команды высшего уровня

Перед тем, как исполнять любую из ваших команд, интерфейсный блок интерпретатора Euphoria быстро читает всю вашу программу полностью от начала и до конца. Все ваши команды проверяются синтаксически и преобразуются в низкоуровневый код на промежуточном языке (IL). Затем исполнительный блок интерпретатора немедленно приступает к исполнению кода IL, размещённого в оперативной памяти. Биндер/шроудер записывает код IL в файл .il на диск для последующих немедленных исполнений с отдельным исполнительным блоком. Транслятор преобразует код IL в код C и записывает программу C на диск. Во всех этих трёх методах преобразования текста исходного кода Euphoria используется один и тот же интерфейсный блок (написанный на Euphoria).

Если ваша программа содержит только объявления подпрограмм и переменных, но не имеет команд высшего уровня, то после её запуска не произойдёт ровно ничего (кроме, конечно, проверки синтаксиса и формирования кода IL). Поэтому в вашей программе должна быть хотя бы одна команда высшего уровня, например, вызывающая вашу главную подпрограмму на исполнение (см. 1.1 Пример программы). Возможны программы, в которых нет ничего, кроме исполняемых команд высшего уровня, без каких бы то ни было подпрограмм. Например, вы можете использовать Euphoria как простой калькулятор, записав просто несколько команд print() (или ?) с выражениями в файл, и затем исполняя его.

Как мы уже видели, на высшем уровне вы можете использовать почти любую команду Euphoria, включая циклы for, циклы while, команды if и так далее (но не return). Высший уровень - это уровень вашего главного файла на тех участках его текста, которые не относятся к определению подпрограмм, то есть вне тела любых ваших функций или процедур. Но имеется несколько специальных команд, которые могут появиться в вашей программе только на высшем уровне, это:

* include

* with / without

2.6.1 include (учесть, включить)

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

include filename По этой команде считывается (компилируется) необходимый вам файл исходного кода Euphoria, имеющий некоторое имя filename. Несколько примеров:

include graphics.e

include \mylib\myroutines.e

* Любой код, расположенный на высшем уровне включаемого файла, будет исполнен. Любые глобальные (global) имена, которые уже были объявлены и определены в вашем главном файле перед включением, будут видны и во включенном файле. Примечание: Но только те из имён, которые объявлены и определены во включаемом файле с ключевым словом global, будут видны и доступны в той части программы, которая следует за командой include. Если задано абсолютное имя файла filename, Euphoria просто откроет файл и начнёт в нём проверку правописания кода. Если задано относительное имя файла filename, Euphoria будет пытаться найти и открыть файл относительно следующих каталогов (директорий) в следующем порядке: Каталог, содержащий текущий файл исходного кода, т.е. файл, который содержит отрабатываемую в данный момент команду include ...

* Каталог, содержащий главный файл, заданный в командной строке интерпретатора, транслятора или биндера (шроудера) ...

Если вы задали на своей машине переменную окружения EUINC, Euphoria будет проверять каждый из каталогов, перечисленных в EUINC (слева направо). Переменная EUINC должна задавать список каталогов, отделённых один от другого точкой с запятой (двоеточием на Linux/FreeBSD), подобно тому, как это делается для переменной PATH. Переменная EUINC может быть добавлена в набор переменных окружения вашей операционной системы Linux/FreeBSD или DOS/Windows. (Через Control Panel/Performance & Maintenance/System/Advanced на XP, или AUTOEXEC.BAT на более старых версиях Windows), то есть,

SET EUINC=C:\EU\MYFILES;C:\EU\WIN32LIB

* Переменная EUINC позволяет вам организовать свою систему библиотек Euphoria в соответствии с потребностями конкретных программных проектов, не забивая многочисленными нестандартными библиотеками официальный каталог euphoria\include.

* И, наконец, если заданный в команде include файл всё ещё не найден, Euphoria проверит каталог euphoria\include. Этот каталог содержит стандартные официальные включаемые файлы (библиотеки) Euphoria. Переменная окружения EUDIR подскажет Euphoria, где искать (и под каким именем вы назначили) главный каталог, содержащий систему Euphoria, на ваших дисках (это может быть, если вы хотите, не euphoria, а eu или RDS_EU, или ещё какой-то каталог, который вам более удобен).

Включаемый файл может в свою очередь также включать другие файлы. Фактически вы можете использовать до 30 последовательных уровней "вложения" включаемых файлов. Включаемый файл обычно имеет расширение .e, но иногда это может быть .ew или .eu (когда файл предназначен именно для платформы Windows или Linux/FreeBSD). Так просто принято, но это не обязательное требование. Если filename (или путь) содержат в имени символы пробела, вы должны заключить filename в двойные кавычки. В других случаях кавычки необязательны. Не забывайте сдваивать косую черту. Например: