クイズ — 小さな宿題:0xチェック
問い
最初の Rust プログラムを書く。文字列として与えられた Ethereum アドレスが 0x で始まっているかを判定。&str.starts_with + .len() + if/else + && の組み合わせ。
原理(最小モデル)
- 関数シグネチャ.
fn is_valid_address(addr: &str) -> bool、&strで借用受け取り、boolで結果返却。 addr.starts_with("0x").&strの標準メソッド、has_prefixは存在しない、containsは部分一致で先頭判定にならない。- 長さチェック.
addr.len() == 42、Ethereum アドレス = 40 hex 桁 +0xプレフィックスで合計 42 文字。 - 慣用句.
addr.starts_with("0x") && addr.len() == 42 && addr[2..].chars().all(|c| c.is_ascii_hexdigit())で 3 条件 AND。 - Alloy なら.
addr.parse::<Address>()で全部 Alloy に任せる、本番コードはこれ。 - Rust Playground. https://play.rust-lang.org/ で Alloy なしでも Rust 試せる、URL シェアでスニペット共有。
具体例 + ステップで組み立てる
小さな宿題:0xチェック
最初の課題はとてもシンプルである。
文字列として与えられたEthereumアドレスが、
0xから始まっているかをチェックして、正しい/不正のメッセージを表示する。発展:長さも 42 文字かを確認する。
必要な要素
これが「Rust EVMスタック流」で最初のRustプログラムになる。Rustプログラム全般で使う3つの基本要素:
- 変数 —
letとlet mut(前回扱いました) - メソッド — Rust の文字列には組み込みメソッドがあり、先頭一致をチェックするものもある。stdドキュメントで確認する:
&strドキュメント - 条件分岐 —
if/else
Ethereum アドレスの 長さ も把握しておく必要がある。分からなければ調べてみてください(ヒント:40 hex 文字 + 0x プレフィックス)。
自分で書いてみる
Rust Playground を開き、次のシグネチャで関数を書いてください:
fn is_valid_address(addr: &str) -> bool {
// ここを書く
}
下記でテスト:
fn main() {
println!("{}", is_valid_address("0x1234567890abcdef1234567890abcdef12345678")); // true
println!("{}", is_valid_address("1234567890abcdef1234567890abcdef12345678")); // false
}
詰まったときの軽いヒント:
addr.〜 —&strのメソッドの中に、名前のとおりに動くものがありますaddr.len()で文字列のバイト長が取れる- 2つの条件は
&&でつなぐ
自分で書いてみる前に答えを見ないでください。Rust の真価は「コンパイラが教えてくれる」こと。コンパイラに教わってください。
クイズ
自分なりのコードを書いて動かしたら、下のクイズへ進む。各問は具体的なRust慣用表現を問うため、自分で書いた経験があれば解けるはずである。
まとめ(3行)
- 関数
is_valid_address(addr: &str) -> bool=starts_with("0x") && len == 42 && all hex digits、3 条件 AND。 - Alloy 本番は
addr.parse::<Address>()で全部任せる、Rust Playground で Alloy なし試行可能。 - 5 問でこの宿題と Rust 基本文法を確認、次は初級まとめクイズ。