\HP新生活大祭り 2026/

今回からプログラミング言語のRustの話を始めます。
だんだん新しい言語としてRustの採用が広まってきています。
私も勉強してみようと思いました。
練習したことの備忘録を残して、自分や初学者の方の参考になるような情報を目指します。
RustはPythonとは違って、かなり厳密な言語です。
Pythonなら簡単に書けるコードも、Rustだと色々考えないと動かない印象ですね。
その分エラーとかバグが少なくなるんでしょうけどね。
少しずつ覚えていこうと思います。
5つの数値:1, 4, 2, 7, 3
のうち3より大きい値を合計した値を求めよ。
答えは11です。
これをRustのプログラムにします。
次のコードはエラーになります。
fn main(){
let a = [1,4,2,7,3];
let mut sum = 0;
for t in a.iter() {
if t > 3 {
sum += t;
}
}
println!("Result is : {}", sum);
}○エラー内容
expected reference, found integer help: consider borrowing here: `&3`
note: expected reference `&_` found type `{integer}`
○解説
要するに「t > 3」の部分のtが参照型なのに3がリテラルだから型が合わないよ、ということです。
○正しいコード
fn main(){
let a = [1,4,2,7,3];
let mut sum = 0;
for t in a.iter() {
if *t > 3 {
sum += t;
}
}
println!("Result is : {}", sum);
}○出力
Result is : 11
○改良点
tを*tに変えただけ。
for文の中でif文を書くと、条件式の部分のiter()の変数が参照型になる模様。だからどちらかをどちらかの型に合わせないといけない。
コンパイラは「&3」にせよ、と言っている。
つまりtが参照型なら3も参照型にしなさいという話。
なんかリテラルを参照型にわざわざするのは気持ち悪いので、tをリテラルに直してみた。
Rustでは変数の前に「*」を付ければ、その変数の値そのものにアクセスできる。
つまりtをリテラルの3に合わせたという話。
おわかりかもしれないが、
sum += t;
の部分は普通にtの値にアクセスできているので、for文の中でif文を使ったときの条件式の処理の仕方が独特なんだと思う。
条件式では参照型として扱い、本文の中身では値そのものにアクセスできる模様。
iter()を使わずに普通に配列にアクセスする次のコードはエラーにならない。
for i in 0..5 {
if a[i] > 3 {
sum += a[i];
}
}このとき条件式ではa[i]が値にアクセスできている。
iter()で取り出した値を条件式に持ってくると参照型になるみたい。
今回は
expected reference, found integer help: consider borrowing here: `&3`
note: expected reference `&_` found type `{integer}`
のエラーが出たときの一つの解決法について書きました。
