yak shaving life

遠回りこそが最短の道

Rust勉強にっき(2)

日記と言いつつ何日かの隙間時間にやったことのまとめみたいになってしまっているが特に気にしないことにしようそうしよう。

Chapter 3, 4, 5が終わった。とりあえずデータ型とstructが分かったのでC言語の基礎文法(ポインタ除く)に相当するようなところは理解できたはず。4章はOwnershipだったのだが、これまで全く知らなかった概念が出てきたことにより何故だかテンションが上がってきた。知的好奇心を刺激されてるということなのか、それともRustの設計に感心というか感動しているのか。よくわからないけどなんか楽しいです(^q^)

Chapter 6を今やっている。Enumとパターンマッチング。モダンな言語はこの辺が強い印象があるので、Javaももっとパターンマッチングとかできるようになって欲しいなー。なー。JEPとかJSRにあったりするのだろうか。知らんけど。

しかし、普段は仕事にほとんど関係ない技術を勉強していてもなかなかモチベーションが保てないタイプなのだが、何故だかRustはやりたくなる。なんでだろう。the bookを完走して、自分で何かモノを作ってみたらその理由が見えてくるのかもしれないなあ。

例によってDiscordのメモ:

rustup docs --book でthe bookをオフラインで開けるのか。これで新幹線でも飛行機でもthe bookし放題☆
そんなやつはいなさそう

時間ないがすこしでもchapter 3進めよう
statement(文)とexpression(式)の違いがRustのfunctionにとっては大切、らしい。ほう?
statement does not return a value
なのでx = y = 1 とかができない。なるほど
ブロック{} は式
式は終わる時セミコロンいらない、セミコロンつけたら文になる。理解
最後に評価された式が関数の返り値になる。明示的にやるときはreturn。Rubyと同じ!
RubyとRustって字面似てるよね

おお、Rustにもrangeがある!yay
しかし1..4 はを含まないらしい。含みたい場合は1..=4
これはRubyやってると混乱するな…なんで逆なんだ

やっとChapter 3が終わった!じっくりやりすぎかな…Chapter 20にたどり着くのはいつなんだ。。

お、Chapter 4は噂のOwnershipか

string literalとString型は違うのか…
信じられないくらい丁寧だなこのチュートリアル
変数への代入、または関数に引数を渡すとmove/copyが発生すると。
returnするとownershipも帰ってくる
The ownership of a variable follows the same pattern every time: assigning a value to another variable moves it. When a variable that includes data on the heap goes out of scope, the value will be cleaned up by drop unless the data has been moved to be owned by another variable.
これを毎日唱えて暗記しよう

this is too much ceremony
なかなか面白い表現だなーこれ。日常会話で使ってみたい。too much ceremony!

参照で& とか* とか出てくると急にC言語みがあるな
We call having references as function parameters borrowing
borrowing完全に理解した
なるほどborrowしてるだけなのでmutationはできない。この辺はCと真逆感あってまた混乱しそうだ…Rust脳にならないと…

References and Borrowingが終わった。もうRustはマスターしたと言っても過言ではないだろう。(過言)
次はSlice.
また明日

enumerate はインデックスと要素へのreferenceを返す。のでfor (i, &item) in hoge.enumerate() と書く。ふむ

String sliceとな。&s[0..5]

早速borrowing ってなんだっけ…となっている。記憶力ェ..
あれ、引数に参照を取るのがborrowingじゃなかったっけ?s.clear() のs もborrowingなのか。ふーむ
レシーバも含まれるのか・・・?
Slice &str はimmutable。そしてString literalはslice。ほえー
Ownershipが終わった、2㍉くらいは理解できたかな…
Chapter 5は struct
field init shorthand, JavaScriptみがあるな

5.3 に答えがあった Rust makes borrowing implicit for method receivers
first parameterにselfを取らない場合Associated Functionになる。static methodみたいなもんか。
日本語ではなんて訳されてだろうこれは
関連関数 とな
Chapter 5終わり。次は6、enum and pattern matching
今日はここまでかな。いつ終わることやら