目次

Rustの勉強[エラー編]

(更新: )ぎじゅつ

はじめに

#

転職した会社でRustの勉強会をしていて
NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読むことになった。

現状、エンジニアっぽいポジにはいなくて学ぶか迷ったが、面白そうなので続ける

また、私は早めに仕事は納めたのでほそぼそやる

前回の振り返り

#
  • 社内でハッシュマップについてやった
  • これ構造体使えばいらなくね?どこでつかうのってなった
  • jsonをパースするときとか使えるよってなった、なるほどー
    • 正確にはライブラリでハッシュマップ使わなくてもよくなるらしいが

今日読む場所

#

エラー処理を読む

お勉強

#

メモ

#

Rustでは、エラーは大きく二つに分類されます: 回復可能と回復不能なエラーです。

  • はぇ~~
  • 回復可能エラーは問題をユーザなどに報告すれば再実行できる
  • 回復不可能エラーはバグの兆候、配列の境界を越えた箇所にアクセス

    多くの言語では、この2種のエラーを区別することはなく、例外などの機構を使用して同様に扱います。

  • Javaのことかーーーーっ!

    Rustには例外が存在しません。代わりに、回復可能なエラーにはResult<T, E>値があり、 プログラムが回復不能なエラーに遭遇した時には、実行を中止するpanic!マクロがあります

  • あ、だからResult型を良く聞くのにpanic!の話も聞くのか

単純なプログラムでpanic!の呼び出しを試してみましょう:
ファイル名: src/main.rs

fn main() {
    panic!("crash and burn"); //クラッシュして炎上
}
  • そうか、マクロだから呼びだせるのか

  • 当然だけど面白いな

  • RUST_BACKTRACEを設定するとBackTraceが設定される、ふーーん

  • Result型の話になりました

    • お前enumなのかーーーーーーーーーーーー!
    • 天才だな
error[E0308]: mismatched types
(エラー: 型が合いません)
 --> src/main.rs:4:18
  |
4 |     let f: u32 = File::open("hello.txt");
  |                  ^^^^^^^^^^^^^^^^^^^^^^^ expected u32, found enum
`std::result::Result`
  |
  = note: expected type `u32`
  (注釈: 予期した型は`u32`です)
             found type `std::result::Result<std::fs::File, std::io::Error>`
  (実際の型は`std::result::Result<std::fs::File, std::io::Error>`です)
  • 当然型安全と、凄い

まとめ

#
  • 回復可能、不可能エラーがある
  • Result型はenumなのでmatch式で処理が書ける
  • enumは天才