Rust Note(10)_Abtract Concept 抽象化概念

Abstract 抽象化

理解抽象化概念剛好可以利用 struct 來做理解.

結構體詳細介紹請參閱前一篇 : Rust Note(9)

利用結構體 (struct) 創造出不一樣 types 的儲存體.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct Fruits {
// Using struct to build a new struct in {...}, and consign constructor name and :type
fruit_name: String,
fruit_color: String,
}

fn main() {
// init the struct
let apple = Fruits {
fruit_name: String::from("Apple"),
fruit_color: String::from("red"),
}; // 記得添加分號
let banana = Fruits {
fruit_name: String::from("Banana"),
fruit_color: String::from("yellow"),
};
// 使用 . 來進行呼叫
println!("{} is {}", apple.fruit_name, apple.fruit_color);
println!("{} is {}", banana.fruit_name, banana.fruit_color);
}
// output: Apple is red
// output: Banana is yellow

代碼重複性利用程度越高, 重複撰寫同樣代碼就少, 這樣也可以降低出錯的機會.

稍微想像一下, apple & banana 有什麼共同點?
  • 同樣都是水果
  • 同樣都是有顏色的水果 (廢話, 有透明的水果嗎?(#゚ Д ゚))

如果今天遇到 apple, 就寫一次 apple 的物件…

下次遇到 banana, 就再寫一次 banana 的物件…

再下次遇到 lemon, 那就再寫一次 lemon 的物件…

如果今天遇到 7749 個水果…那不就寫到天荒地老…
阿是夠了沒…………(/‵Д′)/~ ╧╧
……

冰的啦


把共通點列出來, 做成抽象層, 那我們就可以利用這個抽象層來呼叫.

以上面 struct Fruits 的例子來說, 裡面包含了:

  1. 水果名稱
  2. 水果顏色

今天遇到了蘋果:

  • apple
    • fruit_name: apple
    • fruit_color: red

今天遇到了香蕉:

  • banana
    • fruit_name: banana
    • fruit_color: yellow

如果遇到火龍果:

  • 火龍果
    • fruit_name: 火龍果
    • fruit_color: 紅色

有沒有發現大大的縮短創造物件的時間? 利用共通特性…
同時也可以避免出錯.

Rust_Note_20211114(1)