甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション10.3 例外の取扱い

Adaチュートリアル セクション10.3 例外の取扱い

E-mail Print PDF

セクション 10.3 - 例外の取扱い

私たちが何回も注記してきたように、例外が上がり、それが取り扱われなければ、そのプログラムは停止します。例外を取り扱うために、プログラマーは例外ハンドラーを定義しなければならず、十分に容易になっています。

raise文によって例外が上がった場合、Adaは例外が上がった文の並びにおいて、現在している作業を放棄し、例外ハンドラーを探すことになります。文の並びは、「begin」と「end」の間におかれる文の集合のことを指します。もしAdaがマッチする例外ハンドラーが見付からなかった場合、現在のサブプログラムから戻り(その流れにそってクリーンアップを行い)、(呼び出された場所から)呼出元においてマッチする例外ハンドラーを探そうとします。もし例外ハンドラーが見つからなかった場合、サブプログラムを抜けます。それにしたがって、クリーンアップを行ないます。そして、再び検索を試します。Adaはこのプロセスをマッチする例外ハンドらーが見つかるまで、繰り返し続け、そうでない場合はプログラムが終了します。

例外ハンドラーは、「begin」文にマッチする「end」文の前においてのみ定義されます。

たとえば、ここではファイルが存在すれば、それを「Open」し存在しなければ、「Create」するプロシージャーの例です。

  procedure Open_Or_Create(File : in out File_Type;
Mode : File_Mode; Name : String) is
begin
-- Try to open the file. This will raise Name_Error if
-- it doesn't exist.
Open(File, Mode, Name);
exception
when Name_Error =>
Create(File, Mode, Name);
end Open_Or_Create;

以下に、例外ハンドラーの簡易BNF記述を掲載します。

  exception_handler ::= exception_choice { "|"  exception_choice } "=>"
sequence_of_statements
exception_choice ::= exception_name | "others"

「others」キーワードは、すべての例外がこの例外ハンドラーにおいて明白にリストされていないことを意味しています。このとき、プログラマーは自分が取り扱いたいすべての例外取り扱うことができるのです。

例外ハンドラーの内部では、プログラマーは自分がしたいあらゆる種類の処理を行なうことが出来ます。もし、処理の後、プログラマーが同じ例外をさらに高いレベルに上げたいといった場合、プログラマーは例外の名前を伴わずに「raise」文を使うことによってそれが出来ます。名前付き例外を伴わないraise文は、例外を受け取るべく再度、上げるのです。raise文は例外ハンドラーの内部においてのみ、例外を再度上げることが出来ます。

プログラマーは例外に沿って、情報をパスすることが可能です。そして、事前定義されたパッケージの例外に関連した操作が存在します。私たちは、ここでは細部に立ち入りませんが、プログラマーがもし興味があるなら、section 11 of the Ada RMを調べてみてください。そこでは例外について議論しています。

出典: http://www.adahome.com/Tutorials/Lovelace/s10sf.htm

Last Updated on Tuesday, 13 March 2012 08:55  

ニュース速報

リナックスアカデミーから受託している某教育案件の件で、(株)びぎねっとで、打合せを行った

弊社で受けている部分も若干の影響があったので、資料を修正する必要がある

現在、作業中の資料1と、今後作成する資料2

これらに基づき、資料3と、資料4を作成する

講義ガイドについては、別途作成の予定(資料5、及び資料6)