ユーフォリア-クイックガイド

ユーフォリアは End-User Pとのログラム H階層的 Oの対象 R頑固 I解釈 Aひだ。Euphoriaの最初の化身は、AtariMega-STでRobertCraigによって作成され、1993年に最初にリリースされました。現在はRapid DeploymentSoftwareによって保守されています。

これは、無料で、シンプルで、柔軟性があり、習得が容易で、解釈が簡単ですが、DOS、Windows、Linux、FreeBSDなどの非常に高速な32ビット高級プログラミング言語です。

Euphoriaは、Windows GUIプログラム、高速DOSゲーム、およびLinux / FreeBSD XWindowsプログラムの開発に使用されています。陶酔感は、CGI(Webベース)プログラミングにも使用できます。

ユーフォリアの特徴

これがEuphoriaの主な機能のリストです-

  • これは、習得と使用が簡単な、シンプルで柔軟性のある強力な言語定義です。

  • 動的なストレージ割り当てをサポートします。つまり、プログラマーがメモリの割り当てや解放について心配することなく、変数を拡大または縮小できます。ガベージコレクションを自動的に処理します。

  • PerlやPythonなどの従来のインタプリタよりも非常に高速です。

  • Euphoriaプログラムは、Linux、FreeBSD、32ビットWindows、および任意のDOS環境で実行されます。

  • Euphoriaプログラムは、640Kのメモリ制限の対象ではありません。

  • これは、EuphoriaプログラムをCに変換し、それをCコンパイラでコンパイルして実行可能(.exe)ファイルを取得するために使用できる最適化Euphoria-To-Cトランスレータを提供します。これにより、プログラムの速度が2〜5倍向上します。

  • 基になるハードウェアは完全に隠されています。つまり、プログラムはワード長、値の基になるビットレベル表現、バイト順序などを認識しません。

  • Euphoriaのインストールには、フルスクリーンのソースデバッガー、実行プロファイラー、およびフルスクリーンのマルチファイルエディターが付属しています。

  • 実行時のエラー処理、添え字、および型チェックをサポートします。

  • これはオープンソース言語であり、完全に無料で提供されます。

プラットフォーム要件

Euphoriaは、Windows、Linux、FreeBSD、およびOSXで利用できます。以下のプラットフォームで必要な最低限のバージョンは次のとおりです-

  • WIN32 version− Windows95以降のバージョンのWindowsが必要です。XPおよびVistaでは正常に動作します。

  • Linux version−libc6以降を含む適度に最新のLinuxディストリビューションが必要です。たとえば、Red Hat5.2以降は正常に機能します。

  • FreeBSD version −適度に最新のFreeBSDディストリビューションが必要です。

  • Mac OS X version −適度に最新のIntelベースのMacが必要です。

ユーフォリアの制限

ユーフォリアのいくつかの顕著な制限があります-

  • Euphoriaはシンプルで高速、そしてプログラマーにとって十分な柔軟性がありますが、多くの重要な機能の呼び出しサポートは提供しません。たとえば、ネットワークプログラミング。

  • ユーフォリアは1993年に発明されましたが、それでもこの言語で書かれた本はありません。また、この言語で利用できるドキュメントはあまりありません。

しかし、最近、この言語は非常に急速に普及しており、すぐにその言語で利用できる優れたユーティリティや本を手に入れることができます。

ユーフォリアライセンス

この製品は無料でオープンソースであり、多くの人々の貢献から恩恵を受けています。開発したEuphoriaプログラムを配布するための完全なロイヤリティフリーの権利があります。

euphoria.icoやeuphoria \ binにあるバイナリなどのアイコンファイルは、変更の有無にかかわらず配布できます。

あなたはできる shroud または bindプログラムを作成し、結果のファイルをロイヤリティフリーで配布します。Euphoria-To-Cトランスレータを使用する場合、いくつかの追加のサードパーティの法的制限が適用される場合があります。

寛大な Open Source LicenseEuphoriaが個人的な目的と商業的な目的の両方に使用できるようにします。他の多くのオープンソースライセンスとは異なり、変更をオープンソースにする必要はありません。

この章では、さまざまなプラットフォームへのEuphoriaのインストールについて説明します。手順に従って、Linux、FreeBSD、および32ビットWindowsにEuphoriaをインストールできます。したがって、作業環境に基づいて手順を選択できます。

Linux、無料のBSDインストール

公式サイト提供 .tar.gzLinuxまたはBSDOSにEuphoriaをインストールするためのファイル。-あなたはその公式サイトからユーフォリアの最新バージョンをダウンロードすることができますダウンロードユーフォリア。

