RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

Rust

Rust スレッドの実行結果を受け取る join, unwrap_or

概要 スレッド終了時に実行結果を受け取るには「join().unwrap_or(...)」を使う。 プログラム例 本スレッドから別スレッドに数値を渡す。 別スレッドでは、10000÷数値 の計算式の文字列を作る。 これを本スレッドに渡す。 use std::thread::{spawn, sleep}; …

Rust 練習問題「ループなしのナベアツ」 map, collect

概要 前回、ナベアツ処理を記述する際には「for」文で繰り返し処理を行った。 範囲(1..=99)に対して「map」を使えば for 文が不要になるのでは、という試み。 for, loop, while を使わずに、ナベアツを実現してみよう。 仕様 1 からカウントアップしていく。…

Rust 配列の操作 iter, cloned, collect, filter, map

概要 配列の中身をひとつずつ取り出すには iter() を使う。 取り出した結果を新しい配列にまとめるには cloned(), collect() を使う。 取り出したい中身を限定するには filter() を使う。 取り出した中身に変更を加えるには map() を使う。 プログラム例 配…

Rust 配列の使い方 vec!, iter, enumerate

概要 同じ型の変数を大量に作る代わりに、配列を使うと便利。 配列には固定配列と伸長可能な配列の2種類がある。 for文で今何番目を処理しているか知りたいときは「iter().enumerate()」を使う。 配列を使う場面 5つの変数に入った数値を足し合わせるプロ…

Rust 文字列の長さ・分割・切り出し

