Rust で事前条件を表明するために panic する方法
こんにちは、 @kz_morita です。
今回は、Rust で事前条件をどのように表明するのが良さそうかを調べてまとめました。
前提 Rust には、エラーハンドリングなどをするために Result 型などがありますが、回復不能なエラーを意味する panic があります。 panic は起きると異常終了するものです。
今回は、事前条件を満たさない場合には、panic させるようなコードを考えます。
コード例 n x n の正方行列を扱う型を考えます。
// n x n の正方行列を扱うための型 pubstruct SquareMatrix<T>{arr: Vec<Vec<T>>,n: usize,}impl<T>SquareMatrix<T>{pubfn new(arr: Vec<Vec<T>>)-> Self{// 事前条件: n x n の二次元配列であること letrow_count=arr.len();forrowin&arr{letcolumn_count=row.len();ifcolumn_count!=row_count{panic!("Arguments not n x n arr");}}SquareMatrix{arr,n: row_count}}}二次元配列の row_count と column_count が一致しない場合は生成できないように panic するといったコードです。
Rust で panic する方法 事前条件を満たさない場合に、panic する方法としていくつかあります。
panic! 上記のコード例で使用したマクロです。引数に与えられた情報を表示しつつ panic します。
assert 系 こちらはテストコードなどでおなじみの assert 系で、以下のようなものです。
assert!() assert_eq!() 上記のコード例は if 文 の結果により panic!