Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rustちょっと触ってみた

 Rustちょっと触ってみた

Hiroaki Osawa

January 17, 2020
Tweet

More Decks by Hiroaki Osawa

Other Decks in Programming

Transcript

  1. 所有権 変数の束縛には所有権をもたせるという特性がある。 let v = vec![1, 2, 3]; let v2

    = v; println!("v[0] is: {}", v[0]); 所有権が v2 に移⾏しているためヒープ上の 1, 2, 3 という実データに対して v も v2 も参照し ている状態は Rust 的に OUT
  2. ⽂字列型の種類が複数 いわゆる⽂字列には、メモリ⻑が決定されている組み込みの str と、メモリ⻑が固定さ れていない標準ライブラリにある String 型がある。 String 型はヒープ(スレッド間で共有できるメモリ領域)に格納可変。 str

    の実データは作成⽅法によって異なる。 実際にコード内で "string" のように書くと静的領域に実データのある &str 型になるので Github からのレスポンスを String として扱う時に⾊々変換しなくてはならない。
  3. Result 型と Option 型 多くの関数がこの 2 つのうちどちらかを返すことが多い。 Option は None

    もしくは Some(値)を返すという型。 None は null のようなもの。 返り値書くときには Some(1) や None という書き⽅をする。 Result 例えば run みたいな関数があったとして pub fn run(args: Vec<String>) -> Result<i32, Box<dyn Error>> ようにエラーを返すかもしれないことを明記できる型。 返り値書くときには Ok(1) や Err(ParseError) という書き⽅をする。 これらの型で返された値を実際の値として扱うには unwrap() をするか、 process(args)? のように末尾に ? 演算⼦をつけて例外や None が出たら関数全体としてエ ラーや None を返すということを明⽰する必要がある。