.tar.gzファイルを入手したら、LinuxまたはFreeBSDマシンにEuphoriaをインストールするために実行する3つの簡単な手順を次に示します。

Step 1 −ファイルのインストール

ダウンロードしたファイルを解凍します euphoria-4.0b2.tar.gzEuphoriaをインストールするディレクトリにあります。次のように/ 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

NOTE−ファイル名euphoria-4.0b2.tar.gzは、利用可能な最新バージョンによって異なります。このチュートリアルでは、4.0b2バージョンの言語を使用しています。

Step 2 −パスの設定

Euphoriaをインストールした後、シェルが必要なEuphoriaバイナリとユーティリティを見つけることができるように適切なパスを設定する必要があります。先に進む前に、設定する必要のある次の3つの重要な環境変数があります-

  • PATH環境変数を/home/euphoria-4.0b2/binディレクトリを指すように設定します。

  • /home/euphoria-4.0b2を指すようにEUDIR環境変数を設定します。

  • 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

NOTE−環境変数の設定に使用される上記のコマンドは、シェルによって異なる場合があります。これらのコマンドを実行して変数を設定するには、bashシェルを使用しました。

Step 3 −確認インストール

Euphoriaが正常にインストールされたかどうかを確認します。

次のコマンドを実行します-

$eui -version

次の結果が得られた場合は、Euphoriaが正常にインストールされたことを意味します。それ以外の場合は、戻ってすべての手順をもう一度確認する必要があります。

$eui -version Euphoria Interpreter 4.0.0 beta 2 (r2670) for Linux Using System Memory $

これで、Euphoriaプログラミング環境がUNIXマシンで準備でき、簡単な手順で複雑なプログラムの作成を開始できます。

WIN32、およびDOSのインストール

公式サイト提供 .exeWIN32またはDOSOSにEuphoriaをインストールするためのファイル。-あなたはその公式サイトからユーフォリアの最新バージョンをダウンロードすることができますダウンロードユーフォリア。

.exeファイルを入手したら、WIN32またはDOSマシンにEuphoriaプログラミング言語をインストールするための3つの簡単な手順を次に示します。

Step 1 −ファイルのインストール

ダウンロードしたものをダブルクリックします .exeすべてのファイルをインストールするためのセットアッププログラム。インストール用にeuphoria-40b2.exeファイルをダウンロードしました。

ファイル名euphoria-40b2.exeは、利用可能な最新バージョンによって異なります。言語のバージョン4ベータ2を使用します。

デフォルトでは、EuphoriaはC:\ euphoria-40b2ディレクトリにインストールされますが、目的の場所を選択することもできます。

Step 2 −マシンの再起動

マシンを再起動してインストールを完了します。

Step 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プラットフォームでは、2つの選択肢があります。実行した場合eui次に、コンソールウィンドウが作成されます。実行した場合euiw その後、コンソールは作成されないため、GUIアプリケーションに適しています。

  • Euphoriaは、ファイル拡張子の選択を気にしません。ただし、慣例により、コンソールベースのアプリケーションには.ex 拡張。

  • GUIベースのアプリケーションには .exw 拡張子とインクルードファイルには .e 拡張。

Euphoria言語は、Perl、C、およびJavaと多くの類似点があります。ただし、言語間には明確な違いがいくつかあります。この章は、Euphoriaで期待される構文をすばやく理解できるように設計されています。

このチュートリアルは、Linuxで作業していて、すべての例がLinuxプラットフォームで作成されていることを前提としています。ただし、LinuxとWIN32のプログラム構文に顕著な違いはないことが確認されています。したがって、WIN32でも同じ手順を実行できます。

最初のユーフォリアプログラム

簡単なEuphoriaプログラムをスクリプトで書いてみましょう。test.exファイルに次のソースコードを入力して保存します。

#!/home/euphoria-4.0b2/bin/eui

puts(1, "Hello, Euphoria!\n")

ユーフォリアインタプリタは/home/euphoria-4.0b2/bin/ディレクトリにあります。このプログラムを次のように実行します-

$ chmod +x test.ex # This is to make file executable $ ./test.ex

これにより、次の結果が生成されます-

Hello, Euphoria!

このスクリプトは組み込み関数を使用しました puts()これは2つの引数を取ります。最初の引数はファイル名またはデバイス番号を示し、2番目の引数は印刷する文字列を示します。ここで、1はSTDOUTデバイスを示します。

ユーフォリア識別子

