iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Software Development

Rust的多方面運用系列 第 12

[Day12] Trait 與 STD 庫中的 fs

我開始懷疑觀看人數了,我覺得我猜得好不準ㄛ。我覺得會比較少人看得竟然會蠻多人看得@@
太扯了太扯
我現在在想之後打疫苗是不是沒辦法完成挑戰QQ
身體加油R


今天要講的是 trait 這是在 Rust 中要實現 OOP 物件導向程式設計的重要部件。
直接 Code 範例吧

trait Owo {
    fn add(&self) -> i32;
    fn reduce(&self) -> i32;
}

struct First {
    x: i32,
    y: i32,
    z: i32,
}

impl Owo for First {
    fn add(&self) -> i32 {
        self.x + self.y + self.z
    }
    fn reduce(&self) -> i32 {
        self.x - self.y - self.z
    }
}

fn main() {
    let a = First{
        x: 5,
        y: 3,
        z: 2,
    };
    println!("{}", First::add(&a));
    println!("{}", First::reduce(&a));
}

以上可以看到最簡單的 trait 利用,那聰明的讀者們可能已經想到了,這不是跟之前的 impl 能做到的事情沒有任何區別嗎,而且還增加了代碼量

impl Second {
    fn add(&self) -> i32 {
        self.x + self.y + self.z
    }
    fn reduce(&self) -> i32 {
        self.x - self.y - self.z
    }
}

這是不用 trait 的寫法,是不是少了很多東西呢
那接下來我來講一下為甚麼要使用 trait
如果說定義了第二個叫做 Second 而他要實現的東西跟 First 一樣
那這樣一個一個看是不是很難去理解整段程式碼,此時就能使用 trait 對這個規範進行一個限制,讓他無法出現 trait 所綁定的以外的東西,就能夠讓整體的可讀性變高。

那麼以上就是最簡單的 trait 用法,然後需要知道的是很多套件都有使用 trait 來規範使用者使用該套件所以撰寫時要特別注意。


那接下來講甚麼呢,至少明天應該會講多線程
只不過我還真的沒想到 trait 這麼快就寫完了 該水一下了
好啦在講幾個例子有關 Rust 的 std 庫


FS

先附連結:fs
在 Rust 中想要去撰寫文字檔或是開啟文字檔編輯之類的 STD 庫就有內建給你了

fn create_file(s: String) {
    File::create(&s).unwrap();
}

^這樣就可以創建檔案。

fn delete_file(s: String) -> std::io::Result<()>{
    remove_file(&s)?;
    Ok(())
}

^這樣就可以刪除檔案,不過要記得的是,在以下情況會回傳 Err

  • 沒有此檔案
  • 指向目錄
  • 沒有刪除的權限
fn write_file(s: String, Name: String) -> std::io::Result<()>{
    write(Name, s)?;
    Ok(())
}

^撰寫檔案的部分

fn open_file(s: String) -> std::io::Result<()> {
    let mut f = File::open(s)?;
    let mut data = String::new();
    f.read_to_string(&mut data)?;
    println!("{}", data);
    Ok(())
}

^ 開啟檔案


好了,今天差不多到這邊吧,各位晚安 又灌...又灌...又...又灌水文章


上一篇
[Day11] 智慧指標
下一篇
[Day13] 多執行緒
系列文
Rust的多方面運用30

尚未有邦友留言

立即登入留言