構造体の定義
複数の関連するデータを1つにまとめたい場合、構造体(struct)を使います。
struct Rectangle {
width: u32,
height: u32,
}
fn main() {
let rect = Rectangle { width: 30, height: 50 };
println!("幅: {}", rect.width);
println!("高さ: {}", rect.height);
}
implブロックとメソッド
構造体に関連する処理は、implブロックの中に定義します。第1引数が&selfになっている関数を「メソッド」と呼び、インスタンス.メソッド名()の形で呼び出します。
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
fn perimeter(&self) -> u32 {
2 * (self.width + self.height)
}
}
fn main() {
let rect = Rectangle { width: 30, height: 50 };
println!("面積: {}", rect.area());
println!("周囲の長さ: {}", rect.perimeter());
}
&selfは、「このメソッドが呼び出し元のインスタンスを借用する」ことを表しています。所有権を奪わないため、メソッドを呼び出した後もrectをそのまま使い続けられます。
関連関数(associated function)
&selfを引数に取らず、構造体名に対して直接呼び出す関数を「関連関数」と呼びます。コンストラクタのような役割でよく使われ、慣習としてnewという名前が使われます。
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn new(width: u32, height: u32) -> Rectangle {
Rectangle { width, height }
}
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect = Rectangle::new(30, 50); // :: で関連関数を呼び出す
println!("{}", rect.area());
}
演習:長方形構造体
コード提出フォーム
RUST安全なサーバー側採点連携が未接続のため、現在は提出できません。
採点基盤準備中
公開テストケース
読み込み中…