Euphoria識別子は、変数、関数、クラス、モジュール、またはその他のオブジェクトを識別するために使用される名前です。識別子は、文字AからZまたはaからzで始まり、その後に文字、数字、またはアンダースコアが続きます。

Euphoriaでは、識別子内に@、$、%などの句読文字を使用できません。

ユーフォリアは大文字と小文字を区別するプログラミング言語です。したがって、Manpower そして manpowerユーフォリアの2つの異なる識別子です。たとえば、有効な識別子は-です。

  • n
  • color26
  • ShellSort
  • quick_sort
  • a_very_long_indentifier

予約語

次のリストは、Euphoriaの予約語を示しています。これらの予約語は、定数や変数、またはその他の識別子名として使用することはできません。Euphoriaキーワードには、小文字のみが含まれます。

そして 出口 オーバーライド
なので 書き出す 手順
ブレーク フォールスルー 公衆
沿って にとって リトライ
場合 関数 戻る
絶え間ない グローバル ルーチン
継続する 後藤 スイッチ
行う もし その後
そうしないと ifdef に
elsedef 含める タイプ
elsif ラベル まで
elsifdef ループ 一方
終わり 名前空間 と
エントリ ない なし
列挙型 または xor

式

Euphoriaを使用すると、式を作成して結果を計算できます。ただし、Euphoriaでは、1つの式でデータのシーケンス全体に対して計算を実行できます。

単一の数値を処理するのと同じように、シーケンスを処理できます。コピーしたり、サブルーチンに渡したり、1つの単位として計算したりできます。例-

{1,2,3} + 5

これは、シーケンス{1、2、3}とアトム5を追加して、結果のシーケンス{6、7、8}を取得する式です。後続の章でシーケンスを学習します。

コードのブロック

Euphoriaを学習するときにプログラマーが最初に遭遇する警告の1つは、プロシージャと関数の定義またはフロー制御のコードブロックを示す中括弧がないという事実です。コードのブロックは、関連するキーワードで示されます。

次の例は if...then...end if ブロック-

if condition then
   code block comes here
end if

複数行のステートメント

Euphoriaのステートメントは通常、改行で終わります。ただし、Euphoriaでは、1つのステートメントを複数行に書き込むことができます。例-

total = item_one + 
   item_two + 
   item_three

エスケープ文字

エスケープ文字は、円記号を使用して入力できます。例-

次の表は、円記号で表すことができるエスケープ文字または印刷不可能な文字のリストです。

バックスラッシュ表記 説明
\ n 改行
\ r キャリッジリターン
\ t タブ
\\ バックスラッシュ
\ " 二重引用符
\ ' 一重引用符

ユーフォリアのコメント

コメントはコンパイラによって無視され、実行速度には影響しません。プログラムを読みやすくするために、プログラムでより多くのコメントを使用することをお勧めします。

コメントテキストには3つの形式があります-

  • コメントは2つのダッシュで始まり、現在の行の終わりまで続きます。

  • 複数行形式のコメントは、別の行で発生した場合でも、/ * ... * /内に保持されます。

  • 2文字のシーケンス「#!」で始まる特別なコメントを使用できます。プログラムの最初の行でのみ。

例

#!/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!

Note−「#!」で始まる特別なコメントを使用できます。これにより、ファイルをEuphoriaインタープリターで実行する必要があることがLinuxシェルに通知されます。

変数は、値を格納するために予約されたメモリ位置に他なりません。これは、変数を作成するときに、メモリにいくらかのスペースを予約することを意味します。

変数のデータ型に基づいて、インタプリタはメモリを割り当て、予約されたメモリに何を格納できるかを決定します。したがって、変数にさまざまなデータ型を割り当てることにより、これらの変数に整数、小数、または文字を格納できます。ユーフォリアのデータ型については、別の章で説明しています。

これらのメモリ位置は、その値が存続期間中に変更される可能性があるため、変数と呼ばれます。

変数宣言

ユーフォリア変数は、メモリスペースを予約するために明示的に宣言する必要があります。したがって、変数に値を割り当てる前に、変数の宣言が必須です。

変数宣言には、型名の後に宣言されている変数のリストが続きます。例-

integer x, y, z

sequence a, b, x

変数を宣言するときは、変数に名前を付け、プログラムの実行中に変数に合法的に割り当てることができる値の種類を定義します。

変数を宣言するという単純な行為では、変数に値は割り当てられません。値を割り当てる前に読み取ろうとすると、「変数xyzに値が割り当てられたことがない」ため、Euphoriaは実行時エラーを発行します。

値の割り当て

