開発環境: MacOS
Rust v1.66.0
学習ノート
参考リンク: 菜鳥教程 - Rust
最近、Rust を学んでいて、奇妙な考えが浮かびました。Rust の初級知識をほぼすべて 1 つの実行可能ファイルにまとめてみようと思いました。
2020/12/16 - 初回更新、現在は列挙の部分まで進んでいます
// 構造体
#[derive(Debug)]
// Debugモードでは、{:?}を使用して構造体全体を出力できます
struct Book {
title: String,
author: String,
nation: String,
date: u32,
id: u32,
}
// 構造体のメソッド
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
fn wider(&self, rect: &Rectangle) -> bool {
return self.width > rect.width;
}
// 構造体の関連関数
fn create(width:u32, height:u32) -> Rectangle{
return Rectangle {width, height};
}
}
// 列挙型
// まだわかりません
fn add(a:i32, b:i32) -> i32 {
return a + b;
}
fn main() {
print!("Hello Rust(1)");
print!("Hello Rust(2)\n");
let a: i32 = 100;
let mut b: f64 = 2.3;
let str: &str = "Hello World";
println!("a+b = {}", add(a, b as i32));
b = 2.4;
println!("a+b = {}", a as f64 + b);
println!("{}", str);
println!("{}", str.len());
let y: i32 = {
let x: i32 = 2;
x + 1
};
println!("\ny = 3+1{}", y);
if y > 10 {
// プログラムを終了
return;
} else if y < 0 {
return;
} else {
println!("{}", y);
}
// 複合型
let tup: (i32, f64, &str, u8) = (3, 4.5, "qwq", 3);
println!(
"tup0: {}, tup1: {}, tup2: {}, tup3: {}",
tup.0, tup.1, tup.2, tup.3
);
let (x, y, z, n) = tup;
println!("{} : {} : {} : {}", x, y, z, n);
// 配列
let str_a: [&str; 2] = ["awa", "qwq"];
let i32_a: [i32; 2] = [12, 3];
let f64_a: [f64; 2] = [1.2, 5.3];
// ループ
let mut n = 0;
while n != 2 {
println!("str_a[{}]::-> {}", n, str_a[n]);
n += 1;
}
for i in 0..2 {
println!("i32_a[{}]::-> {}", i, i32_a[i]);
}
// or
for i in i32_a.iter() {
println!("i32_a[iter] ::-> {}", i);
}
n = 0;
let _f64_1 = loop {
if n == 1 {
break f64_a[n];
}
n += 1;
};
println!("_f64_1 ::-> [{}]", _f64_1);
// クローン
let yy = y.clone();
println!("yy :: -> [{}]", yy);
// レンタル
let yy_0 = &yy;
println!("yy_0 :: -> [{}]", yy_0);
// スライス
let s = String::from("broadcast");
let _s_05: &str = &s[0..5];
let _s_59: &str = &s[5..9];
println!("{}={}+{}", s, _s_05, _s_59);
// 配列スライス
let i32_b: [i32; 5] = [12, 3, 6, 2, 4];
let i32_b_25 = &i32_b[2..5];
println!("[{}={}={}]", i32_b_25[0], i32_b_25[1], i32_b_25[2]);
// 構造体
let author = String::from("乔治·奥威尔");
let id_32 = Book {
title: String::from("1984"),
author, // author : author
nation: String::from("英国"),
date: 1949,
id: 1,
};
println!("book {:?}", id_32);
let id_31 = Book {
author: String::from("乔治 奥威尔"),
id: 31,
// 他のものと同じ
..id_32
};
println!("book {:?}", id_31);
// 構造体のメソッド
let rect = Rectangle{ width: 100, height: 100 };
let rect_0 = Rectangle{ width: 200, height: 100 };
let rect_1 = Rectangle::create(300, 20);
println!("{:?}", rect_1);
println!("[Area -> {}] :: [Wider -> {}]", rect.area(), rect.wider(&rect_0));
// タプル構造体
struct Color(u8, u8, u8);
let block = Color(0, 0, 0);
println!("block :: Color -> ({}, {}, {})", block.0, block.1, block.2);
// ユニット構造体(何に使うのかわかりません)
struct UnitStruct;
}