マガジンのカバー画像

Rust100本ノック

13
Rustの勉強をちょこちょこしている話です。 もしこのお話がみなさんのRustの学習に役立つことがあれば、投げ銭(サポート)していただけるとうれしいです。
運営しているクリエイター

#Rust

お勉強: 100本ノック on Rust

学生に課すなら自分でも少しはやらないと仕事で授業を持っている身です、メインとはいえませんが、プログラミングを教える科目に今年から参加しています。そこでの主戦場はJavaです。Javaのことを学生より半歩だけ先に知っておく必要があるのは間違いないのですが、別にJavaという言語に固執する気は個人的にはまるでありません。

ということで今手を出してるのはRustです。ある意味で次世代のCともいえるRu

もっとみる

アレ? 案外無いの? 文字列の反転 @Rust

Rust100本ノック中の気づきみたいなモノです。

たとえば"abc"を"cba"にするような変換ですが、String::reverseでもないかと思ったら案外無かったり。

んじゃ、どうしようかと言うことで少し分解して考えたらこうなるわけで…

1. 文字単位で分解する
2. 分解したモノを反転してくっつける

前者については、String::chars()というものがあり、イテレータとして機

もっとみる
Rust100本ノック: 数字を文字列に & 文字列の結合問題

Rust100本ノック: 数字を文字列に & 文字列の結合問題

期末試験対応とかでひーひーしてたのでちょっと休んでましたが再開。今朝はNo55,56をやってました。ここに来て(休んで手のど忘れも手伝って)、数値を文字列にする方法を忘れてしまっていたのですが、個人的にはまだ不可解という感じです。

let test_a = (100).to_string(); // OK(数字→文字列 は基本コレでOK) let num = 100; let te

もっとみる
Rust100本ノック:短絡をどこまで期待して良いのやら

Rust100本ノック:短絡をどこまで期待して良いのやら

ということで継続中のRustで100本ノックです。

今週もちょっとずつ進めており、テストを導入することで、サンプルの入出力の通りのデータが得られるかを評価してからmainを書く週間をほんのり獲得しようとしてます。この能力は、本業?(授業)のJavaでもテストを意識して書く(=仕様を決める)能力につながるとほんのり期待してます。

で、No.52にて閏年の計算を行うロジックというものを再認識してま

もっとみる
Rustで100本ノック: テストコード

Rustで100本ノック: テストコード

おはようございます、100本ノック、継続中です。

中級編に入り、ちょっと難しいロジックの登場です。自分でも『これでいいのか?』と思ってしまうようなことが出てきそうなので、サンプルをベースにテストを組み込んで安心感を高めたいと考えるようになってきました。

素材はNo.44(円とドル円を渡してドル・セントを計算するもの)です。Rustでは、testというアノテーション(というの?)が用意されていて

もっとみる

Rustで100本ノック: 配列添え字の型

Rustで100本ノック、本日は39まで完了し、初級編終了です。配列添え字の範囲をチェックしなくて良いという緩い設計のためか、難しいコードにならずに楽です。

ここに来てちょっとハマったのが、入力で添え字番号をもらってその値を出すという問題でした。

// No.035fn main() { let array = [3, 7, 0, 8, 4, 1, 9, 6, 5, 2]; let n

もっとみる
Rustで100本ノック: match式悩み中

Rustで100本ノック: match式悩み中

継続中のRustで100本ノック、No.34まで完了しています。この辺りはループに関する問題ですが、インデックス付きループにおいて特定要素を出力しないという形で配列の中を走査して処理する案件が多いです。今時のものならfilter的なモノを用いて除外してから出力というのがトレンドなのでしょうか

# Javaっぽい疑似表現ですarray.filter( x -> x != number ).fore

もっとみる
Rust100本ノックより: ライブラリの作り方(準備編)

Rust100本ノックより: ライブラリの作り方(準備編)

用語的にはライブラリクレートですね。プロンプトを出して文字列を入力させ、数値として取得させようというコードはNo.5あたりからちょこちょこ使っているため、コードに何度も含めておくのはしのびないですね。ということで良くあるのが「ライブラリ」という形で分離しておいて、必要なときに取り込むというものです。

ここでは、「文字列を入力させ、数値を返す」コードをライブラリに追い出して、差し替えてみたいと思い

もっとみる

Rust100本ノックより: ライブラリの作り方(追い出し編)

準備編では、内包するライブラリクレートの作り方を出してくれてました。今度はライブラリクレートに実際のコードから移していきます。

大元のコード大元のコードとして、No.005を使ってみます。

コードはこんな感じが初期状態になります。

use std::io::{self, Write};fn get_number_with_prompt(prompt: &str) -> i32 { pri

もっとみる
Rustで100本ノック: 配列へのアクセス

Rustで100本ノック: 配列へのアクセス

100本ノックを今朝はちょっと進めてます。毎日というのもちょっと難しいけどね。タイトル絵は配列よろしく並んでるペンギンさん。ちょっと涼しくなると良いな…

で、No.17にていよいよ配列のお出まし。Rustでは配列はスタック上に取られる一般的な配列表現のほかにも、ベクタと呼ばれるヒープ上の表現が登場します。こちらはベクタということもあって伸び縮みできるみたいです。

問題はアクセス方法で、単純な配

もっとみる
Rustで100本ノック: 文字列を数値にする話

Rustで100本ノック: 文字列を数値にする話

本日の100本ノックメモ2本目、文字列を数値にしたいということで、このあたりはNo.5とかで登場してきました。

いわゆる型変換はasを使って行えることはそれなりにわかってます。

let f = 3u8 as f32; // 整数をf32へ

だからといって、文字列を直接数値変換するのは存在しませんのでエラーになります。

この辺りはPythonやRubyならありそうなものですが、文字列をメモリ

もっとみる
Rustで100本ノック: 標準入力からの文字入力と数値変換

Rustで100本ノック: 標準入力からの文字入力と数値変換

ということで100本ノックやってますが、その中でキーボード入力というのが発生してきます。初心者的なコードではお約束ですね… ここではそのときに遭遇したことのおさらいリプレイです。

これが最良かはともかく、基本的な処理として、std::io を使います(というかググって確認してました)。クラス的なモノ?​

fn main() { println!("何か入力を"); let mut da

もっとみる