等号(=)は、変数に値を割り当てるために使用されます。変数は次の方法で割り当てることができます-

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、および "John"は、それぞれcounter、miles、およびname変数に割り当てられた値です。このプログラムは次の結果を生成します-

Value of counter 100
Value of miles 1000.000000
Value of name John

変数の初期化を忘れないようにするため、またコードが読みやすくなる可能性があるため、宣言と代入を組み合わせることができます。

integer n = 5

これは次と同等です-

integer n
n = 5

識別子の範囲

識別子のスコープは、どのコードがそれにアクセスできるかについての説明です。識別子の同じスコープ内のコードはその識別子にアクセスでき、識別子と同じスコープ内にないコードはアクセスできません。

変数のスコープは、宣言されている場所と方法によって異なります。

  • 内で宣言されている場合 for, while, loop または switch、そのスコープは宣言で始まり、それぞれで終わります end ステートメント。

  • で if ステートメントの場合、スコープは宣言で始まり、次のいずれかで終わります else, elsif または end if ステートメント。

  • 変数がルーチン内で宣言されている場合、変数のスコープは宣言で始まり、ルーチンのendステートメントで終わります。これはプライベート変数として知られています。

  • 変数がルーチンの外部で宣言されている場合、そのスコープは宣言で始まり、宣言されているファイルの終わりで終わります。これはモジュール変数と呼ばれます。

  • の範囲 constant スコープ修飾子がなく、宣言で始まり、宣言されたファイルの終わりで終わります。

  • の範囲 enum スコープ修飾子がなく、宣言で始まり、宣言されたファイルの終わりで終わります。

  • すべての範囲 procedures, functions そして typesスコープ修飾子を持たないは、ソースファイルの先頭から始まり、宣言されているソースファイルの末尾で終わります。

スコープ修飾子を持たない定数、列挙型、モジュール変数、プロシージャ、関数、およびタイプは、次のように呼ばれます。 locals。ただし、これらの識別子には、宣言の前にスコープ修飾子を付けることができます。これにより、スコープが宣言されているファイルを超えて拡張されます。

  • キーワードの場合 global宣言の前に、これらの識別子の範囲はアプリケーション全体に拡張されます。これらは、アプリケーションファイルのどこからでもコードでアクセスできます。

  • キーワードの場合 public宣言の前に、スコープは、識別子が宣言されているファイルを明示的に含むファイル、またはパブリック宣言を含むファイルをパブリックに含むファイルを含むファイルに拡張されます。

  • キーワードの場合 export 宣言の前に、スコープは、識別子が宣言されているファイルを直接含むすべてのファイルにのみ拡張されます。

あなたが include別のファイル内のEuphoriaファイルでは、スコープ修飾子を使用して宣言された識別子のみが、インクルードを実行するファイルにアクセスできます。インクルードされるファイル内の他の宣言はやってファイルには見えませんが含ま。

定数は、プログラムの存続期間中に変更できない初期値が割り当てられる変数でもあります。Euphoriaでは、constantキーワードを使用して次のように定数を定義できます。

constant MAX = 100
constant Upper = MAX - 10, Lower = 5
constant name_list = {"Fred", "George", "Larry"}

式の結果は、以前に定義された関数の呼び出しを含むものであっても、定数に割り当てることができますが、割り当てが行われると、定数変数の値は「ロックイン」されます。

サブルーチン内で定数を宣言することはできません。の範囲constant スコープ修飾子がなく、宣言で始まり、宣言されたファイルの終わりで終わります。

例

#!/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

例から最後の2行を削除すると、次の結果が生成されます-

Value of MAX 100
Value of Upper 90
Value of Lower 5

列挙型

列挙値は特殊なタイプの定数であり、最初の値はデフォルトで数値1になり、その後の各項目は1ずつ増加します。列挙型は数値のみを取ることができます。

列挙型は、サブルーチン内で宣言することはできません。の範囲enum スコープ修飾子がなく、宣言で始まり、宣言されたファイルの終わりで終わります。

例

#!/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

数値を割り当てることで、任意の1つのアイテムの値を変更できます。後続の値もデフォルト値が割り当てられていない限り、常に前の値に1を加えたものになります。

#!/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 X, Y
sequence point = { 0,0 }

point[X] = 3
point[Y] = 4

メモリに保存されるデータには、さまざまな種類があります。たとえば、人の年齢は数値として保存され、その人の住所は英数字として保存されます。

Euphoriaには、それらで可能な操作とそれぞれの保存方法を定義するために使用されるいくつかの標準タイプがあります。

Euphoriaには次の4つの標準データタイプがあります-

  • integer
  • atom
  • sequence
  • object

