チラシの裏 電子版

(ここにチラシの裏を置く)

特にコードは書いてない

Rustの所有権を学んでいる最中です。

まともに扱ったことのある言語はJavaだけだったので、

普通に参照を渡せるもんだと思っていました。

基本的には参照を渡すんじゃなく、

参照をあげるような感覚でしょうか?

たぶん参照を渡す機能もあると思うのですが、それは追々。

コード例を先に見るよりも、この辺を調べておいてから

コードを見るほうが、理解できそうな気がします。

 

がんばります。

コンパイルエラーの魂の言葉 #Rust #プログラミング

この記事はAIによるタイトル生成を利用しています。

このタイトル気に入ってる。

 

Rust日本語ドキュメントを読む会 3章

3-1 変数と可変性

https://doc.rust-jp.rs/book-ja/ch03-01-variables-and-mutability.html

さっそくコンパイルエラー出してみた

コンパイルエラー

一回宣言した変数はデフォルトで不変になるため、値を再代入しようとすると怒られるらしい。

コンパイルエラーの魂の言葉を忘れないようにしたい。

コンパイルエラーは、イライラすることもあるものですが、まだプログラムにしてほしいことを安全に行えていないだけということなのです。

で、変数を可変なものとして扱うにはmutが必要になるわけだが、自分はJavaしか扱ったことがなかったから、ある意味まったくの逆で新鮮。 こっちのほうが値を変えるのに気合が要りそう。

定数の場合は、constで宣言して、しかも関数の戻り値とかを代入したりはしない。ありがたい。

スネークケース

https://developer.mozilla.org/ja/docs/Glossary/Snake_case

数値をアンダースコアで区切れるのは、Javaといっしょ?

 

シャドーイングについては、本当に同じ名前で別の変数をつくっているように見える。可変な変数を使いまわすのとはわけが違う。

シャドーイングは寿命が決まっている

 

Rust日本語ドキュメントを読む会: 数あてゲームの挑戦#ループとエラーハンドリング

この記事はAIによるタイトル生成を利用しています。

すげえぞ今回のタイトルは当たっている。内容も一貫しているということか。

Rust日本語ドキュメントを読む会 2章 数あてゲーム

イテレーション4

ここら辺から

https://doc.rust-jp.rs/book-ja/ch02-00-guessing-game-tutorial.html#%E3%83%AB%E3%83%BC%E3%83%97%E3%81%A7%E8%A4%87%E6%95%B0%E5%9B%9E%E3%81%AE%E4%BA%88%E6%83%B3%E3%82%92%E5%8F%AF%E8%83%BD%E3%81%AB%E3%81%99%E3%82%8B

 

前回までで数あてゲームができるようになったので、ループを使って複数回ゲームができるように変更するらしい

loopを使って、無限回ゲームができるようになりました!本日はここまで。

残念ながらこれだけでは問題があり、正解してもゲームが終了しないです

終わりが見えない

 

このゲームを終わらせる方法は、ゲームをクラッシュさせること。...ではなく、breakを使うこと

ゲームをクラッシュさせるといえば、数字ではなくアルファベットを入力したらゲームが強制終了しますよね

いちいち強制終了では面倒だし、こうならないようにしたい

入力をparseして、失敗した時にexpect()から強制終了する(パニックする)ようにしているため、ここを変えればよさそう

https://doc.rust-lang.org/std/result/enum.Result.html#method.expect

また、このparse結果をOk/Errでマッチさせる方法は、expectでも実装されている方法っぽいです。ただ、expectの場合、Errにマッチするとクラッシュする

https://doc.rust-lang.org/src/core/result.rs.html#1053-1055

最後に、答えの表示を隠して、完成!

関連関数とメソッドの違いって何でしょうか。

 

AIタイトル生成チュートリアル:数あてゲームの実装

この記事はAIによるタイトル生成を行っています。

タイトルが意味わからないから内容も意味わからない。

Rust日本語ドキュメントを読む会 2章 数あてゲーム

イテレーション3

このあたりから

https://doc.rust-jp.rs/book-ja/ch02-00-guessing-game-tutorial.html#%E4%BA%88%E6%83%B3%E3%81%A8%E7%A7%98%E5%AF%86%E3%81%AE%E6%95%B0%E5%AD%97%E3%82%92%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B

