Эйфория — Обзор
Euphoria расшифровывается как программирование E- U- ser ser с иерархическими объектами для R- непонятных приложений A. Первое воплощение Euphoria было создано Робертом Крейгом на Atari Mega-ST и впервые было выпущено в 1993 году. В настоящее время оно поддерживается Rapid Deployment Software.
Это бесплатный, простой, гибкий, простой в освоении и интерпретации, но чрезвычайно быстрый 32-битный язык программирования высокого уровня для DOS, Windows, Linux, FreeBSD и многих других.
Euphoria используется для разработки программ с графическим интерфейсом Windows, высокоскоростных игр для DOS и программ для Linux / FreeBSD X Windows. Euphoria также может быть использована для программирования CGI (Web-based).
Эйфория Особенности
Вот список основных особенностей Euphoria —
-
Это простое, гибкое, мощное определение языка, которое легко выучить и использовать.
-
Он поддерживает динамическое распределение памяти, что означает, что переменные растут или уменьшаются, и программисту не нужно беспокоиться о выделении и освобождении памяти. Он заботится о сборке мусора автоматически.
-
Это чрезвычайно быстро, чем обычные интерпретаторы, такие как Perl и Python.
-
Программы Euphoria работают под Linux, FreeBSD, 32-битной Windows и любой средой DOS.
-
Программы Euphoria не подлежат ограничениям памяти 640K.
-
Он предоставляет оптимизирующий переводчик Euphoria-To-C, который вы можете использовать для перевода вашей программы Euphoria в C, а затем скомпилировать ее с помощью компилятора C, чтобы получить исполняемый файл (.exe). Это может увеличить скорость вашей программы в 2-5 раз.
-
Базовое оборудование полностью скрыто, что означает, что программы не знают о длине слова, представлении значений на уровне битов, порядке байтов и т. Д.
-
Установка Euphoria поставляется с полноэкранным отладчиком исходного кода, профилировщиком выполнения и полноэкранным многофайловым редактором.
-
Он поддерживает обработку ошибок во время выполнения, индекс и проверку типов.
-
Это язык с открытым исходным кодом и поставляется совершенно бесплатно.
Это простое, гибкое, мощное определение языка, которое легко выучить и использовать.
Он поддерживает динамическое распределение памяти, что означает, что переменные растут или уменьшаются, и программисту не нужно беспокоиться о выделении и освобождении памяти. Он заботится о сборке мусора автоматически.
Это чрезвычайно быстро, чем обычные интерпретаторы, такие как Perl и Python.
Программы Euphoria работают под Linux, FreeBSD, 32-битной Windows и любой средой DOS.
Программы Euphoria не подлежат ограничениям памяти 640K.
Он предоставляет оптимизирующий переводчик Euphoria-To-C, который вы можете использовать для перевода вашей программы Euphoria в C, а затем скомпилировать ее с помощью компилятора C, чтобы получить исполняемый файл (.exe). Это может увеличить скорость вашей программы в 2-5 раз.
Базовое оборудование полностью скрыто, что означает, что программы не знают о длине слова, представлении значений на уровне битов, порядке байтов и т. Д.
Установка Euphoria поставляется с полноэкранным отладчиком исходного кода, профилировщиком выполнения и полноэкранным многофайловым редактором.
Он поддерживает обработку ошибок во время выполнения, индекс и проверку типов.
Это язык с открытым исходным кодом и поставляется совершенно бесплатно.
Требования к платформе
Euphoria доступна для Windows, Linux, FreeBSD и OSX. Вот минимальная версия, необходимая для следующих платформ:
-
Версия WIN32 — Вам нужна Windows 95 или более поздняя версия Windows. Отлично работает на XP и Vista.
-
Версия для Linux — Вам нужен достаточно свежий дистрибутив Linux с libc6 или более поздней версией. Например, Red Hat 5.2 или более поздняя версия работает нормально.
-
Версия FreeBSD — вам нужен достаточно свежий дистрибутив FreeBSD.
-
Версия для Mac OS X. Вам нужен достаточно современный Mac на базе Intel.
Версия WIN32 — Вам нужна Windows 95 или более поздняя версия Windows. Отлично работает на XP и Vista.
Версия для Linux — Вам нужен достаточно свежий дистрибутив Linux с libc6 или более поздней версией. Например, Red Hat 5.2 или более поздняя версия работает нормально.
Версия FreeBSD — вам нужен достаточно свежий дистрибутив FreeBSD.
Версия для Mac OS X. Вам нужен достаточно современный Mac на базе Intel.
Ограничения Эйфории
Вот некоторые важные ограничения Эйфории —
-
Хотя Euphoria проста, быстра и достаточно гибка для программистов; он не обеспечивает поддержку вызовов для многих важных функций. Например, сетевое программирование.
-
Euphoria была изобретена в 1993 году, и до сих пор вы не найдете ни одной книги, написанной на этом языке. Существует также не так много документации, доступной для языка.
Хотя Euphoria проста, быстра и достаточно гибка для программистов; он не обеспечивает поддержку вызовов для многих важных функций. Например, сетевое программирование.
Euphoria была изобретена в 1993 году, и до сих пор вы не найдете ни одной книги, написанной на этом языке. Существует также не так много документации, доступной для языка.
Но в наши дни язык очень быстро набирает популярность, и вы можете надеяться, что очень скоро появятся хорошие утилиты и книги для этого языка.
Euphoria Licensing
Этот продукт является бесплатным и с открытым исходным кодом, и получил пользу от вкладов многих людей. У вас есть полные бесплатные лицензионные права на распространение любых программ Euphoria, которые вы разрабатываете.
Файлы значков, такие как euphoria.ico и двоичные файлы, доступные в euphoria \ bin, могут распространяться с вашими изменениями или без них.
Вы можете окутывать или связывать свою программу и распространять полученные файлы без лицензионных платежей. При использовании переводчика Euphoria-To-C могут применяться некоторые дополнительные юридические ограничения третьих лиц.
Щедрая лицензия с открытым исходным кодом позволяет Euphoria использовать как в личных, так и в коммерческих целях. В отличие от многих других лицензий с открытым исходным кодом, ваши изменения не должны быть сделаны с открытым исходным кодом.
Эйфория — Окружающая среда
В этой главе рассказывается об установке Euphoria на различных платформах. Вы можете выполнить шаги по установке Euphoria в Linux, FreeBSD и 32-битной Windows. Таким образом, вы можете выбрать шаги в зависимости от вашей рабочей среды.
Linux, бесплатная установка BSD
Официальный сайт предоставляет файл .tar.gz для установки Euphoria на вашу ОС Linux или BSD. Вы можете скачать последнюю версию Euphoria со своего официального сайта — Download Euphoria .
Если у вас есть файл .tar.gz, вот три простых шага, которые необходимо выполнить для установки Euphoria на ваш компьютер с Linux или Free BSD:
Шаг 1 — Установка файлов
Распакуйте загруженный файл euphoria-4.0b2.tar.gz в каталог, в который вы хотите установить Euphoria. Если вы хотите установить его в каталог / home следующим образом, то —
$cp euphoria-4.0b2.tar.gz /home $cd /home $gunzip euphoria-4.0b2.tar.gz $tar -xvf euphoria-4.0b2.tar
Это создает иерархию каталогов внутри каталога /home/euphoria-4.0b2 следующим образом:
$ls -l -rw-r--r-- 1 1001 1001 2485 Aug 17 06:15 Jamfile -rw-r--r-- 1 1001 1001 5172 Aug 20 12:37 Jamrules -rw-r--r-- 1 1001 1001 1185 Aug 13 06:21 License.txt drwxr-xr-x 2 1001 1001 4096 Aug 31 10:07 bin drwxr-xr-x 7 1001 1001 4096 Aug 31 10:07 demo -rw-r--r-- 1 1001 1001 366 Mar 18 09:02 file_id.diz drwxr-xr-x 4 1001 1001 4096 Aug 31 10:07 include -rw-r--r-- 1 1001 1001 1161 Mar 18 09:02 installu.doc drwxr-xr-x 4 1001 1001 4096 Aug 31 10:07 source drwxr-xr-x 19 1001 1001 4096 Sep 7 12:09 tests drwxr-xr-x 2 1001 1001 4096 Aug 31 10:07 tutorial
ПРИМЕЧАНИЕ. — Имя файла euphoria-4.0b2.tar.gz зависит от последней доступной версии. Мы используем версию языка 4.0b2 для этого урока.
Шаг 2 — Настройка пути
После установки Euphoria вам необходимо установить правильные пути, чтобы ваша оболочка могла найти необходимые двоичные файлы и утилиты Euphoria. Прежде чем продолжить, необходимо установить следующие три важные переменные среды:
-
Установите переменную среды PATH в каталог /home/euphoria-4.0b2/bin.
-
Задайте для переменной среды EUDIR значение /home/euphoria-4.0b2.
-
Задайте для переменной среды EUINC значение /home/euphoria-4.0b2/include.
Установите переменную среды PATH в каталог /home/euphoria-4.0b2/bin.
Задайте для переменной среды EUDIR значение /home/euphoria-4.0b2.
Задайте для переменной среды EUINC значение /home/euphoria-4.0b2/include.
Эти переменные могут быть установлены следующим образом —
$export PATH=$PATH:/home/euphoria-4.0b2/bin $export EUDIR=/home/euphoria-4.0b2 $export EUINC=/home/euphoria-4.0b2/include
ПРИМЕЧАНИЕ. — Приведенные выше команды, используемые для установки переменных среды, могут различаться в зависимости от вашей оболочки. Мы использовали оболочку bash для выполнения этих команд для установки переменных.
Шаг 3 — Подтверждение установки
Убедитесь, что вы успешно установили Euphoria или нет.
Выполните следующую команду —
$eui -version
Если вы получаете следующий результат, значит, вы успешно установили Euphoria; в противном случае вы должны вернуться и проверить все шаги снова.
$eui -version Euphoria Interpreter 4.0.0 beta 2 (r2670) for Linux Using System Memory $
Вот и все, Euphoria Programming Environment готова на вашем компьютере с UNIX, и вы можете начать писать сложные программы в несколько простых шагов.
Установка WIN32 и DOS
Официальный сайт предоставляет файл .exe для установки Euphoria на вашу ОС WIN32 или DOS. Вы можете скачать последнюю версию Euphoria со своего официального сайта — Download Euphoria .
Если у вас есть файл .exe, выполните три простых шага для установки языка программирования Euphoria на компьютер с ОС WIN32 или DOS.
Шаг 1 — Установка файлов
Дважды щелкните загруженную программу установки .exe, чтобы установить все файлы. Мы загрузили файл euphoria-40b2.exe для установки.
Имя файла euphoria-40b2.exe зависит от последней доступной версии. Мы используем версию 4 бета 2 языка.
По умолчанию Euphoria будет установлена в каталог C: \ euphoria-40b2, но вы также можете выбрать желаемое местоположение.
Шаг 2 — Перезагрузка машины
Перезагрузите компьютер, чтобы завершить установку.
Шаг 3 — Подтверждение установки
Убедитесь, что вы успешно установили Euphoria или нет.
Выполните следующую команду —
c:\>eui -version
Если вы получаете следующий результат, значит, вы успешно установили Euphoria; в противном случае вы должны вернуться и проверить все шаги снова.
c:\>eui -version Euphoria Interpreter 4.0.0 beta 2 (r2670) for Windows Using Managed Memory c:\>
Вот и все, среда программирования Euphoria готова на вашем компьютере с WIN32, и вы можете приступить к написанию сложных программ в несколько простых шагов.
Эйфория Переводчики
В зависимости от платформы, которую вы используете, Euphoria имеет несколько переводчиков —
-
Основной переводчик — EUI .
-
На платформах Windows у вас есть два варианта. Если вы запускаете eui, то создается консольное окно. Если вы запускаете euiw, то консоль не создается, что делает ее пригодной для приложений с графическим интерфейсом.
-
Euphoria не заботится о вашем выборе расширений файлов. По соглашению однако; консольные приложения имеют расширение .ex .
-
Приложения на основе графического интерфейса имеют расширение .exw, а включаемые файлы имеют расширение .e .
Основной переводчик — EUI .
На платформах Windows у вас есть два варианта. Если вы запускаете eui, то создается консольное окно. Если вы запускаете euiw, то консоль не создается, что делает ее пригодной для приложений с графическим интерфейсом.
Euphoria не заботится о вашем выборе расширений файлов. По соглашению однако; консольные приложения имеют расширение .ex .
Приложения на основе графического интерфейса имеют расширение .exw, а включаемые файлы имеют расширение .e .
Эйфория — основной синтаксис
Язык Euphoria имеет много общего с Perl, C и Java. Однако между языками есть определенные различия. Эта глава предназначена для быстрого ознакомления с синтаксисом, который ожидается в Euphoria.
В этом руководстве предполагается, что вы работаете с Linux, и все примеры написаны на платформе Linux. Но следует заметить, что нет заметного различия в синтаксисе программ в Linux и WIN32. Следовательно, вы можете выполнить те же действия на WIN32.
Первая программа Euphoria
Давайте напишем простую программу Euphoria в сценарии. Введите следующий исходный код в файл test.ex и сохраните его.
#!/home/euphoria-4.0b2/bin/eui puts(1, "Hello, Euphoria!\n")
Допустим, интерпретатор Euphoria доступен в каталоге /home/euphoria-4.0b2/bin/ . Теперь запустите эту программу следующим образом —
$ chmod +x test.ex # This is to make file executable $ ./test.ex
Это дает следующий результат —
Hello, Euphoria!
В этом скрипте используется встроенная функция put (), которая принимает два аргумента. Первый аргумент указывает имя файла или номер устройства, а второй аргумент указывает строку, которую вы хотите напечатать. Здесь 1 обозначает устройство STDOUT.
Euphoria Identifiers
Идентификатор Euphoria — это имя, используемое для идентификации переменной, функции, класса, модуля или другого объекта. Идентификатор начинается с буквы от А до Я или от А до Я, а затем следуют буквы, цифры или символы подчеркивания.
Euphoria не допускает использование знаков препинания, таких как @, $ и% в идентификаторах.
Euphoria — это чувствительный к регистру язык программирования. Таким образом, рабочая сила и рабочая сила — два разных идентификатора в Euphoria. Например, действительными идентификаторами являются —
- N
- color26
- ShellSort
- быстрая_сортировка
- a_very_long_indentifier
Зарезервированные слова
Следующий список показывает зарезервированные слова в Euphoria. Эти зарезервированные слова не могут использоваться как константы или переменные или любые другие имена идентификаторов. Ключевые слова Euphoria содержат только строчные буквы.
а также | выход | переопределение |
как | экспорт | процедура |
перерыв | fallthru | общественности |
от | за | повторить попытку |
дело | функция | вернуть |
постоянная | Глобальный | рутинный |
Продолжить | идти к | переключатель |
делать | если | затем |
еще | IFDEF | в |
elsedef | включают | тип |
ELSIF | этикетка | до тех пор |
elsifdef | петля | в то время как |
конец | Пространство имен | с |
запись | не | без |
перечисление | или же | исключающее |
Выражения
Euphoria позволяет вычислять результаты, формируя выражения. Однако в Euphoria вы можете выполнять вычисления для целых последовательностей данных с одним выражением.
Вы можете обрабатывать последовательность так же, как и одно число. Его можно скопировать, передать в подпрограмму или рассчитать как единое целое. Например —
{1,2,3} + 5
Это выражение, которое добавляет последовательность {1, 2, 3} и атом 5, чтобы получить результирующую последовательность {6, 7, 8}. Вы изучите последовательности в следующих главах.
Блоки кода
При изучении Euphoria одним из первых, с которым сталкиваются программисты, является тот факт, что нет фигурных скобок для обозначения блоков кода для определений процедур и функций или управления потоком. Блоки кода обозначаются связанными ключевыми словами.
В следующем примере показано, если … то … конец, если блок —
if condition then code block comes here end if
Многострочные операторы
Заявления в Euphoria обычно заканчиваются новой строкой. Euphoria, однако, позволяет писать одно утверждение в несколько строк. Например —
total = item_one + item_two + item_three
Побег персонажей
Экранирующие символы можно вводить с помощью обратной косой черты. Например —
В следующей таблице приведен список escape-или непечатаемых символов, которые могут быть представлены в виде обратной косой черты.
Обратная косая черта | Описание |
---|---|
\ п | Новая линия |
\р | Возврат каретки |
\ т | табуляция |
\\ | бэкслэш |
\» | Двойная цитата |
\» | Одинарные цитаты |
Комментарии в Euphoria
Любые комментарии игнорируются компилятором и не влияют на скорость выполнения. Желательно использовать больше комментариев в вашей программе, чтобы сделать ее более читабельной.
Есть три формы текста комментария —
-
Комментарии начинаются с двух тире и продолжаются до конца текущей строки.
-
Комментарий в многострочном формате хранится внутри /*…*/, даже если это происходит в другой строке.
-
Вы можете использовать специальный комментарий, начинающийся с двухсимвольной последовательности «#!» Только в первой строке программы.
Комментарии начинаются с двух тире и продолжаются до конца текущей строки.
Комментарий в многострочном формате хранится внутри /*…*/, даже если это происходит в другой строке.
Вы можете использовать специальный комментарий, начинающийся с двухсимвольной последовательности «#!» Только в первой строке программы.
Примеры
#!/home/euphoria-4.0b2/bin/eui -- First comment puts(1, "Hello, Euphoria!\n") -- second comment /* This is a comment which extends over a number of text lines and has no impact on the program */
Это дает следующий результат —
Hello, Euphoria!
Примечание. Вы можете использовать специальный комментарий, начинающийся с «#!». Это сообщает оболочке Linux, что ваш файл должен быть выполнен интерпретатором Euphoria.
Эйфория — Переменные
Переменные — это не что иное, как зарезервированные области памяти для хранения значений. Это означает, что когда вы создаете переменную, вы резервируете некоторое пространство в памяти.
На основе типа данных переменной интерпретатор выделяет память и решает, что можно сохранить в зарезервированной памяти. Поэтому, назначая переменным разные типы данных, вы можете хранить целые, десятичные или символы в этих переменных. Типы данных Euphoria описаны в другой главе.
Эти ячейки памяти называются переменными, потому что их значение может быть изменено в течение срока их службы.
Объявление переменной
Переменные Euphoria должны быть явно объявлены, чтобы зарезервировать пространство памяти. Таким образом, объявление переменной является обязательным, прежде чем присваивать значение переменной.
Объявления переменных имеют имя типа, за которым следует список объявляемых переменных. Например —
integer x, y, z sequence a, b, x
Когда вы объявляете переменную, вы называете переменную и определяете, какие значения могут быть юридически назначены переменной во время выполнения вашей программы.
Простой акт объявления переменной не присваивает ей никакого значения. Если вы попытаетесь прочитать его перед присвоением ему какого-либо значения, Euphoria выдаст ошибку времени выполнения, поскольку «переменной xyz никогда не назначалось значение» .
Присвоение значений
Знак равенства (=) используется для присвоения значений переменным. Переменная может быть назначена следующим образом —
Variable_Name = Variable_Value
Например —
#!/home/euphoria/bin/eui -- Here is the declaration of the variables. integer counter integer miles sequence name counter = 100 -- An integer assignment miles = 1000.0 -- A floating point name = "John" -- A string ( sequence ) printf(1, "Value of counter %d\n", counter ) printf(1, "Value of miles %f\n", miles ) printf(1, "Value of name %s\n", {name} )
Здесь 100, 1000.0 и «Джон» — это значения, присвоенные счетчику , милям и именным переменным соответственно. Эта программа дает следующий результат —
Value of counter 100 Value of miles 1000.000000 Value of name John
Чтобы не забыть инициализировать переменную, а также потому, что это может сделать код более понятным для чтения, вы можете объединить объявление и присваивание —
integer n = 5
Это эквивалентно следующему —
integer n n = 5
Область идентификатора
Область действия идентификатора — это описание того, какой код может получить к нему доступ. Код в той же области видимости идентификатора может получить доступ к этому идентификатору, а код не в той же области, что и идентификатор, не может получить к нему доступ.
Область действия переменной зависит от того, где и как она объявлена.
-
Если он объявлен внутри цикла for, while или switch , его область начинается с объявления и заканчивается соответствующим оператором end .
-
В операторе if область начинается с объявления и заканчивается следующим оператором: elsif или end if .
-
Если переменная объявлена внутри подпрограммы, область действия переменной начинается с объявления и заканчивается в операторе завершения подпрограммы. Это известно как частная переменная.
-
Если переменная объявлена вне подпрограммы, ее область начинается с объявления и заканчивается, и конец файла, в котором она объявлена. Это называется переменной модуля.
-
Область действия константы , которая не имеет модификатора области, начинается с объявления и заканчивается и заканчивается в файле, в котором она объявлена.
-
Область действия перечисления , у которого нет модификатора области, начинается с объявления и заканчивается и заканчивается в файле, в котором оно объявлено.
-
Область действия всех процедур, функций и типов , которые не имеют модификатора области, начинается в начале исходного файла и заканчивается в конце исходного файла, в котором они объявлены.
Если он объявлен внутри цикла for, while или switch , его область начинается с объявления и заканчивается соответствующим оператором end .
В операторе if область начинается с объявления и заканчивается следующим оператором: elsif или end if .
Если переменная объявлена внутри подпрограммы, область действия переменной начинается с объявления и заканчивается в операторе завершения подпрограммы. Это известно как частная переменная.
Если переменная объявлена вне подпрограммы, ее область начинается с объявления и заканчивается, и конец файла, в котором она объявлена. Это называется переменной модуля.
Область действия константы , которая не имеет модификатора области, начинается с объявления и заканчивается и заканчивается в файле, в котором она объявлена.
Область действия перечисления , у которого нет модификатора области, начинается с объявления и заканчивается и заканчивается в файле, в котором оно объявлено.
Область действия всех процедур, функций и типов , которые не имеют модификатора области, начинается в начале исходного файла и заканчивается в конце исходного файла, в котором они объявлены.
Константы, перечисления, переменные модуля, процедуры, функции и типы, которые не имеют модификатора области, называются локальными . Однако эти идентификаторы могут иметь модификатор области действия, предшествующий их объявлению, что приводит к тому, что их область действия выходит за пределы файла, в котором они объявлены.
-
Если ключевое слово global предшествует объявлению, область действия этих идентификаторов распространяется на все приложение. Доступ к ним можно получить с помощью кода в любом месте файлов приложения.
-
Если ключевое слово public предшествует объявлению, область действия распространяется на любой файл, который явно включает файл, в котором объявлен идентификатор, или на любой файл, который включает в себя файл, который, в свою очередь, содержит файл, содержащий публичное объявление.
-
Если ключевое слово export предшествует объявлению, область действия распространяется только на любой файл, который непосредственно включает файл, в котором объявлен идентификатор.
Если ключевое слово global предшествует объявлению, область действия этих идентификаторов распространяется на все приложение. Доступ к ним можно получить с помощью кода в любом месте файлов приложения.
Если ключевое слово public предшествует объявлению, область действия распространяется на любой файл, который явно включает файл, в котором объявлен идентификатор, или на любой файл, который включает в себя файл, который, в свою очередь, содержит файл, содержащий публичное объявление.
Если ключевое слово export предшествует объявлению, область действия распространяется только на любой файл, который непосредственно включает файл, в котором объявлен идентификатор.
Когда вы включаете файл Euphoria в другой файл, для файла, выполняющего включение, доступны только идентификаторы, объявленные с использованием модификатора области. Другие объявления во включаемом файле невидимы для файла, выполняющего включение .
Эйфория — Константы
Константы также являются переменными, которым присваивается начальное значение, которое никогда не может измениться в жизни программы. Euphoria позволяет определять константы, используя ключевое слово константы следующим образом:
constant MAX = 100 constant Upper = MAX - 10, Lower = 5 constant name_list = {"Fred", "George", "Larry"}
Результат любого выражения может быть присвоен константе, даже той, которая включает вызовы ранее определенных функций, но после того, как присвоение выполнено, значение константной переменной «заблокировано».
Константы не могут быть объявлены внутри подпрограммы. Область действия константы , которая не имеет модификатора области, начинается с объявления и заканчивается и заканчивается в файле, в котором она объявлена.
Примеры
#!/home/euphoria-4.0b2/bin/eui constant MAX = 100 constant Upper = MAX - 10, Lower = 5 printf(1, "Value of MAX %d\n", MAX ) printf(1, "Value of Upper %d\n", Upper ) printf(1, "Value of Lower %d\n", Lower ) MAX = MAX + 1 printf(1, "Value of MAX %d\n", MAX )
Это приводит к следующей ошибке —
./test.ex:10 <0110>:: may not change the value of a constant MAX = MAX + 1 ^ Press Enter
Если вы удалите две последние строки из примера, то это даст следующий результат —
Value of MAX 100 Value of Upper 90 Value of Lower 5
Перечисления
Перечисляемое значение — это особый тип константы, в котором первое значение по умолчанию равно номеру 1, а каждый элемент увеличивается на 1. Перечисления могут принимать только числовые значения.
Перечисления не могут быть объявлены внутри подпрограммы. Область действия перечисления , у которого нет модификатора области, начинается с объявления и заканчивается и заканчивается в файле, в котором оно объявлено.
Примеры
#!/home/euphoria-4.0b2/bin/eui enum ONE, TWO, THREE, FOUR printf(1, "Value of ONE %d\n", ONE ) printf(1, "Value of TWO %d\n", TWO ) printf(1, "Value of THREE %d\n", THREE ) printf(1, "Value of FOUR %d\n", FOUR )
Это даст следующий результат —
Value of ONE 1 Value of TWO 2 Value of THREE 3 Value of FOUR 4
Вы можете изменить значение любого элемента, присвоив ему числовое значение. Последующие значения всегда являются предыдущим значением плюс один, если только им тоже не назначено значение по умолчанию.
#!/home/euphoria-4.0b2/bin/eui enum ONE, TWO, THREE, ABC=10, XYZ printf(1, "Value of ONE %d\n", ONE ) printf(1, "Value of TWO %d\n", TWO ) printf(1, "Value of THREE %d\n", THREE ) printf(1, "Value of ABC %d\n", ABC ) printf(1, "Value of XYZ %d\n", XYZ )
Это дает следующий результат —
Value of ONE 1 Value of TWO 2 Value of THREE 3 Value of ABC 10 Value of XYZ 11
Последовательности используют целочисленные индексы, но с помощью enum вы можете написать такой код:
enum X, Y sequence point = { 0,0 } point[X] = 3 point[Y] = 4
Эйфория — Типы данных
Данные, хранящиеся в памяти, могут быть разных типов. Например, возраст человека сохраняется в виде числового значения, а его или ее адрес — в виде буквенно-цифровых символов.
Euphoria имеет несколько стандартных типов, которые используются для определения возможных операций над ними и способа хранения для каждого из них.
Euphoria имеет следующие четыре стандартных типа данных —
- целое число
- атом
- последовательность
- объект
Понимание атомов и последовательностей является ключом к пониманию Эйфории.
Целые
Целочисленные типы данных Euphoria хранят числовые значения. Они объявлены и определены следующим образом:
integer var1, var2 var1 = 1 var2 = 100
Переменные, объявленные с типом integer, должны быть атомами с целочисленными значениями от -1073741824 до +1073741823 включительно. Вы можете выполнять точные вычисления с большими целочисленными значениями, примерно до 15 десятичных цифр, но объявлять их как атом, а не как целое число.
атомы
Все объекты данных в Euphoria являются атомами или последовательностями. Атом — это одно числовое значение. Атомы могут иметь любое целочисленное значение или значение с плавающей запятой двойной точности. Эйфория атомы объявлены и определены следующим образом:
atom var1, var2, var3 var1 = 1000 var2 = 198.6121324234 var3 = 'E'
Атомы могут находиться в диапазоне приблизительно от -1e300 до + 1e300 с точностью до 15 десятичных знаков. Отдельный символ — это атом, который должен вводиться в одинарных кавычках. Например, все следующие утверждения являются законными —
-- Following is equivalent to the atom 66 - the ASCII code for B char = 'B' -- Following is equivalent to the sequence {66} sentence = "B"
Последовательности
Последовательность — это набор числовых значений, к которым можно получить доступ через их индекс. Все объекты данных в Euphoria являются атомами или последовательностями.
Индекс последовательности начинается с 1, в отличие от других языков программирования, где индекс массива начинается с 0. Последовательности Euphoria объявляются и определяются следующим образом:
sequence var1, var2, var3, var4 var1 = {2, 3, 5, 7, 11, 13, 17, 19} var2 = {1, 2, {3, 3, 3}, 4, {5, {6}}} var3 = {{"zara", "ali"}, 52389, 97.25} var4 = {} -- the 0 element sequence
Строка символов — это просто последовательность символов, которые можно вводить с помощью двойных кавычек. Например, все следующие утверждения являются законными —
word = 'word' sentence = "ABCDEFG"
Строки символов могут обрабатываться и обрабатываться так же, как и любые другие последовательности. Например, приведенная выше строка полностью эквивалентна последовательности —
sentence = {65, 66, 67, 68, 69, 70, 71}
Вы узнаете больше о последовательности в Euphoria — Последовательности .
Объекты
Это супер тип данных в Euphoria, который может принимать любое значение, включая атомы, последовательности или целые числа. Объекты Euphoria объявлены и определены следующим образом:
object var1, var2, var3 var1 = {2, 3, 5, 7, 11, 13, 17, 19} var2 = 100 var3 = 'E'
Объект может иметь одно из следующих значений:
-
последовательность
-
атом
-
целое число
-
целое число, используемое в качестве номера файла
-
последовательность строк или односимвольный атом
последовательность
атом
целое число
целое число, используемое в качестве номера файла
последовательность строк или односимвольный атом
Эйфория — Операторы
Euphoria предоставляет богатый набор операторов для работы с переменными. Мы можем разделить все операторы Euphoria на следующие группы:
- Арифметические Операторы
- Операторы отношений
- Логические Операторы
- Операторы присваивания
- Разные Операторы
Арифметические операторы
Арифметические операторы используются в математических выражениях так же, как они используются в алгебре. В следующей таблице перечислены арифметические операторы. Предположим, что целочисленная переменная A содержит 10, а переменная B содержит 20, тогда —
оператор | Описание | пример |
---|---|---|
+ | Добавление — добавляет значения по обе стороны от оператора | А + Б даст 30 |
— | Вычитание — вычитает правый операнд из левого операнда | A — B даст -10 |
* | Умножение — умножает значения по обе стороны от оператора | А * Б даст 200 |
/ | Деление — делит левый операнд на правый операнд | Б / у даст 2 |
+ | Унарный плюс — это не влияет на значение переменной. | + B дает 20 |
— | Унарный минус — это создает отрицательное значение данной переменной. | -B дает -20 |
Реляционные операторы
Существуют следующие реляционные операторы, поддерживаемые языком Euphoria. Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда —
оператор | Описание | пример |
---|---|---|
знак равно | Проверяет, равны ли значения двух операндов или нет, если да, тогда условие становится истинным. | (A = B) не соответствует действительности. |
знак равно | Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. | (A! = B) верно. |
> | Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. | (A> B) не соответствует действительности. |
< | Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. | (A <B) верно. |
> = | Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. | (A> = B) не соответствует действительности. |
<= | Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. | (A <= B) верно. |
Логические операторы
В следующей таблице перечислены логические операторы. Предположим, что логические переменные A содержат 1, а переменная B содержит 0, тогда —
оператор | Описание | пример |
---|---|---|
а также | Называется логический оператор И. Если оба операнда отличны от нуля, тогда условие становится истинным. | (А и В) ложно. |
или же | Вызывается логическим оператором ИЛИ. Если любой из двух операндов не равен нулю, тогда условие становится истинным. | (А или В) это правда. |
исключающее | Вызывается логическим оператором XOR. Условие истинно, если один из них истинно, если оба операнда истинны или ложны, тогда условие становится ложным. | (A xor B) верно. |
не | Вызывается логическим оператором NOT, который отрицает результат. Используя этот оператор, true становится ложным, а false становится истинным | не (Б) верно. |
Вы также можете применить эти операторы к числам, отличным от 1 или 0. Соглашение: ноль означает ложь, а ненулевое означает истину .
Операторы присваивания
Существуют следующие операторы присваивания, поддерживаемые языком Euphoria —
оператор | Описание | пример |
---|---|---|
знак равно | Простой оператор присваивания, присваивает значения от правых операндов к левому операнду | C = A + B назначит значение A + B в C |
+ = | Добавить оператор присваивания И, он добавляет правый операнд к левому операнду и присваивает результат левому операнду | C + = A эквивалентно C = C + A |
знак равно | Вычитание И оператор присваивания, вычитает правый операнд из левого операнда и присваивает результат левому операнду | C — = A эквивалентно C = C — A |
знак равно | Оператор присваивания умножения И, умножает правый операнд на левый операнд и присваивает результат левому операнду | C * = A эквивалентно C = C * A |
знак равно | Оператор деления И присваивания, делит левый операнд на правый операнд и присваивает результат левому операнду | C / = A эквивалентно C = C / A |
знак равно | Оператор конкатенации | C & = {2} совпадает с C = {C} & {2} |
Примечание. Символ равенства «=», используемый в операторе присваивания, не является оператором, это всего лишь часть синтаксиса.
Разные операторы
Euphoria Language поддерживает несколько других операторов.
Оператор
Любые два объекта могут быть объединены с использованием оператора «&». Результатом является последовательность, длина которой равна сумме длин объединенных объектов.
Например —
#!/home/euphoria-4.0b2/bin/eui sequence a, b, c a = {1, 2, 3} b = {4} c = {1, 2, 3} & {4} printf(1, "Value of c[1] %d\n", c[1] ) printf(1, "Value of c[2] %d\n", c[2] ) printf(1, "Value of c[3] %d\n", c[3] ) printf(1, "Value of c[4] %d\n", c[4] )
Это дает следующий результат —
Value of c[1] 1 Value of c[2] 2 Value of c[3] 3 Value of c[4] 4
Приоритет операторов Euphoria
Приоритет оператора определяет группировку терминов в выражении. Это влияет на то, как оценивается выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например, оператор умножения имеет более высокий приоритет, чем оператор сложения.
Например, х = 7 + 3 * 2
Здесь x назначено 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +.
Следовательно, сначала он начинается с 3 * 2, а затем добавляется к 7.
Здесь операторы с самым высоким приоритетом появляются вверху таблицы, а операторы с самым низким — внизу. Внутри выражения операторы с более высоким приоритетом вычисляются первыми.
категория | оператор | Ассоциативность |
---|---|---|
постфикс | вызовы функций / типов | |
Одинарный | + -! не | Справа налево |
Multiplicative | * / | Слева направо |
присадка | + — | Слева направо |
конкатенация | & | Слева направо |
реляционный | >> = <<= | Слева направо |
равенство | =! = | Слева направо |
Логическое И | а также | Слева направо |
Логическое ИЛИ | или же | Слева направо |
Логический XOR | исключающее | Слева направо |
запятая | , | Слева направо |
Эйфория — Ветвление
Ветвление является наиболее важным аспектом любого языка программирования. При написании вашей программы вы можете столкнуться с ситуацией, когда вам нужно принять решение или выбрать один из предложенных вариантов.
Следующая диаграмма показывает простой сценарий, в котором программе необходимо выбрать один из двух путей в зависимости от заданного условия.
Euphoria предоставляет следующие три типа заявлений о принятии решений (ветвящихся или условных):
Давайте посмотрим на утверждения в деталях —
Эйфория — Типы петель
Цикл является еще одним наиболее важным аспектом любого языка программирования. При написании вашей программы вы можете столкнуться с ситуацией, когда вам приходится выполнять одно и то же выражение много раз, а иногда — бесконечное число раз.
Есть несколько способов указать, как долго должен продолжаться процесс, и как остановить или иным образом изменить его. Итеративный блок может быть неофициально назван циклом, и каждое выполнение кода в цикле называется итерацией цикла.
Следующая диаграмма показывает простой логический поток цикла —
Euphoria предоставляет следующие три типа операторов цикла:
Все вышеприведенные утверждения предоставляют вам гибкость и простоту использования в зависимости от различных ситуаций. Давайте рассмотрим их подробно один за другим —
Эйфория — Контроль потока
Поток выполнения программы относится к порядку выполнения операторов программы. По умолчанию операторы выполняются один за другим.
Тем не мение; Много раз порядок выполнения должен быть изменен от порядка по умолчанию, чтобы выполнить задачу.
Euphoria имеет ряд операторов управления потоком, которые вы можете использовать для упорядочения порядка выполнения операторов.
Заявление о выходе
Выход из цикла выполняется с помощью ключевого слова exit . Это приводит к тому, что поток немедленно покидает текущий цикл и возобновляет работу с первым оператором после окончания цикла.
Синтаксис
Синтаксис оператора выхода следующий:
exit [ "Label Name" ] [Number]
Оператор выхода завершает последний и самый внутренний цикл, пока не будет указано необязательное имя или номер метки.
Особой формой выхода N является выход 0 . Это оставляет все уровни петли, независимо от глубины. Управление продолжается после самого внешнего блока цикла. Аналогично, выход -1 выходит из второго внешнего цикла и т. Д.
пример
#!/home/euphoria-4.0b2/bin/eui integer b for a = 1 to 16 do printf(1, "value of a %d\n", a) if a = 10 then b = a exit end if end for printf(1, "value of b %d\n", b)
Это дает следующий результат —
value of a 1 value of a 2 value of a 3 value of a 4 value of a 5 value of a 6 value of a 7 value of a 8 value of a 9 value of a 10 value of b 10
Оператор перерыва
Оператор break работает точно так же, как оператор exit , но применяется к операторам if или switch, а не к циклам операторов любого вида.
Синтаксис
Синтаксис оператора break следующий:
break [ "Label Name" ] [Number]
Оператор break завершает последний и самый внутренний блок if или switch до тех пор, пока не будет указано необязательное имя или номер метки.
Особой формой разрыва N является разрыв 0 . Это оставляет самый внешний блок if или switch независимо от глубины. Контроль продолжается после самого внешнего блока. Аналогично, break -1 разрывает второй крайний блок if или switch и так далее.
пример
#!/home/euphoria-4.0b2/bin/eui integer a, b sequence s = {'E','u', 'p'} if s[1] = 'E' then a = 3 if s[2] = 'u' then b = 1 if s[3] = 'p' then break 0 -- leave topmost if block end if a = 2 else b = 4 end if else a = 0 b = 0 end if printf(1, "value of a %d\n", a) printf(1, "value of b %d\n", b)
Это дает следующий результат —
value of a 3 value of b 1
Продолжение заявления
Оператор continue продолжает выполнение цикла, к которому он применяется, переходя к следующей итерации и пропуская оставшуюся часть итерации.
Переход к следующей итерации означает тестирование индекса условной переменной и проверку того, находится ли он в пределах границ.
Синтаксис
Синтаксис оператора continue следующий:
continue [ "Label Name" ] [Number]
Оператор continue будет повторять самый последний и самый внутренний цикл до тех пор, пока не будет указано необязательное имя или номер метки.
Особой формой продолжения N является продолжение 0 . Это повторяет самый внешний цикл, независимо от глубины. Аналогично, продолжить -1 начинается со второго внешнего цикла и так далее.
пример
#!/home/euphoria-4.0b2/bin/eui for a = 3 to 6 do printf(1, "value of a %d\n", a) if a = 4 then puts(1,"(2)\n") continue end if printf(1, "value of a %d\n", a*a) end for This would produce following result: value of a 3 value of a 9 value of a 4 (2) value of a 5 value of a 25 value of a 6 value of a 36
Повторное заявление
Оператор retry продолжает выполнение цикла, к которому он применяется, переходя к следующей итерации и пропуская оставшуюся часть итерации.
Синтаксис
Синтаксис оператора повтора следующий:
retry [ "Label Name" ] [Number]
Оператор retry повторяет выполнение текущей итерации цикла, к которому он применяется. Оператор переходит к первому оператору обозначенного цикла, не проверяя ничего и не увеличивая индекс цикла for.
Особой формой повторной попытки является повтор 0 . Это повторяет выполнение самого внешнего цикла, независимо от глубины. Аналогично, повторная попытка -1 повторяет второй самый внешний цикл и так далее.
Как правило, подблок, который содержит оператор повтора, также содержит другое ключевое слово управления потоком, например, exit, continue или break. В противном случае итерация будет выполняться бесконечно.
пример
#!/home/euphoria-4.0b2/bin/eui integer errors = 0 integer files_to_open = 10 for i = 1 to length(files_to_open) do fh = open(files_to_open[i], "rb") if fh = -1 then if errors > 5 then exit else errors += 1 retry end if end if file_handles[i] = fh end for
Поскольку повтор не изменяет значение i и пытается снова открыть тот же файл, должен быть способ выйти из цикла, который обеспечивает оператор выхода.
Goto заявление
Оператор goto указывает компьютеру возобновить выполнение кода в отмеченном месте.
Место для возобновления выполнения называется целью оператора. Запрещено находиться в текущей подпрограмме или в текущем файле, если она находится вне подпрограммы.
Синтаксис
Синтаксис оператора goto следующий:
goto "Label Name"
Целью оператора goto может быть любой доступный оператор метки —
label "Label Name"
Имена меток должны быть константой в двойных кавычках. Символы, которые недопустимы в идентификаторах Euphoria, могут появляться в имени метки, так как это обычная строка.
пример
#!/home/euphoria-4.0b2/bin/eui integer a = 0 label "FIRST" printf(1, "value of a %d\n", a) a += 10 if a < 50 then goto "FIRST" end if printf(1, "Final value of a %d\n", a)
Это дает следующий результат —
value of a 0 value of a 10 value of a 20 value of a 30 value of a 40 Final value of a 50
Эйфория — оценка короткого замыкания
Когда условие проверяется, если, elsif, до или во время использования и / или операторов, используется оценка короткого замыкания. Например —
if a < 0 and b > 0 then -- block of code end if
Если a <0 является ложным, то Euphoria не потрудится проверить, больше ли b, чем 0. Он знает, что общий результат равен false независимо. Точно так же —
if a < 0 or b > 0 then -- block of code end if
если a <0 истинно, то Euphoria немедленно решает, что результат истинен, без проверки значения b, поскольку результат этого теста не имеет значения.
В общем, всякий раз, когда у вас есть условие следующей формы —
A and B
Если A и B могут быть любыми двумя выражениями, Euphoria сокращает время, когда A ложно, и сразу же делает общий результат ложным, даже не глядя на выражение B.
Точно так же, когда у вас есть условие следующей формы —
A or B
Если A истинно, Euphoria пропускает оценку выражения B и объявляет результат верным.
Оценка короткого замыкания и и или выполняется только для условий if, elsif, before и while. Он не используется в других контекстах. Например —
x = 1 or {1,2,3,4,5} -- x should be set to {1,1,1,1,1}
Если бы здесь использовалось короткое замыкание, вы бы установили x на 1, и даже не смотрели бы на {1,2,3,4,5}, что было бы неправильно.
Таким образом, короткое замыкание можно использовать в условиях if, elsif, before или while, потому что вам нужно заботиться только о том, является ли результат истинным или ложным, и условия, необходимые для получения атома в результате.
Эйфория — Последовательности
Последовательность представлена списком объектов в скобках {}, разделенных запятыми. Последовательность может содержать как атомы, так и другие последовательности. Например —
{2, 3, 5, 7, 11, 13, 17, 19} {1, 2, {3, 3, 3}, 4, {5, {6}}} {{"Zara", "Ayan"}, 52389, 97.25} {} -- the 0-element sequence
Один элемент последовательности можно выбрать, указав номер элемента в квадратных скобках. Номера элементов начинаются с 1.
Например, если x содержит {5, 7.2, 9, 0.5, 13}, то x [2] равно 7.2.
Предположим, что x [2] содержит {11,22,33}. Теперь, если вы попросите x [2], вы получите {11,22,33}, а если вы попросите x [2] [3], вы получите атом 33 ,
пример
#!/home/euphoria-4.0b2/bin/eui sequence x x = {1, 2, 3, 4} for a = 1 to length(x) do printf(1, "value of x[%d] = %d\n", {a, x[a]}) end for
Здесь length () — это встроенная функция, которая возвращает длину последовательности. Приведенный выше пример дает следующий результат —
value of x[1] = 1 value of x[2] = 2 value of x[3] = 3 value of x[4] = 4
Строка символов
Строка символов — это просто последовательность символов. Это может быть введено одним из двух способов —
(а) Использование двойных кавычек —
"ABCDEFG"
(б) Использование строки необработанных обозначений —
-- Using back-quotes `ABCDEFG` or -- Using three double-quotes """ABCDEFG"""
Вы можете попробовать следующий пример, чтобы понять концепцию —
#!/home/euphoria-4.0b2/bin/eui sequence x x = "ABCD" for a = 1 to length(x) do printf(1, "value of x[%d] = %s\n", {a, x[a]}) end for
Это дает следующий результат —
value of x[1] = A value of x[2] = B value of x[3] = C value of x[4] = D
Строковые массивы
Массив строк может быть реализован с использованием последовательностей следующим образом:
#!/home/euphoria-4.0b2/bin/eui sequence x = {"Hello", "World", "Euphoria", "", "Last One"} for a = 1 to length(x) do printf(1, "value of x[%d] = %s\n", {a, x[a]}) end for
Это дает следующий результат —
value of x[1] = Hello value of x[2] = World value of x[3] = Euphoria value of x[4] = value of x[5] = Last One
Эйфория Структуры
Структура может быть реализована с использованием последовательностей следующим образом:
#!/home/euphoria-4.0b2/bin/eui sequence employee = { {"John","Smith"}, 45000, 27, 185.5 } printf(1, "First Name = %s, Last Name = %s\n", {employee[1][1],employee[1][2]} )
Это дает следующий результат —
First Name = John, Last Name = Smith
Существуют различные операции, которые могут выполняться непосредственно над последовательностями. Давайте посмотрим на них подробно —
Мочевая операция
При применении к последовательности унарный оператор фактически применяется к каждому элементу в последовательности, чтобы получить последовательность результатов одинаковой длины.
#!/home/euphoria-4.0b2/bin/eui sequence x x = -{1, 2, 3, 4} for a = 1 to length(x) do printf(1, "value of x[%d] = %d\n", {a, x[a]}) end for
Это дает следующий результат —
value of x[1] = -1 value of x[2] = -2 value of x[3] = -3 value of x[4] = -4
Арифметические операции
Почти все арифметические операции могут выполняться над последовательностями следующим образом:
#!/home/euphoria-4.0b2/bin/eui sequence x, y, a, b, c x = {1, 2, 3} y = {10, 20, 30} a = x + y puts(1, "Value of a = {") for i = 1 to length(a) do printf(1, "%d,", a[i]) end for puts(1, "}\n") b = x - y puts(1, "Value of b = {") for i = 1 to length(a) do printf(1, "%d,", b[i]) end for puts(1, "}\n") c = x * 3 puts(1, "Value of c = {") for i = 1 to length(c) do printf(1, "%d,", c[i]) end for puts(1, "}\n")
Это дает следующий результат —
Value of a = {11,22,33,} Value of b = {-9,-18,-27,} Value of c = {3,6,9,}
Параметры командной строки
Пользователь может передать параметры командной строки в сценарий Euphoria, и к нему можно получить доступ в виде последовательности с помощью функции command_line () следующим образом:
#!/home/euphoria-4.0b2/bin/eui sequence x x = command_line() printf(1, "Interpeter Name: %s\n", {x[1]} ) printf(1, "Script Name: %s\n", {x[2]} ) printf(1, "First Argument: %s\n", {x[3]}) printf(1, "Second Argument: %s\n", {x[4]})
Здесь printf () — встроенная функция Euphoria. Теперь, если вы запустите этот скрипт следующим образом —
$eui test.ex "one" "two"
Это дает следующий результат —
Interpeter Name: /home/euphoria-4.0b2/bin/eui Script Name: test.ex First Argument: one Second Argument: two
Эйфория — дата и время
Euphoria имеет библиотечную процедуру, которая возвращает дату и время вашей программе.
Дата () Метод
Метод date () возвращает значение последовательности, состоящее из восьми элементов atom. Следующий пример объясняет это подробно —
#!/home/euphoria-4.0b2/bin/eui integer curr_year, curr_day, curr_day_of_year, curr_hour, curr_minute, curr_second sequence system_date, word_week, word_month, notation, curr_day_of_week, curr_month word_week = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} word_month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} -- Get current system date. system_date = date() -- Now take individual elements curr_year = system_date[1] + 1900 curr_month = word_month[system_date[2]] curr_day = system_date[3] curr_hour = system_date[4] curr_minute = system_date[5] curr_second = system_date[6] curr_day_of_week = word_week[system_date[7]] curr_day_of_year = system_date[8] if curr_hour >= 12 then notation = "p.m." else notation = "a.m." end if if curr_hour > 12 then curr_hour = curr_hour - 12 end if if curr_hour = 0 then curr_hour = 12 end if puts(1, "\nHello Euphoria!\n\n") printf(1, "Today is %s, %s %d, %d.\n", {curr_day_of_week, curr_month, curr_day, curr_year}) printf(1, "The time is %.2d:%.2d:%.2d %s\n", {curr_hour, curr_minute, curr_second, notation}) printf(1, "It is %3d days into the current year.\n", {curr_day_of_year})
Это дает следующий результат на вашем стандартном экране —
Hello Euphoria! Today is Friday, January 22, 2010. The time is 02:54:58 p.m. It is 22 days into the current year.
Время () Метод
Метод time () возвращает значение атома, представляющее количество секунд, прошедших с фиксированного момента времени. Следующий пример объясняет это подробно —
#!/home/euphoria-4.0b2/bin/eui constant ITERATIONS = 100000000 integer p atom t0, t1, loop_overhead t0 = time() for i = 1 to ITERATIONS do -- time an empty loop end for loop_overhead = time() - t0 printf(1, "Loop overhead:%d\n", loop_overhead) t0 = time() for i = 1 to ITERATIONS do p = power(2, 20) end for t1 = (time() - (t0 + loop_overhead))/ITERATIONS printf(1, "Time (in seconds) for one call to power:%d\n", t1)
Это дает следующий результат —
Loop overhead:1 Time (in seconds) for one call to power:0
Методы, связанные с датой и временем
Euphoria предоставляет список методов, которые помогают вам манипулировать датой и временем. Эти методы перечислены в подпрограммах библиотеки Euphoria .
Эйфория — Процедуры
Процедура — это группа повторно используемого кода, которая может быть вызвана из любой точки вашей программы. Это устраняет необходимость писать один и тот же код снова и снова. Это помогает программистам писать модульный код.
Как и любой другой продвинутый язык программирования, Euphoria также поддерживает все функции, необходимые для написания модульного кода с использованием процедур.
Вы, наверное, видели процедуры, такие как printf () и length () в предыдущих главах. Мы используем эти процедуры снова и снова, но они были написаны в ядре Euphoria только один раз.
Euphoria позволяет вам писать свои собственные процедуры. В этом разделе объясняется, как написать собственную процедуру в Euphoria.
Определение процедуры
Прежде чем использовать процедуру, вам необходимо определить ее. Наиболее распространенный способ определения процедуры в Euphoria — использование ключевого слова процедуры , за которым следует уникальное имя процедуры, список параметров (которые могут быть пустыми) и блок операторов, который заканчивается оператором завершения процедуры . Основной синтаксис показан ниже:
procedure procedurename(parameter-list) statements .......... end procedure
пример
Здесь определена простая процедура sayHello, которая не принимает параметров.
procedure sayHello() puts(1, "Hello there") end procedure
Вызов процедуры
Чтобы вызвать процедуру где-то позже в скрипте, вам просто нужно написать имя этой процедуры следующим образом:
#!/home/euphoria-4.0b2/bin/eui procedure sayHello() puts(1, "Hello there") end procedure -- Call above defined procedure. sayHello()
Это дает следующий результат —
Hello there
Параметры процедуры
До сих пор вы видели процедуру без параметра. Но есть возможность передавать разные параметры при вызове процедуры. Эти переданные параметры могут быть захвачены внутри процедуры, и любые манипуляции с этими параметрами могут быть выполнены.
Процедура может принимать несколько параметров, разделенных запятой.
пример
Давайте внесем небольшие изменения в нашу процедуру sayHello . На этот раз требуется два параметра —
#!/home/euphoria-4.0b2/bin/eui procedure sayHello(sequence name,atom age) printf(1, "%s is %d years old.", {name, age}) end procedure -- Call above defined procedure. sayHello("zara", 8)
Это дает следующий результат —
zara is 8 years old.
Эйфория — Функции
Функции Euphoria похожи на процедуры, но они возвращают значение и могут использоваться в выражении. Эта глава объясняет, как написать свои собственные функции в Euphoria.
Определение функции
Прежде чем использовать функцию, нам нужно ее определить. Наиболее распространенный способ определения функции в Euphoria — использование ключевого слова function , за которым следует уникальное имя функции, список параметров (который может быть пустым) и блок операторов, который заканчивается оператором завершения функции . Основной синтаксис показан здесь —
function functionname(parameter-list) statements .......... return [Euphoria Object] end function
пример
Здесь определена простая функция sayHello, которая не принимает параметров.
function sayHello() puts(1, "Hello there") return 1 end function
Вызов функции
Чтобы вызвать функцию где-то позже в скрипте, вам просто нужно написать имя этой функции следующим образом:
#!/home/euphoria-4.0b2/bin/eui function sayHello() puts(1, "Hello there") return 1 end function -- Call above defined function. sayHello()
Это дает следующий результат —
Hello there
Параметры функции
До сих пор мы видели функцию без параметров. Но есть возможность передавать различные параметры при вызове функции. Эти переданные параметры могут быть захвачены внутри функции, и любые манипуляции с этими параметрами могут быть выполнены.
Функция может принимать несколько параметров, разделенных запятой.
пример
Давайте сделаем небольшую модификацию в нашей функции sayHello . На этот раз требуется два параметра —
#!/home/euphoria-4.0b2/bin/eui function sayHello(sequence name,atom age) printf(1, "%s is %d years old.", {name, age}) return 1 end function -- Call above defined function. sayHello("zara", 8)
Это дает следующий результат —
zara is 8 years old.
Заявление о возврате
Функция Euphoria должна иметь оператор return перед закрывающей функцией end оператора. Любой объект Euphoria может быть возвращен. По сути, вы можете иметь несколько возвращаемых значений, возвращая последовательность объектов. Например
return {x_pos, y_pos}
Если вам нечего вернуть, просто верните 1 или 0. Возвращаемое значение 1 указывает на успех, а 0 указывает на сбой
Эйфория — Файлы I / O
Используя язык программирования Euphoria, вы можете писать программы, которые читают и изменяют данные файлов на вашем гибком диске или жестком диске, или создавать новые файлы в качестве формы вывода. Вы даже можете получить доступ к устройствам на вашем компьютере, таким как принтер и модем.
В этой главе описаны все основные функции ввода / вывода, доступные в Euphoria. Для получения информации о дополнительных функциях, пожалуйста, обратитесь к стандартной документации Euphoria.
Отображение на экране
Простейший способ создания выходных данных — использование оператора put (), в котором вы можете передать любую строку для отображения на экране. Существует другой метод printf (), который также можно использовать в случае, если вам нужно отформатировать строку с использованием динамических значений.
Эти методы преобразуют выражения, которые вы передаете им, в строку и записывает результат в стандартный вывод следующим образом:
#!/home/euphoria-4.0b2/bin/eui puts(1, "Euphoria is really a great language, isn't it?" )
Это дает следующий результат на вашем стандартном экране —
Euphoria is really a great language, isn't it?
Открытие и закрытие файлов
Euphoria предоставляет основные методы, необходимые для работы с файлами по умолчанию. Вы можете сделать большую часть манипуляций с файлом, используя следующие методы —
- открыть()
- близко()
- Е ()
- получает ()
- ЕОКП ()
Открытый метод
Прежде чем вы сможете прочитать или написать файл, вы должны открыть его с помощью встроенного в Euphoria метода open () . Эта функция создает дескриптор файла, который используется для вызова других вспомогательных методов, связанных с ним.
Синтаксис
integer file_num = open(file_name, access_mode)
Выше метод возвращает -1 в случае ошибки при открытии данного имени файла. Вот параметры —
-
file_name — аргумент file_name представляет собой строковое значение, которое содержит имя файла, к которому вы хотите получить доступ.
-
access_mode — access_mode определяет режим, в котором файл должен быть открыт. Например, чтение, запись, добавление и т. Д. Полный список возможных значений для режимов открытия файлов приведен в следующей таблице:
file_name — аргумент file_name представляет собой строковое значение, которое содержит имя файла, к которому вы хотите получить доступ.
access_mode — access_mode определяет режим, в котором файл должен быть открыт. Например, чтение, запись, добавление и т. Д. Полный список возможных значений для режимов открытия файлов приведен в следующей таблице:
S.No | Режимы и описание |
---|---|
1 |
р Открывает текстовый файл только для чтения. Указатель файла находится в начале файла. |
2 |
Р.Б. Открывает файл для чтения только в двоичном формате. Указатель файла находится в начале файла. |
3 |
вес Открывает текстовый файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи. |
4 |
термометру Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи. |
5 |
U Открывает файл для чтения и записи. Указатель файла устанавливается в начале файла. |
6 |
UB Открывает файл для чтения и записи в двоичном формате. Указатель файла находится в начале файла. |
7 |
Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует (режим добавления). Если файл не существует, он создает новый файл для записи. |
8 |
аб Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует (режим добавления). Если файл не существует, он создает новый файл для записи. |
р
Открывает текстовый файл только для чтения. Указатель файла находится в начале файла.
Р.Б.
Открывает файл для чтения только в двоичном формате. Указатель файла находится в начале файла.
вес
Открывает текстовый файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.
термометру
Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.
U
Открывает файл для чтения и записи. Указатель файла устанавливается в начале файла.
UB
Открывает файл для чтения и записи в двоичном формате. Указатель файла находится в начале файла.
Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует (режим добавления). Если файл не существует, он создает новый файл для записи.
аб
Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует (режим добавления). Если файл не существует, он создает новый файл для записи.
пример
В следующем примере создается новый текстовый файл в текущем каталоге в вашей системе Linux —
#!/home/euphoria-4.0b2/bin/eui integer file_num constant ERROR = 2 constant STDOUT = 1 file_num = open("myfile,txt", "w") if file_num = -1 then puts(ERROR, "couldn't open myfile\n") else puts(STDOUT, "File opend successfully\n") end if
Если файл открывается успешно, то он «myfile.txt» создается в вашем текущем каталоге и дает следующий результат —
File opend successfully
Метод close ()
Метод close () сбрасывает любую неписанную информацию и закрывает файл, после чего чтение и запись в файл больше невозможны.
Euphoria автоматически закрывает файл, когда ссылочный объект файла переназначается другому файлу. Рекомендуется использовать метод close () для закрытия файла.
Синтаксис
close( file_num );
Здесь дескриптор файла, полученный при открытии файла, передается как параметр.
пример
В следующем примере создается файл, как указано выше, а затем он закрывается перед существованием программы.
#!/home/euphoria-4.0b2/bin/eui integer file_num constant ERROR = 2 constant STDOUT = 1 file_num = open("myfile.txt", "w") if file_num = -1 then puts(ERROR, "couldn't open myfile\n") else puts(STDOUT, "File opend successfully\n") end if if file_num = -1 then puts(ERROR, "No need to close the file\n") else close( file_num ) puts(STDOUT, "File closed successfully\n") end if
Это дает следующий результат —
File opend successfully File closed successfully
Чтение и запись файлов
Euphoria предоставляет набор методов доступа, облегчающих нашу жизнь при чтении или записи файла в текстовом или двоичном режиме. Давайте посмотрим, как использовать методы printf () и gets () для чтения и записи файлов.
Метод printf ()
Метод printf () записывает любую строку в открытый файл.
Синтаксис
printf(fn, st, x)
Вот параметры —
-
fn — дескриптор файла, полученный из метода open ().
-
st — Строка формата, где десятичное число или атом отформатированы с использованием% d, а строка или последовательность отформатирована с использованием% s.
-
x — Если x — последовательность, то спецификаторы формата из st сопоставляются с соответствующими элементами x. Если x является атомом, то обычно st содержит только один спецификатор формата и применяется к x. Тем не мение; Если st содержит несколько спецификаторов формата, то каждый из них применяется к одному и тому же значению x.
fn — дескриптор файла, полученный из метода open ().
st — Строка формата, где десятичное число или атом отформатированы с использованием% d, а строка или последовательность отформатирована с использованием% s.
x — Если x — последовательность, то спецификаторы формата из st сопоставляются с соответствующими элементами x. Если x является атомом, то обычно st содержит только один спецификатор формата и применяется к x. Тем не мение; Если st содержит несколько спецификаторов формата, то каждый из них применяется к одному и тому же значению x.
пример
В следующем примере открывается файл и записывается имя и возраст человека в этом файле —
#!/home/euphoria-4.0b2/bin/eui integer file_num constant ERROR = 2 constant STDOUT = 1 file_num = open("myfile.txt", "w") if file_num = -1 then puts(ERROR, "couldn't open myfile\n") else puts(STDOUT, "File opend successfully\n") end if printf(file_num, "My name is %s and age is %d\n", {"Zara", 8}) if file_num = -1 then puts(ERROR, "No need to close the file\n") else close( file_num ) puts(STDOUT, "File closed successfully\n") end if
Приведенный выше пример создает файл myfile.txt . Записывает заданное содержимое в этот файл и, наконец, закрывается. Если вы откроете этот файл, он будет иметь следующий контент —
My name is Zara and age is 8
Метод gets ()
Метод gets () читает строку из открытого файла.
Синтаксис
gets(file_num)
Здесь передаваемым параметром является описание файла, возвращаемое методом opend () . Этот метод начинает чтение с начала файла строка за строкой. Символы имеют значения от 0 до 255. Атом -1 возвращается в конец файла.
пример
Давайте возьмем файл myfile.txt, который уже создан.
#!/home/euphoria-4.0b2/bin/eui integer file_num object line constant ERROR = 2 constant STDOUT = 1 file_num = open("myfile.txt", "r") if file_num = -1 then puts(ERROR, "couldn't open myfile\n") else puts(STDOUT, "File opend successfully\n") end if line = gets(file_num) printf( STDOUT, "Read content : %s\n", {line}) if file_num = -1 then puts(ERROR, "No need to close the file\n") else close( file_num ) puts(STDOUT, "File closed successfully\n") end if
Это дает следующий результат —
File opend successfully Read content : My name is Zara and age is 8 File closed successfully
Euphoria предоставляет список многих методов, которые помогают вам манипулировать файлами. Эти методы перечислены в подпрограммах библиотеки Euphoria .