0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクト指向C言語comelangにJava, Rust, Python並みの例外処理が入りました。

Last updated at Posted at 2024-10-19
#include <comelang.h>

exception int fun()
{
    return 1;
}

exception int fun2()
{
    return fun();
}

int main(int argc, char** argv)
{
    int x = fun2();
    
    puts("OK");
    printf("x %d\n", x);
    
    return 0;
}
OK
x 1
#include <comelang.h>

exception int fun()
{
    return none(s"ERR");
}

exception int fun2()
{
    int y = fun();
    
    printf("y %d\n", y);
    
    return 9;
}

int main(int argc, char** argv)
{
    int x = fun2();
    
    puts("OK");
    printf("x %d\n", x);
    
    return 0;
}
ERR
#include <comelang.h>

exception int fun()
{
    return 1;
}

exception int fun2()
{
    int y = fun();
    
    printf("y %d\n", y);
    
    return 9;
}

int main(int argc, char** argv)
{
    int x = fun2();
    
    puts("OK");
    printf("x %d\n", x);
    
    return 0;
}
y 1
OK
x 9
#include <comelang.h>

exception int fun()
{
    return none(s"ERR");
}

exception int fun2()
{
    int y = fun();
    
    printf("y %d\n", y);
    
    return 9;
}

int main(int argc, char** argv)
{
    int x = fun2().rescue {
        puts("UHO!");
        puts(Err);
        return 0;
    }
    
    puts("OK");
    printf("x %d\n", x);
    
    return 0;
}
UHO!
ERR
#include <comelang.h>

exception int fun()
{
    return 1;
}

exception int fun2()
{
    int y = fun();
    
    printf("y %d\n", y);
    
    return none(s"ERR");
}

int main(int argc, char** argv)
{
    int x = fun2().rescue {
        puts("UHO!");
        puts(Err);
        return 0;
    }
    
    puts("OK");
    printf("x %d\n", x);
    
    return 0;
}
y 1
UHO!
ERR

exceptionを戻り値に持つ関数の中ではreturn none(string);が使えます。これを呼び出すと例外が発生します。stringは例外のメッセージです。呼び出し元の関数では.resuceしないと例外の文字列を表示してexitしてしまいます。.resuceすると例外が発生してもプログラムは終了しません。.resuceの中ではErrという変数に例外のメッセージが入ってます。関数がネストする場合はexceptionを呼び出し元の関数につけると深いネストでもreturn none(string);された時点で大域脱出して.resuceで例外を捕捉できます。

0
0
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?