Specript Language Reference rev.0.7.0 www.specript.org

目次 | << 前章 | 次章 >>

10.実行時エラー

Specriptにおける実行時エラーは、アプリケーションエラーとSpec違反の2種類に分けられます。

一般に、アプリケーションエラーは、アプリケーションでハンドルしても(ユーザーに システム障害が発生した旨を通知したり、ログに記録したりする以外には、)もはや何かを 行う余地はなく、アプリケーションの内部状態も一貫性が損なわれていたり、予期せぬ状態に 陥っている恐れがあります。アプリケーションエラーの発生したユーザー/クライアントセッションは、 安全のために何もせず直ちに破棄すべきです。

一方、Spec違反は、多くの場合は入力データに仕様上の間違いがあり、それが検知されたことを 意味します。一般にSpec違反の発生は、アプリケーションでハンドルし、間違いの内容を ユーザーあるいはクライアントシステムへ提示し、処理の再試行を促すべきことを意味します。

10−1.アプリケーションエラー

アプリケーションエラーとは、「null参照」、「0除算」、「ノーケースマッチ」など、 Specript言語仕様として実行継続は不可能であると定義された状態に陥った場合のエラーです。

アプリケーションエラーが発生すると、Specript実行環境はJava側へSpecriptApplicationExceptionを スローし、Specriptプログラムコードの実行を中断します。Java側では、このExceptionを キャッチすることでアプリケーションエラーのハンドリングが可能です。なお、 SpecriptApplicationExceptionはRuntimeExceptionです。

以下に定義されたアプリケーションエラーを示します。

アプリケーションエラー 説明
incorrect-arguments 引数の数が定義に一致しなかった
incorrect-argument-type 引数のタイプが定義に一致しなかった
type-mismatched 演算子適用において、オペランドが適用不可能なタイプであった
null-value-referred 値nullに対する演算子適用が発生した
divided-by-zero 値0による除算が発生した
inifinite-range-value listのrange表現において、無限大値を使用できない箇所で使用された
no-such-element recordアクセス演算子において、存在しない要素が指定された
negative-index-applied listアクセス演算子において、負の値のインデックスが指定された
no-case-matched 多分岐演算子において、いずれのケースにもマッチしなかった

10−2.Spec違反

Spec違反とは、proeprty定義時やfunctionの引数への値の引渡し時等において、式の評価値が 指定されているspecに適合しなかった場合のエラーです。

Spec違反は、

property定義における"not null"指定に違反した(not null違反)
specに定義される制約functionを充足しなかった(制約違反)

以上のいずれかによって発生します。

Spec違反が発生すると、Specript実行環境はJava側へSpecriptSpecViolationExceptionを スローし、Specriptプログラムコードの実行を中断します。Java側では、このExceptionを キャッチすることでSpec違反のハンドリングが可能です。なお、SpecriptSpecViolationExceptionは チェック例外です。

SpecriptSpecViolationExceptionからは、制約違反式の評価値を取得することができます。 同時に複数の制約違反が発生している場合は、その全ての違反の制約違反式評価値を取得できます。


目次 | << 前章 | 次章 >>


(c)2007-2008, Specript Development Team Last Updated: 2008-03-06