(WIP)Rust 基礎文法 メモ
Date:2018-06-18 01:00:09 +0900
Categories: TECHNOLOGY
Categories: TECHNOLOGY
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);Tweet