1
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?

comelangで例外処理を廃止。パターンマッチングを入れました。

Posted at

ごめんなさい。やっぱりVMがない言語で例外は無理でした。バグだらけだったため、廃止。
代わりにパターンマッチングを入れました。

#include <comelang.h>

struct Data
{
    int a,b;
};

int main(int argc, char** argv)
{
    var data = Data { a:123, b:234 };

    data.case {
        (Value === Data {a:wildcard, b:234} {
            puts("MATCH");
        }
        else {
            puts("NO MATCH");
        }
    }

    return 0;
}

[1,2,3].case { (Value === [wildcard,2,3]) puts("MATCH"); }などもOKです。
wildcardはcaseとif, elif, lessなどのみ有効です。

lessはUNIXとCのエラー処理で便利で以下のように使います。

#include <comelang.h>

int main(int argc, char* argv)
{
    system("lllll").less {
        perror();
        return 1;
    }

    return 0;
}

lessが<0でマッチ、ifが!=0でマッチ, elifが==0でマッチです。
戻り値も取れるため、使い勝手がいいと思います。
例えば

#include <comelang.h>

char* fun(int value)
{
    if(value == 0) {
        return null;
    }
    else {
        return xsprintf("%d", value);
    }
}

int main(int argc, char** argv)
{
    puts(fun(0).elif { s"null" });
    return 0;
}

などです。この場合funの引数が1など>0ならputsは数値を出力して、0ならnullを出力します。

1
0
0

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
1
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?