4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rust†超†初心者によるRust備忘録 †型†

4
Last updated at Posted at 2020-06-16

おしながき

  • 自己紹介
  • 概要
  • Result
  • Option

自己紹介

どうも、***†限界開発鯖†***に住んでいる高専生、いっそうです。
最近は課題を放り投げてコーディングしています。
twitterにも住んでます。

概要

最近Rustの勉強をこのリポジトリでの開発を通して始めました。

その中でRustで結構躓いてた(躓いている)点について自分なりの認識をまとめていきたいと思います。

Result

定義

関数の返り値として返して、成功、失敗を表す型。
定義としては

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

となっており、Tが成功したときに返す型、Eが失敗したときに返す型となっています。
特徴としては、エラー処理をしないと値が取り出せないということが挙げられます。

実際の使い方

多分あれこれ言っててもわからんと思うので実際のコードから見ていきましょう。

fn calc(a: i32, b: i32, c: &str) -> Result<i32, String> {
  if c == "fail" {
    return Err(c.to_string());
  }
  Ok(a + b)
}

fn main() {
  let result = match calc(3, 2 "fail") {
    Ok(number) => number,
    Err(_) => 0
  };
}

今回の場合はcalca,b,cの3つの変数を受取り、cfailである場合である時にErr("fail")を返します。

そして、cfail以外である場合はaとbを足し合わせた結果をOk(result)という形で返します。

今回は、Ok、Errの2種類のどちらかが返ってくるので、matchでそれぞれについて処理を行います。
この場合だとErrが返ってくるとresultは0になります。

便利な書き方

正直上の書き方を何回もやるのは面倒です。
matchなんてなんどもなんども書きたくありません

というわけで?の出番です。

?

これは別に伏せ字にしてるわけではありません。
?はもし、Err()が返ってきた場合にErr(帰ってきたErrの中身)としてErrを返すものです。

訳わかりませんね。
でも使ってると便利さがわかってきます。
というか先駆者様の記事に書いてあるのでそっち読んだほうが早いです。

危険な方法としてはunwrapがあります。
これはResultにErrが入っていたら即パニックになりますが、Ok(value)のvalueを取り出せます。

Option

えっOptionalじゃないの?って思ったかも知れません。

はい、Optionです。
基本の考え方はOptionalと同じです。

定義

とりあえず定義を見てみましょう。

enum Option<T> {
  None,
  Some(T)
}

まあよくあるOptionalですね。
値がある場合はSome(T)が入ります。

値の取り出し方

値の取り出しにはmatchが使えます。

let hoge = match somethingOption {
  Some(fuga) => fuga,
  None => INITIAL_VALUE
};

こんな感じですね。

危険な方法としてはこれまたunwrapがあります。
これはOptionにNoneが入っていたら即パニックになりますが、Some(value)のvalueを取り出せます。

まとめ

  • 関数でエラーが発生するときはResult<T, E>を返す
    • エラーの処理は呼び出し元で?matchで行う
  • 関数で値が返ってこない可能性がある場合はOption<T>を返す
    • エラーの処理は呼び出し元でmatchで行う
  • 面倒になったらunwrap
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?