原子と配列を理解することは、ユーフォリアを理解するための鍵です。

整数

Euphoria整数データ型は数値を格納します。それらは次のように宣言および定義されます-

integer var1, var2

var1 = 1
var2 = 100

整数型で宣言された変数は、 integer-1073741824から+1073741823までの値。10進数で約15桁までのより大きな整数値に対して正確な計算を実行できますが、整数ではなくアトムとして宣言します。

原子

Euphoriaのすべてのデータオブジェクトは、アトムまたはシーケンスのいずれかです。アトムは単一の数値です。原子は、任意の整数または倍精度浮動小数点値を持つことができます。ユーフォリア原子は次のように宣言および定義されています-

atom var1, var2, var3

var1 = 1000
var2 = 198.6121324234
var3 = 'E'

原子の範囲は、小数点以下15桁の精度で約-1e300から+ 1e300です。個々のキャラクターはatom一重引用符を使用して入力する必要があります。たとえば、次のすべてのステートメントは合法です-

-- Following is equivalent to the atom 66 - the ASCII code for B
char = 'B'

-- Following is equivalent to the sequence {66}
sentence = "B"

シーケンス

シーケンスは、インデックスを介してアクセスできる数値のコレクションです。Euphoriaのすべてのデータオブジェクトは、アトムまたはシーケンスのいずれかです。

配列インデックスが0から始まる他のプログラミング言語とは異なり、シーケンスインデックスは1から始まります。ユーフォリアシーケンスは次のように宣言および定義されます。

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

文字列は単なる sequence二重引用符を使用して入力できる文字の数。たとえば、次のすべてのステートメントは合法です-

word = 'word'
sentence = "ABCDEFG"

文字列は、他のシーケンスと同じように操作および操作できます。たとえば、上記の文字列はシーケンス-と完全に同等です。

sentence = {65, 66, 67, 68, 69, 70, 71}

Euphoria-Sequencesでシーケンスの詳細を学びます。

オブジェクト

これはEuphoriaのスーパーデータ型であり、原子、シーケンス、整数など、任意の値をとることができます。ユーフォリアオブジェクトは次のように宣言および定義されます-

object var1, var2, var3

var1 = {2, 3, 5, 7, 11, 13, 17, 19}
var2 = 100
var3 = 'E'

オブジェクトは、次のいずれかの値を持つ可能性があります-

  • シーケンス

  • 原子

  • 整数

  • ファイル番号として使用される整数

  • 文字列シーケンス、または1文字のアトム

Euphoriaは、変数を操作するための豊富な演算子セットを提供します。すべてのEuphoria演算子を次のグループに分けることができます-

  • 算術演算子
  • 関係演算子
  • 論理演算子
  • 代入演算子
  • その他の演算子

算術演算子

算術演算子は、代数で使用されるのと同じ方法で数式で使用されます。次の表に、算術演算子を示します。整数変数Aが10を保持し、変数Bが20を保持すると仮定すると、-

例を表示

オペレーター 説明 例
+ 加算-演算子のいずれかの側に値を加算します A + Bは30を与えます
- 減算-左側のオペランドから右側のオペランドを減算します A-Bは-10を与えます
* 乗算-演算子のいずれかの側で値を乗算します A * Bは200を与えます
/ 除算-左側のオペランドを右側のオペランドで除算します B / Aは2を与えます
+ 単項プラス-これは変数値に影響を与えません。 + Bは20を与えます
- 単項マイナス-これにより、指定された変数の負の値が作成されます。 -Bは-20を与えます

関係演算子

Euphoria言語でサポートされている関係演算子は次のとおりです。変数Aが10を保持し、変数Bが20を保持すると仮定すると、-

例を表示

オペレーター 説明 例
= 2つのオペランドの値が等しいかどうかをチェックし、等しい場合は条件が真になります。 (A = B)は真ではありません。
!= 2つのオペランドの値が等しいかどうかをチェックし、値が等しくない場合は条件が真になります。 (A!= B)は真です。
>> 左のオペランドの値が右のオペランドの値より大きいかどうかを確認します。大きい場合は、条件が真になります。 (A> B)は正しくありません。
< 左のオペランドの値が右のオペランドの値よりも小さいかどうかを確認します。小さい場合は、条件が真になります。 (A <B)は真です。
> = 左のオペランドの値が右のオペランドの値以上であるかどうかをチェックします。はいの場合、条件は真になります。 (A> = B)は正しくありません。
<= 左のオペランドの値が右のオペランドの値以下であるかどうかをチェックします。はいの場合、条件は真になります。 (A <= B)は真です。

