- 703 名前:デフォルトの名無しさん [2021/05/21(金) 11:45:49.77 ID:r1IBz1vL.net]
- >>538
(1)もちろん例外を使わずとも関数呼び出し等がエラー値を返すことで全て実現できます (2)ところがエラー値が返ってくると毎回if文やmatch等でエラー時はそこですぐreturnする等の処理を書く必要があって面倒かつコードが醜いため例外の使用が好まれました (3)Rustでは関数の返り値型をResult<T,E>とすることに加えて「?」オペレーター(旧try!マクロ)を使うことで(2)の処理を自動化しました つまり関数等呼び出し毎にifやmatch等で返り値エラーチェック&returnの記述をしなくても末尾に「?」を記述するだけで済みます これでチェーンも出来て具体的には b = a.hage()?.hige()?.hoge()? と書くだけでhage()でエラーが返れば早期エラーreturnしますしhige()やhoge()でエラーでも同様です 関数の返り値型がResult<T,E>であることが使用条件です これはもちろん正常値の<T>型とエラー<E>型のenumです これらにより関数を多段に深く呼び出していても深い所でのエラーがすぐにreturnを多段にしてエラーが戻って来ます したがってRustでは例外を使わなくても困らないのです
|

|