デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
フロントエンジニアのための「Tauri 2.0」ではじめるRustプログラミング 第2回
ダウンロード 第2回 サンプルファイル (21.6 KB)
制御構文
「制御構文」とは上から下に順番に実行されるプログラムの流れを変える働きをする構文です。制御構文には大きく分けて「分岐構文」と「繰り返し構文」があります。
分岐構文は、もし条件が満たされたり満たされなかったりした場合だけ処理を実行する構文です。その名の通り「if」文と言います。
繰り返し構文には範囲内の値をループする「for」文と、条件が満たされる間ループする「while」文があります。解説はしませんが他にも繰り返し構文に「loop」文がありますが、知っていて損はないですが、あまり使わないかもしれません。

分岐構文if文
「if 条件」の条件が満たされた場合、直後のスコープ内の処理が実行されます。満たされなかった場合「else if 条件」の条件が満たされた場合、直後のスコープ内の処理が実行されます。それも満たさなかった場合「else」直後のスコープ内の処理が実行されます。
if文の文法
if 条件 {
ステートメント
} else if 条件 {
ステートメント
} else {
ステートメント
}
fn main() {
let i = 0;
if i < 0 {
println!("iは0より小さい");
} else if i == 0 {
println!("iは0");
} else {
println!("iは0より大きい")
}
}
繰り返し構文for文
「for 変数 in 範囲」で範囲の各値が変数に代入されて直後のスコープ内の処理を繰り返し実行します。範囲は「0..10」と書けば0〜10未満まで1ずつインクリメントされます。範囲に配列を書けば配列の全ての要素が繰り返されます。範囲を超えたらループを抜け出します。
for文の文法
for 変数 in 範囲 {
ステートメント
}
fn main() {
for i in 0..10 {
println!("i={}",i);
}
}
繰り返し構文while文
「while 条件」の条件が満たされている間、直後のスコープ内の処理を繰り返し実行します。条件が満たされなくなったらループを抜け出します。
while文の文法
while 条件 {
ステートメント
}
fn main() {
let mut sum = 0; // 後で値が変更されるので「mut」を付ける
while sum < 1000 {
sum += 100;
println!("合計は{}円",sum);
}
}
パターンマッチングmatch文
一般のプログラミング言語でいう「switch」文に似た文法がmatch文です。「match 変数」の変数に当てはまるものを、直後のスコープ内から探して分岐します。当てはまるものがない場合「_」に分岐します。
match文の文法
match 変数 {
値1 => { ステートメント },
値2 => { ステートメント },
_ => { ステートメント }
}
fn main() {
let s = "マッチ";
match s {
"パターン" => { println!("パターン"); },
"マッチ" => { println!("マッチ"); },
_ => { println!("それら以外") }
}
}
構造体とプロパティとメソッド
一般のプログラミング言語はオブジェクト指向に「クラス(class)」を使いますが、Rustでは「構造体(struct)」を使います。「struct 構造体名」のスコープ内に「プロパティ(構造体に属する変数)」を書きます。
「impl 構造体名」のスコープ内に「メソッド(構造体に属する関数)」を書きます。「new」メソッドは所謂「コンストラクタ」でインスタンスを生成する際に呼び出します。
他にもプログラミング言語「Java」の「interface」に似た「トレイト」という機能もありますが、本連載では使わないので省略します。
構造体の文法
struct 構造体名 {
プロパティ: データ型,
プロパティ: データ型,
}
impl 構造体名 {
fn new(引数:データ型) -> Self {
構造体名 {
プロパティ: 値,
プロパティ: 値
}
}
fn メソッド名(self,引数:データ型) -> 戻り値 {
ステートメント
戻り値
}
}
struct Car {
speed: i32,
max: i32,
}
impl Car {
fn new(spd: i32,mx: i32) -> Self {
Car {
speed: spd,
max: mx
}
}
fn get_speed(mut self) -> i32 { // 後で値が変更されるので「mut」を付ける
if self.speed > self.max {
self.speed = self.max;
}
self.speed
}
}
fn main() {
let car = Car::new(140,100);
println!("スピード{}km/h",car.get_speed());
}
この記事は参考になりましたか?
- フロントエンジニアのためのTauri 2.0ではじめるRustプログラミング連載記事一覧
- この記事の著者
-
大西 武(オオニシ タケシ)
1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営する開発者のための情報メディアです。日々の開発に取り組むエンジニアやテクノロジーを学びたい方に向けて、プログラミングやAI活用、開発ツール、エンジニアの学びとキャリアに関する記事をお届けしています。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