論理演算子

次の表に、論理演算子を示します。ブール変数Aが1を保持し、変数Bが0を保持すると仮定すると、−

例を表示

オペレーター 説明 例
そして 論理AND演算子と呼ばれます。両方のオペランドがゼロ以外の場合、条件は真になります。 (AとB)は誤りです。
または 論理OR演算子と呼ばれます。2つのオペランドのいずれかがゼロ以外の場合、条件は真になります。 (AまたはB)は真です。
xor 論理XOR演算子と呼ばれます。条件のいずれかが真の場合は条件が真であり、両方のオペランドが真または偽の場合は条件が偽になります。 (A xor B)は真です。
ない 結果を否定するLogicalNOT演算子と呼ばれます。この演算子を使用すると、trueはfalseになり、falseはtrueになります not(B)は真です。

これらの演算子を1または0以外の数値に適用することもできます。規則は次のとおりです。ゼロは偽を意味し、ゼロ以外は真を意味します。

代入演算子

Euphoria言語でサポートされている次の代入演算子があります-

例を表示

オペレーター 説明 例
= 単純な代入演算子、右側のオペランドから左側のオペランドに値を代入します C = A + Bは、A + Bの値をCに割り当てます。
+ = AND代入演算子を追加します。これは、右のオペランドを左のオペランドに追加し、結果を左のオペランドに割り当てます。 C + = AはC = C + Aと同等です
-= AND代入演算子を減算します。左オペランドから右オペランドを減算し、その結果を左オペランドに代入します。 C- = AはC = C-Aと同等です
* = 乗算AND代入演算子。右のオペランドと左のオペランドを乗算し、その結果を左のオペランドに代入します。 C * = AはC = C * Aと同等です
/ = AND代入演算子を除算します。左オペランドを右オペランドで除算し、結果を左オペランドに代入します。 C / = AはC = C / Aと同等です
&= 連結演算子 C&= {2}はC = {C}&{2}と同じです

Note −代入ステートメントで使用されている等号 '='は演算子ではなく、構文の一部にすぎません。

その他の演算子

EuphoriaLanguageでサポートされている他の演算子はほとんどありません。

オペレーター

「&」演算子を使用して、任意の2つのオブジェクトを連結できます。結果は、連結されたオブジェクトの長さの合計に等しい長さのシーケンスです。

例-

#!/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

ユーフォリアオペレーターの優先順位

演算子の優先順位は、式内の用語のグループ化を決定します。これは、式の評価方法に影響します。特定の演算子は他の演算子よりも優先されます。たとえば、乗算演算子は加算演算子よりも優先されます。

たとえば、x = 7 + 3 * 2

ここで、演算子*は+よりも優先されるため、xには20ではなく13が割り当てられます。

したがって、最初に3 * 2で始まり、次に7に追加されます。

ここでは、優先順位が最も高い演算子がテーブルの上部に表示され、優先順位が最も低い演算子が下部に表示されます。式内では、優先順位の高い演算子が最初に評価されます。

カテゴリー オペレーター 結合性
Postfix 関数/型の呼び出し  
単項 +-!ない 右から左へ
乗法 * / 左から右へ
添加剤 +- 左から右へ
連結 & 左から右へ
関連した >> = << = 左から右へ
平等 =!= 左から右へ
論理積 そして 左から右へ
論理OR または 左から右へ
論理XOR xor 左から右へ
コンマ 、 左から右へ

分岐は、プログラミング言語の最も重要な側面です。プログラムの作成中に、決定を下さなければならない場合や、指定された多くのオプションから1つのオプションを選択しなければならない場合があります。

次の図は、プログラムが特定の条件に基づいて2つのパスのいずれかを取る必要がある単純なシナリオを示しています。

Euphoriaは、次の3種類の意思決定(分岐または条件付き)ステートメントを提供します-

  • ifステートメント

  • switchステートメント

  • ifdefステートメント

ステートメントを詳しく見てみましょう-

ループは、プログラミング言語のもう1つの最も重要な側面です。プログラムの作成中に、同じステートメントを何度も実行する必要があり、場合によっては無限の回数になる場合があります。

プロセスを継続する期間、およびプロセスを停止または変更する方法を指定する方法はいくつかあります。反復ブロックは非公式にループと呼ばれることがあり、ループ内のコードの各実行はループの反復と呼ばれます。

次の図は、ループの単純な論理フローを示しています。

Euphoriaは、次の3種類のループステートメントを提供します-

  • whileステートメント

  • ステートメントまでループする

  • ステートメント用

