Eval() とデバッグ — プログラミング言語 Ring 1.14 取扱説明書

Skip to content

# 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