Eval() とデバッグ

下記の用法です。

  • Try/Catch/Done によるエラー処理

  • Eval() 関数

  • Raise() 関数

  • Assert() 関数

Try/Catch/Done

文法:

Try
        ステートメント...
Catch
        ステートメント...
Done

まず Try ブロックのステートメントが実行されます。 そしてエラーが発生すると catch ブロックのステートメントが実行されます。

catch ブロックの内側では変数 cCatchError でエラーメッセージを取得できます。

用例:

Try
        see 5/0
Catch
        see "Catch!" + nl + cCatchError
Done

実行結果:

Catch!
Error (R1) : Cann't divide by zero !

Eval() 関数

Eval() 関数は実行時に文字列からコードを実行します。

文法:

Eval(cCode)

用例:

Eval("nOutput = 5+2*5 " )
See "5+2*5 = " + nOutput + nl
Eval("for x = 1 to 10 see x + nl next")
Eval("func test see 'message from test!' ")
test()

実行結果:

5+2*5 = 15
1
2
3
4
5
6
7
8
9
10
message from test!

Return 命令で値を返せます。

用例:

see Eval("return 5*5")

実行結果:

25

Raise() 関数

Raise() 関数は例外を発生します。

文法:

Raise(cErrorMessage)

この関数はエラーメッセージを表示した後にプログラムを終了します。

raise() 関数で生成された例外は Try/Catch/Done により回避できます。

用例:

nMode = 10

if nMode < 0 or nMode > 5
        raise("Error : nMode not in the range 1:4")
ok

実行結果:

Line 4 Error : nMode not in the range 1:4
In raise in file tests\raise.ring

用例:

try
        testmode(6)
catch
        see "avoid raise!"
done

testmode(-1)

func testmode nMode

        if nMode < 0 or nMode > 5
                raise("Error : nMode not in the range 1:4")
        ok

実行結果:

avoid raise!
Line 12 Error : nMode not in the range 1:4
In raise In function testmode() in file tests\raise2.ring
called from line 7  in file tests\raise2.ring

Assert() 関数

Assert() 関数はコードの実行前に条件をテストします。

テストに失敗した場合は、アサートの条件を有するエラーメッセージを表示後にプログラムを終了します。

文法:

Assert( 条件 )

用例:

x = 10
assert( x = 10)
assert( x = 100 )

実行結果:

Line 3 Assertion Failed!
In assert in file tests\assert.ring