上記のすべてのステートメントは、さまざまな状況に基づいて柔軟性と使いやすさを提供します。それらを一つずつ詳しく見ていきましょう−

プログラム実行フローとは、プログラムステートメントが実行される順序を指します。デフォルトでは、ステートメントは次々に実行されます。

しかしながら; 多くの場合、タスクを実行するには、実行の順序をデフォルトの順序から変更する必要があります。

Euphoriaには、ステートメントの実行順序を調整するために使用できるフロー制御ステートメントがいくつかあります。

終了声明

ループの終了はキーワードで行われます exit。これにより、フローはすぐに現在のループを離れ、ループの終了後に最初のステートメントから再開します。

構文

exitステートメントの構文は次のとおりです-

exit [ "Label Name" ] [Number]

ザ・ exit ステートメントは、オプションのラベル名または番号が指定されるまで、最新の最も内側のループを終了します。

の特別な形 exit N です exit 0。これにより、深さに関係なく、すべてのレベルのループが残ります。制御は、最も外側のループブロックの後で続行されます。同様に、exit-1は2番目に外側のループを終了します。

例

#!/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ブロックを終了します。

の特別な形 break N です break 0。これにより、深さに関係なく、最も外側のifまたはswitchブロックが残ります。制御は最も外側のブロックの後で続行されます。同様に、break -1は、2番目に外側の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 ステートメントは、オプションのラベル名または番号が指定されるまで、最新の最も内側のループを繰り返します。

の特別な形 continue N です continue 0。これにより、深さに関係なく、最も外側のループが繰り返されます。同様に、続行-1は、2番目に外側のループから始まります。

例

#!/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ループインデックスをインクリメントしません。

の特別な形 retry N です retry 0。これにより、深さに関係なく、最も外側のループの実行が再試行されます。同様に、retry -1は、2番目に外側のループを再試行します。

通常、retryステートメントを含むサブブロックには、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の値は変更されず、同じファイルを再度開こうとするため、exitステートメントが提供するループから抜け出す方法が必要です。

gotoステートメント

ザ・ goto ステートメントは、ラベル付けされた場所でコードの実行を再開するようにコンピューターに指示します。

実行を再開する場所は、ステートメントのターゲットと呼ばれます。現在のルーチン、またはルーチン外の場合は現在のファイル内にあるように制限されています。

構文

gotoステートメントの構文は次のとおりです-

goto "Label Name"

gotoステートメントのターゲットは、アクセス可能な任意のものにすることができます label ステートメント-

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

条件がによってテストされるとき if, elsif, until、または while を使用して and または orオペレーターの場合、短絡評価が使用されます。例-

if a < 0 and b > 0 then
   -- block of code
end if

a <0が偽の場合、Euphoriaはbが0より大きいかどうかをわざわざテストしません。それは、関係なく全体的な結果が偽であることを認識しています。同様に−

if a < 0 or b > 0 then
   -- block of code
end if

a <0が真の場合、このテストの結果は無関係であるため、Euphoriaはbの値をテストせずに、結果が真であるとすぐに判断します。

一般的に、次の形式の条件があるときはいつでも-

A and B

AとBが任意の2つの式である場合、Euphoriaは、Aがfalseの場合にショートカットを取り、式Bを見なくても、すぐに全体の結果をfalseにします。

同様に、次の形式の条件があるときはいつでも-

A or  B

Aが真の場合、Euphoriaは式Bの評価をスキップし、結果が真であると宣言します。

Short-circuitandおよびorの評価は、if、elsif、until、および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、until、または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

文字列

文字列は単なる sequence文字の。2つの方法のいずれかで入力できます-

(a) Using Double Quotes −

"ABCDEFG"

(b) Using Raw String Notation −

-- 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()メソッドは、8つのアトム要素で構成されるシーケンス値を返します。次の例で詳細に説明します-

#!/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 LibraryRoutinesにリストされています。

プロシージャは、プログラムのどこからでも呼び出すことができる再利用可能なコードのグループです。これにより、同じコードを何度も書く必要がなくなります。これは、プログラマーがモジュラーコードを書くのに役立ちます。

他の高度なプログラミング言語と同様に、Euphoriaは、プロシージャを使用してモジュラーコードを記述するために必要なすべての機能もサポートしています。

前の章でprintf()やlength()のようなプロシージャを見たことがあるはずです。私たちはこれらの手順を何度も使用していますが、コアユーフォリアで書かれたのは一度だけです。

Euphoriaを使用すると、独自の手順を作成することもできます。このセクションでは、Euphoriaで独自のプロシージャを作成する方法について説明します。

手順の定義