概要 文字列の操作方法を紹介する。 文字列の長さを求める 文字列のまま操作する場合は chars().count() 文字配列について操作する場合は len() fn main() { let 文字列 = "あいうえおかきくけこさしすせそ"; println!("{}", 文字列.chars().count()); let …

Rust 文字列のアクセス chars, nth, collect, []

概要 文字列のn番目にアクセスするには nth(数) を使う。 長い文字列ほどアクセスに時間がかかる。 char の配列にするという手もある。 プログラム例 文字列「あいうえおかきくけこさしすせそ」について。 10番目の文字を表示する。 fn main() { let 文字列…

Rust スレッドに終了命令を送る try_recv

概要 スレッドに終了命令を送るには channel を使う。 受信の有無を確認するには try_recv を使う。 受信内容を確認するには match を使う。 プログラム例 本スレッドで1秒待機している間に、別スレッドはカウンタを回す。 本スレッドは別スレッドを停止さ…

Rust スレッド間の通信 channel, send, recv

概要 別のスレッドにデータを送受信するには channel を使う。 データを送信するには send を使う。 データを受信するには recv を使う。 プログラム例 1から50までの和をスレッド1で計算する。 51から100までの和をスレッド2で計算する。 本スレッドでそれ…

Rust スレッドの生成と合流 spawn, join

概要 複数の処理を並行して実行するにはスレッドを生成する。 スレッドを生成するには「spawn」を使う。 スレッドの終了を待つには「join」を使う。 処理をある時間だけ停止させるには「sleep」を使う。 プログラム例 別スレッドで0.5秒間隔で5回「▲」と表示…

Rust 関数で処理に名前をつける fn

概要 関数を作ると、処理に名前をつけることができる。 関数を作成するには「fn」を使う。 入れる値と出る値の種類(型)を指定する必要がある。 プログラム例 関数の名前は「ワンワン」とする。 関数に数値(i32)を渡すと、文字列(String)が出てくる。 …

Rust 分岐についてもっと詳しく if, else

概要 「if」「else」でプログラムの流れを分岐できる。 「match」よりも単純な分岐に向いている。 プログラム例 持ち金が5000円以上なら「n円も持っている」と表示する。 持ち金が5000円より少なければ「n円しか持っていない」と表示する。 fn main() { le…

Rust 練習問題「3がつくとアホになる」

概要 2010年ごろに流行した「世界のナベアツ」のネタを Rust で再現する。 分岐の「match」や「if」、繰り返しの「for」を使えばできるはず。 以下の仕様を満たすようなプログラムを Rust で組んでみよう。 仕様 1 からカウントアップしていく。「1」「2」 3…

Rust 繰り返しループ for, loop, break

概要 処理の繰り返し(ループ)をするには for を使う。 繰り返し回数が読めないときは loop を使う。 プログラム例 1 から 10000 までの数の合計を表示する。 fn main() { let mut 合計 = 0; // 後で変更されるので mut が必要 for 回数 in 1..=10000 { 合…

Rust 数値で分岐する match, ..=, |

概要 数値で分岐するには match を使う。 数値の範囲で処理を分けたい場合は「..=」を使う。 いくつかの数値の場合に対応する場合は「|」を使う。 プログラム例 文字列の入力を要求する。 0~59 なら「不合格」を表示する。 60~99 なら「合格」を表示する。…

Rust 文字列で分岐する match, as_str

概要 分岐するには match を使う。 文字列を比較対象にするには as_str を使う。 コード 入力されたのが「いぬ」なら「ワン」と出力する。 入力されたのが「ねこ」なら「ニャー」と出力する。 入力されたのが「ひと」なら「オギャア」と出力する。 それ以外…

Rust 入力した文字列を数値に変換する parse, match

概要 文字列を数値に変換するには parse を使う。 単純な実装だと、変換失敗時にプログラムが落ちる。 変換失敗時の処理を書くには match を使う。 コード 文字列の入力を要求し、99 を掛け算する。 use std::io::*; fn main() { let 入力 = コンソール入力(…

Rust 文字列の入力 stdin, read_line

概要 文字列をコンソールから入力するには、stdin() を使う。 1行ではできないので、関数にまとめる。 プログラム例 標準入力から文字列を受け取る関数「コンソール入力」を作成する。 use std::io::*; // stdinを使うのに必要 fn コンソール入力() -> Stri…

Rust 文字列の連結・結合 String::from, +=, format!

概要 文字列の連結は、4種類くらいやり方がある。 編集可能な文字列に対して「+=」で連結できる。 シンプルな方法もある。 プログラム例 文字列「ABCD」と「EFG」と「HIJK」を連結して、それを表示する。 fn main() { let mut 連結 = String::from("ABCD");…

Rust デバッグで変数の中身を見る

概要 プログラムを動かしながら変数の中身を見ることができると便利。 このページの手順を踏んでいることが前提 日本語など半角英数字以外を表示するためには、ひと工夫が必要。 デバッグ プログラムのミスを治すことを、虫(バグ)取りにたとえて「デバッグ…

Rust 変数に値を保持する let, mut

概要 数値を変数(記憶する場所)に保持するには「let」を用いる。 保持した値は、後で計算に使うことができる。 変数の名前には、日本語も使える。 プログラム例 変数を使って計算し、結果を表示する。 fn main(){ let ア = 10; // └ 10 を「ア」に入れる l…

Rust 基本的な計算 + - * / %

概要 足し算(+), 引き算(-), 掛け算(*), 割り算(/), 割った余り(%) を計算できる。 割り算は整数部分しか計算しない。 小数点以下を計算する方法もある。 プログラム例 2 + 3 = 5 2 - 3 = -1 2 × 3 = 6 2 ÷ 3 = 0 (小数点以下は切り捨てる) 2 を 3 で割っ…

Rust 文字列や数値の出力 println!

概要 文字列の出力には「println」を使う。 文字列も数値も出力できる。 プログラム例 「ABCDE」を画面に出力してみる。 fn main() { println!("{}", "ABCDE"); } 数値や計算結果も出力できる。1 + 2 = 3 fn main() { println!("{}", 1 + 2); } 日本語や絵文…

Rust の導入

概要 プログラミング言語 Rust でプログラムを書くための下準備 Rust の紹介 Rust の利点 実行速度が速い。 消費するメモリが少ない。 メモリアクセス違反が起こりにくいので安全。 Rust の欠点 プログラムを動かすまでに覚えることが多い。 厳密なメモリ管…

プログラミング言語 Rust 入門してみた

概要 プログラミング言語「Rust」を学習した際の記録 完全な入門者に向けた表現を心掛けた。 書けるようになるまでの早さが優先、内容は網羅しない。 はじめに Rust の導入 入門 文字列や数値の出力 println! 基本的な計算 + - * / % 変数に値を保持する let…