Note

(WIP)Rust 基礎文法 メモ

Rustのインストール

公式サイトに記載の方法で実行。 [embed]https://www.rust-lang.org/ja-JP/install.html[/embed] #### Rustのプログラム実行

  • コンパイル: $ rustc

REPL

https://github.com/murarth/rusti で非公式だけどある様子。ただ2016-08-01以前のものを使用する必要がありそうで悩ましい。 repl.it というサイトがあるみたい ### 文法

コメント

一行コメント // 一行コメント 複数行コメント /* 複数行のコメントが ここで書ける */ ドキュメンテーションコメントなるものもある様子。markdown記法が使える。 /// 一行のドキュメンテーションコメント //! それを含んでいる要素(例えばクレート、モジュール、関数)にコメントを付けます。 //! 一般的にはクレートルート(lib.rs)やモジュールルート(mod.rs)の中で使われる

変数

変数の宣言。デフォルトはイミュータブル。実際に使用される時は値で初期化されている必要がある。 let x = 5; // イミュータブル let mut y = 6; // ミュータブル

パターン

let (x, y) = (1, 2);

型注釈

//xは型i32を持つ束縛で、値は 5 である。 let x: i32 = 5;

スコープとシャドーイング

rubyとちょっと感覚が違うのは *1 で値が書き換わってないところ。変化はスコープの中で閉じている理解。 let x: i32 = 8; { println!("{}", x); // "8"を印字する let x = 12; println!("{}", x); // "12"を印字する } println!("{}", x); // "8"を印字する *1 let x = 42; println!("{}", x); // "42"を印字する

変数

Rustはすくなくとも一つの関数main関数がある fn main() {

} この中に処理を書いていく。引数を取る時は下記のように書く。 // x というなの i32 という型の引数 fn foo(x: i32) {

} 戻り値の型の指定 fn foo(x: i32) -> i32 {

}

リターン

関数の一番最後はreturnを書かない。早期リターンは以下のような感じ ``` fn foo(x: i32) -> i32 { return x;

// このコードは走りません! x + 1 } ```

関数ポインタ

関数の内容をへんすうにいれることが可能。 fn plus_one(i: i32) -> i32 {
 i + 1
}

// without type inference
let f: fn(i32) -> i32 = plus_one;

// with type inference
let f = plus_one; ### プリミティブ型

let x: bool = true; # 真偽値 let x = 'x' # 一文字 let i = 42 # 数値型 u => 符号なし / i => 符号あり / f => 小数点

配列

配列は [T; N] という型を持つ。ジェネリクス<T>がまだよくわかってない。 let array = [0; 20];

let a = [1, 2, 3]; println!("a has {} elements", a.len()); // 表示 添字記法でも値を取り出せる。 let names = ["Graydon", "Brian", "Niko"]; // names: [&str; 3] println!("The second name is: {}", names[1]);

スライス

様々なものからスライスを作るためには &[] の組合せを使うことができます。 & はスライスが参照と同じであることを示し、 [] はレンジを持ち、スライスの長さを定義します。 let a = [0, 1, 2, 3, 4]; let complete = &a[..]; // aに含まれる全ての要素を持つスライス let middle = &a[1..4]; // 1、2、3のみを要素に持つaのスライス

str

let string = "文字列"; // 文字列型

タプル

タプルは固定サイズの順序ありリスト。 let x = (1, "hello"); let x: (i32, &str) = (1, "hello"); // 型注釈付き。様々な方が混在できる。

``` // 値の取り出し let tuple = (1, 2, 3);

let x = tuple.0; let y = tuple.1; let z = tuple.2;

println!(“x is {}”, x); ```