4章頭から4章最後まで。
主にプリミティブ型について。
サンプルコードは動かさないスタイルで読んだだけ。
おぼえがき
ポチポチ打ちながら読んでたら長くなった。
こんな一気に覚えられるわけない。
スカラ型
- ユニット ()
- 真理値 bool, true/false
- 整数 i/u+16/32/64/128, i/u+size, 0xff, 0o744, 0b1010, b'A'
- 符号なしビットシフトはないっぽい
- オーバーフローはDebugビルドだとPanic、Releaseビルドだとオーバーフロー値
checked_*/saturating_*/wrapping_*/overflowing_*
- 浮動小数点数 f32/f64, 0.0, -1_2.34, 123E+66
- 文字 char, 'A', '\', '\x7F', '\'', '漢', '\u{5b57}'
- 参照 &(読専), &mut(読書), *val(値参照)
- メモリ安全なポインタ
- 生ポインタ const T, mut T,
- メモリ安全でないポインタ
- unsafe内でしか使えない(定義はunsafe外でいい)
- 関数ポインタ fn(i32) -> i32,
プリミティブな複合型
- タプル (i32, f64, char)
- 要素数をアリティと呼ぶらしい
let tp =(59, 63); tp.0 ... 59 / tp.1 ... 63
- let文のパターンマッチで分解ができる
let (tx, ty, _) = ((1, 2), (3, 4), (5, 6)); tx ... (1, 2) / ty ... (3, 4) / _ ... Goみたいに無視
- mutを付ければ可変にもできるっぽい
- 要素の書き換えは要素に
ref mut
をつけるlet ((ref mut px, ref mut py), _) = ((1, 2), 'A')
- 要素の書き換えは要素に
- 配列 [false, true], [0; 100] ... ([初期値; 要素数])
- スライス &[bool], &mut [bool], Box<[boo]l>
- 配列要素に効率よくアクセスするための「ビュー」
- 配列だけでなく、メモリに連続的に同じ型のデータを対象にできる(ベクタや多言語作成の配列など)とのこと
- 対象に&と[]をくっつける (型強制で自動的に使われるので無理に使う必要はないかも)
&arr[..](=&arr)
全体へアクセス可&arr[1..5]
要素1〜4までアクセス可&arr[1..=5]
要素1〜5までアクセス可
- Box<[T]>はデータを所有する。実データはヒープに作られる
- 文字列スライス "abc"
\
でエスケープ- リテラルを複数行に渡って書くと、改行やスペースが入る
r#"raw文字列"#
エスケープを多用する正規表現などで便利とのことr###"raw文字列 "##"を含めても大丈夫"###
- UTF-8形式でエンコード
- len()はUTF-8のバイト数
- ん、何文字目をサクッと取り出す方法がない?
s.chars()
char型のイテレータを取り出すs.char_indices()
charとstr上の開始バイトがペアになったタプルを取り出す- 1行ずつ取り出すイテレータもある
let mut lines =strval.lines(); lines.next()
- 可変の文字列スライスは、char,strから直接作れない。String型を経由する
let mut s1 = "aあ".to_string(); let s2 = "a1.as_mut_str();"
- 可変と言っても要素の追加・削除はできない。要素の中身は変更できる
- タプル (i32, f64, char)
unreachable!()で強制パニック終了
課題
- Box<[T]>の使い方が謎。5章に何やら続きがあるらしい
- Sliceはメソッドいっぱい https://doc.rust-lang.org/std/primitive.slice.html
- Rustで文字列を扱うのは大変なのかも? 整理が必要
- 作者: κeen,河野達也,小松礼人
- 出版社/メーカー: 技術評論社
- 発売日: 2019/05/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る