ようやく生成した数字と入力を比較するところまできた。

Orderingという型を新たに使っている。これとmatchを組み合わせているが、matchを始めてみた。switch式的な感じなのか?

https://doc.rust-lang.org/std/cmp/enum.Ordering.html

matchの中には、パターンと、そのパターンとマッチした時に実行するコードを一行で書いてあるっぽい。アームがいっぱいある。千手観音。

実際にコンパイルしてみるとエラーに。

コンパイルエラーの様子

guessがString型に相当するため、数値の型と比べることができないらしい。

let guess2回出てないか?セーフらしい。シャドーイングなんて技名もついている。型を変えるときに利用するとか。

trim()メソッドで前後の空白・改行を削除、

https://doc.rust-lang.org/std/primitive.str.html#method.trim

Rustは数値型が細かく、いろいろあるっぽい。どちらかというと、見慣れないだけ?

実行してみたら、ちゃんとエラーも見れました。

数値以外を入力

 

イテレーション2の機能拡張 #AI #タイトル自動生成

この記事はAIのよるタイトル自動生成を利用しています。

 

Rust日本語ドキュメントを読む会 2章 数あてゲーム

イテレーション2

このあたりから

https://doc.rust-jp.rs/book-ja/ch02-00-guessing-game-tutorial.html#%E7%A7%98%E5%AF%86%E3%81%AE%E6%95%B0%E5%AD%97%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B

クレートと呼ばれるものと連携して、機能を追加することができるっぽい。 クレートはRustソースコードの集まりで、cargo buildして作ったバイナリクレートや 他プログラムで使えるライブラリクレートが存在する。

今まで触れてこなかったtomlファイルに手を付ける。mavenのポムみたいな感じでしょうか。 今のところtomlファイルで見えているヘッダはpackageヘッダとdependenciesヘッダの二つ。

dependenciesヘッダにrandクレートを追加してからcargo buildをすると、なんか色々コンパイルし始めた。randクレートを扱うのに必要な諸々をwebから拾ってくれているらしい。

バージョン違いの問題を吸収するためにcargo.lockファイルが用意されているらしいけど、当分世話にならないかもしれない。バージョンアップデートのためにcargo updateもあるらしい。スゴイ多機能。

randを使い始めたのでドキュメントを探す。Rustのドキュメントって英語版だけ?

https://docs.rs/rand/latest/rand/

さらに進めていくとRngトレイトが登場。トレイトってなんだ?クレートの中に、トレイトがあるってことなのか。

https://doc.rust-jp.rs/book-ja/ch02-00-guessing-game-tutorial.html#%E4%B9%B1%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B

cargo doc --openコマンドにより、現在の依存関係をもとにドキュメントを生成してくれた。自力でrandのドキュメントを検索しなくても、コマンド一つで用意してくれて、左のサイドバーからrandを選択!スゴイ。

現在開いているプロジェクトをcargo doc --openして開いた

 

可変なguessへの参照📚

本記事はAIによるタイトル生成を用いて、「初心者必見」と「解説」の文言を省いています。タイトルが破綻してておもろい、内容が支離滅裂なんだろう。

 

Rust日本語ドキュメントを読む会 チャプター2 数あてゲーム

https://doc.rust-jp.rs/book-ja/ch02-00-guessing-game-tutorial.html

 

コマンドライン上でプロジェクト作ったことないので、cargo一つで準備してくれるのを見るとうれしくなる。

イテレーション1

ユーザ入力を受け付ける都合上、ioライブラリを使う必要があって、そのために頭の方でuseを使っているらしい。

ほかのライブラリもあるのかね?stdで調べたらライブラリっぽくないのも出てきた。調べ方も調べないと。

https://doc.rust-lang.org/std/prelude/index.html?search=std

変数の宣言がはじめてみる形。デフォルトで不変なところ、String型の隣に::がくっついているところ。

あと代入って言うんじゃなくて束縛って言うんだ。名前に値をくっつけるイメージ?

io::stdin()のところで再び::が。でも次の行では.が使われている。なにか使い分けなければならない理由がある?

https://doc.rust-lang.org/std/io/index.html

https://doc.rust-lang.org/std/io/struct.Stdin.html

guessが可変だから、guessへの参照も勝手に可変、、と思いきや、明示しているような感じがする。