読者です 読者をやめる 読者になる 読者になる

【D言語】std.exception.ifThrown

std.exceptionにはifThrownという関数があります。ifThrownは、例外が投げられた時、投げられた例外に応じて任意の値を返すことができるものです。通常のtry catchよりも関数型な書き方ができます。


module main;

import std.conv : to, ConvException;
import std.exception : ifThrown, RangeError;
import std.stdio : writeln;

static assert(__VERSION__ >= 2063);

void main(string[] args) {
     int num = args[1]
          .to!int()
          .ifThrown!ConvException(1) // 引数がintに変換できない場合
          .ifThrown!RangeError(2);  // 引数が渡されていない場合
     num.writeln();
}

$ rdmd main.d 0
0
$ rdmd main.d a
1
$ rdmd main.d
2

なかなか便利に使えます。

担当:美馬(try catchの出番が減りそう)