Skip to content

fp_Rust

Keiji Matsuzono edited this page Mar 28, 2023 · 3 revisions

参照透過性

immutable

例外を使わないエラー処理

chatGPT への質問と結果。

【Q】例外を使わないエラー処理とは? 代数的データ型をどのように使うか、説明してください。

【A】例外を使わないエラー処理とは、プログラムの実行中に予期しないエラーが発生した場合、例外をスローしてプログラムの制御を転送する代わりに、関数やメソッドなどの戻り値にエラー情報を含めて処理を行う方法です。

代数的データ型は、関数やメソッドの戻り値にエラー情報を含めるために使用されることがあります。代数的データ型は、異なる種類の値を持つ列挙型のようなものであり、エラー情報を表すための型を定義することができます。

例えば、次のようなエラー情報を表す代数的データ型を定義することができます。

enum Result<T, E> {
    Ok(T),
    Err(E),
}

この代数的データ型は、戻り値として正常終了時には Ok に値を含め、異常終了時には Err にエラー情報を含めて返すことができます。

このような代数的データ型を使用することで、例外を使わないエラー処理が可能になります。ただし、代数的データ型を使用する場合は、呼び出し側で必ずエラー情報をチェックする必要があります。

【Q】代数的データ型とパターンマッチを使ったエラー処理について説明してください。

【A】代数的データ型とパターンマッチを使ったエラー処理は、関数やメソッドの戻り値にエラー情報を含めて処理を行う方法です。この方法は、例外を使わないエラー処理の一種であり、安全性や信頼性の高いプログラムを実現するために有用です。

代数的データ型は、異なる種類の値を持つ列挙型のようなものであり、エラー情報を表すための型を定義することができます。たとえば、次のような代数的データ型を定義することができます。

enum Result<T, E> {
    Ok(T),
    Err(E),
}

この代数的データ型は、戻り値として正常終了時には Ok に値を含め、異常終了時には Err にエラー情報を含めて返すことができます。

パターンマッチを使用することで、関数やメソッドの戻り値に含まれるエラー情報を簡単に処理することができます。たとえば、次のような関数を考えてみましょう。

fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
    if b == 0 {
        return Err("division by zero");
    }
    Ok(a / b)
}

この関数は、引数 b が 0 の場合には Err にエラー情報を含めて異常終了し、それ以外の場合には Ok に計算結果を含めて正常終了します。この関数を呼び出す場合には、パターンマッチを使用してエラー情報を処理することができます。

let result = divide(10, 0);
match result {
    Ok(value) => println!("result: {}", value),
    Err(error) => println!("error: {}", error),
}

この例では、関数 divide を呼び出してエラー情報を含む戻り値を取得し、パターンマッチを使用して正常終了時と異常終了時の処理を分岐しています。

代数的データ型( Algebraic data type)

map, reduce, filter

無名関数(ラムダ)

高階関数

  • 関数の引数として関数を取る。
  • 関数の戻り値として関数を返す。

関数合成

カリー化

部分適用

再帰

パターンマッチ

型推論

Clone this wiki locally