プロシージャを使用する前に、それを定義する必要があります。Euphoriaでプロシージャを定義する最も一般的な方法は、procedure キーワード、それに続く一意のプロシージャ名、パラメータのリスト(空の場合があります)、およびで終わるステートメントブロック end procedureステートメント。基本的な構文は次のとおりです-

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プロシージャを少し変更してみましょう。今回は2つのパラメータが必要です-

#!/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で関数を定義する最も一般的な方法は、function キーワード、一意の関数名、パラメーターのリスト(空の場合があります)、およびで終わるステートメントブロックが続きます end 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関数を少し変更してみましょう。今回は2つのパラメータが必要です-

#!/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 function。Euphoriaオブジェクトはどれでも返すことができます。事実上、オブジェクトのシーケンスを返すことにより、複数の戻り値を持つことができます。例えば

return {x_pos, y_pos}

返すものがない場合は、単に1または0を返します。戻り値1は成功を示し、0は失敗を示します。

Euphoriaプログラミング言語を使用すると、フロッピードライブまたはハードドライブ上のファイルデータを読み取って変更するプログラムを作成したり、出力の形式として新しいファイルを作成したりできます。プリンタやモデムなど、コンピュータ上のデバイスにアクセスすることもできます。

この章では、Euphoriaで使用できるすべての基本的なI / O機能について説明しました。その他の機能については、標準のEuphoriaのドキュメントを参照してください。

画面に表示する

出力を生成する最も簡単な方法は、画面に表示する任意の文字列を渡すことができるputs()ステートメントを使用することです。動的な値を使用して文字列をフォーマットする必要がある場合にも使用できる別のメソッド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は、デフォルトでファイルを操作するために必要な基本的なメソッドを提供します。次の方法を使用して、ファイル操作のほとんどを実行できます-

  • open()
  • close()
  • printf()
  • gets()
  • getc()

オープン方法

ファイルの読み取りまたは書き込みを行う前に、Euphoriaの組み込みopen()メソッドを使用してファイルを開く必要があります。この関数は、それに関連付けられた他のサポートメソッドを呼び出すために使用されるファイル記述子を作成します。

構文

integer file_num = open(file_name, access_mode)

上記のメソッドは、指定されたファイル名を開くときにエラーが発生した場合に-1を返します。ここにパラメータがあります-

  • file_name − file_name引数は、アクセスするファイルの名前を含む文字列値です。

  • access_mode− access_modeは、ファイルを開く必要があるモードを決定します。たとえば、読み取り、書き込み、追加などです。ファイルを開くモードで可能な値の完全なリストを次の表に示します。

S.No モードと説明
1

r

読み取り専用のテキストファイルを開きます。ファイルポインタはファイルの先頭に配置されます。

2

rb

バイナリ形式でのみ読み取るためにファイルを開きます。ファイルポインタはファイルの先頭に配置されます。

3

w

書き込み専用のテキストファイルを開きます。ファイルが存在する場合、ファイルを上書きします。ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。

4

wb

バイナリ形式でのみ書き込むためのファイルを開きます。ファイルが存在する場合、ファイルを上書きします。ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。

5

u

読み取りと書き込みの両方のためにファイルを開きます。ファイルポインタはファイルの先頭に設定されます。

6

ub

バイナリ形式で読み取りと書き込みの両方のファイルを開きます。ファイルポインタはファイルの先頭に配置されます。

7

a

追加するファイルを開きます。ファイルが存在する場合、ファイルポインタはファイルの最後にあります(追加モード)。ファイルが存在しない場合は、書き込み用の新しいファイルが作成されます。

8

ab

バイナリ形式で追加するファイルを開きます。ファイルが存在する場合、ファイルポインタはファイルの最後にあります(追加モード)。ファイルが存在しない場合は、書き込み用の新しいファイルが作成されます。

例

次の例では、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()メソッドは、書き込まれていない情報をフラッシュしてファイルを閉じます。その後、ファイルに対して読み取りまたは書き込みを行うことはできなくなります。

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 − 10進数またはアトムが%dを使用してフォーマットされ、文字列またはシーケンスが%sを使用してフォーマットされるフォーマット文字列。

  • x− xがシーケンスの場合、stのフォーマット指定子はxの対応する要素と照合されます。xがアトムの場合、通常、stにはフォーマット指定子が1つだけ含まれ、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(file_num)

ここで渡されるパラメータは、opend()メソッドによって返されるファイルの説明です。このメソッドは、ファイルの先頭から1行ずつ読み取りを開始します。文字の値は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 LibraryRoutinesにリストされています。