👋

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

2024/11/03に公開

ごめんなさい。やっぱり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を出力します。

Discussion