こんにちは
こんにちは。fujitasan-createです。
前回からまだ1日も経ってないですがやりたくなったのでRustをやっていきます。
昨日Rustに関して少し調べたところ、新概念として所有権というものがあることを知りました。
変数が値を保持する権利(?)のようなものらしく、まだ何に使うのかとかなぜ重要なのかということはまだ知りませんが後々勉強することになりそうです。
変数
本日は基本文法をやっていきます。
まずは変数の定義から。
イミュータブルとミュータブル(後から変えられるかどうか)をmutを書くことによって示す形のようです。
pub fn variable() {
let x: i32 = 5;
let mut y: i32 = 10;
println!("{}", x);
println!("{}", y);
}
のように、xとyの二つの変数を定義してそれを表示させてみようと思いました。(これをmain.rsで呼び出す形)
驚いたのは、この状態だと、「yの値がミュータブルである必要がないよ」(yの値を更新してないので)という警告が出るということです。Pythonの時はそんな警告は出てきたことがなかったので、意外と親切なんだと思いました。
また、i32というのは、32ビットの符号付き整数 のことらしく、Pythonではintしかなかった整数の型がかなり厳密に指定されているということを知りました。
他にもi64やu32(符号なし)もあるらしいです。
また、pythonだと、print(x)のように、変数はそのまんま表示できましたが、Rustでは{}の中に埋め込むと言う形らしく、最初に"{}"を入れないと表示できないっぽいです。(これは不便だと思いましたが後々意味が分かってくるはずと思い一旦我慢)
pub fn variable(){
let x:i32= 5;
let y:i32 =10;
println!("{}", x + y);
println!("{}", x - y);
println!("{}", x * y);
println!("{}", x / y);
println!("{}", x % y);
}
続いて、演算子を使って計算をしていきます。
この辺はPythonと同じような演算子を使えるので特に困りませんでした。
しかし、どうやらべき乗は違うらしく、
println!("{}", x.pow(2));
という感じでメソッドみたいな感じで書かなければいけないようです。
for文
続いてfor文です。
pub fn for_loop(){
for i in 0..3{
println!("{}",i);
}
}
pub fn for_loop2(){
for j in 0..=3{
println!("{}",j);
}
}
こんな感じで、2種類作ってみました。
rangeは..で表し、そのあとに=を付けることで最後の値を含めるか含めないかを決められるようです。
pub fn for_loop3(){
let nums=[10,20,30];
for k in nums.iter(){
println!("{}",k);
}
}
配列もfor文で取り出していけました。
.iter()を付けて配列を取り出すようです。また&numsでも行けるようです。
ここで、使ってない関数に警告がついてしまう問題を解決しようと思います。
本来、例えば開発をするときとかに、余計な関数が定義されていると邪魔になってしまうので使ってないものを消させるようにこの警告がでるようになってるんだと思いますが、今回は勉強用で自分の作った関数たちを消すのはもったいないので、これを解決します。
解決法は、ファイルの一番上に、
#![allow(dead_code)]
これを書くことです。
これで、使ってない関数がありますの警告が全部なくなったので良かったです。
if文
次はif文です
pub fn if_statement(){
let a=10;
if a>5{
println!("aは5より大きい");
}else if a==5{
println!("aは5と等しい");
}else{
println!("aは5より小さい");
}
}
このように、if文を使って、Pythonと同様に条件分岐を作れます。
条件は必ずbool型で、if 1:みたいなことはできないです。
また、if文の結果を変数に格納できる(?)らしいです。
pub fn if_statement2(){
let b=10;
let result=if b>5 { "bは5より大きい" } else { "bは5以下" };
println!("{}",result);
}
このようにすると、resultという変数にはif文の結果が入ります。
これに何の意味があるのかまだよくわかってないです。
関数
続いて関数です。
Pythonと違うのは、型指定をしないといけないのと、returnが要らないということです。
pub fn add(x:i32,y:i32)->i32{
x+y
}
こんな感じで書いて、main.rsで呼び出すときにはprintlnします。
「変数は両方ともi32型で、返ってくるのもi32ですよ」 というのを明示的にして、型安全を保つという仕組みです。
おわりに
ここまで読んでいただきありがとうございます。
今回はPythonにもあるような基本文法を少しやりました。
Rustっぽい新概念はまだ全然やっていないので、次回はもう少し新概念に触れていこうと思います。
ゆったりペースですが頑張っていきます。
いいねやコメントいただけると励みになりますのでぜひよろしくお願いします!