国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【跟小嘉學(xué) Rust 編程】十七、面向?qū)ο笳Z(yǔ)言特性

這篇具有很好參考價(jià)值的文章主要介紹了【跟小嘉學(xué) Rust 編程】十七、面向?qū)ο笳Z(yǔ)言特性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

系列文章目錄

【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ)
【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用
【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念
【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念
【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù)
【跟小嘉學(xué) Rust 編程】六、枚舉和模式匹配
【跟小嘉學(xué) Rust 編程】七、使用包(Packages)、單元包(Crates)和模塊(Module)來(lái)管理項(xiàng)目
【跟小嘉學(xué) Rust 編程】八、常見(jiàn)的集合
【跟小嘉學(xué) Rust 編程】九、錯(cuò)誤處理(Error Handling)
【跟小嘉學(xué) Rust 編程】十一、編寫(xiě)自動(dòng)化測(cè)試
【跟小嘉學(xué) Rust 編程】十二、構(gòu)建一個(gè)命令行程序
【跟小嘉學(xué) Rust 編程】十三、函數(shù)式語(yǔ)言特性:迭代器和閉包
【跟小嘉學(xué) Rust 編程】十四、關(guān)于 Cargo 和 Crates.io
【跟小嘉學(xué) Rust 編程】十五、智能指針(Smart Point)
【跟小嘉學(xué) Rust 編程】十六、無(wú)畏并發(fā)(Fearless Concurrency)
【跟小嘉學(xué) Rust 編程】十七、面向?qū)ο笳Z(yǔ)言特性

前言

本章節(jié)講解面向?qū)ο蟮奶卣鳎约斑@些特征如何轉(zhuǎn)化為 Rust。

主要教材參考 《The Rust Programming Language》


一、 面向?qū)ο笳Z(yǔ)言特性

1.1、對(duì)象包含數(shù)據(jù)(Data)和行為(Behavior)

面向?qū)ο蟮某绦蛴蓪?duì)象組成,對(duì)象包含了數(shù)據(jù)和操作這些數(shù)據(jù)的過(guò)程,這些過(guò)程通常被稱為方法或操作。

基于此定義,Rust 是面向?qū)ο蟮摹?Struct、emun包含數(shù)據(jù),impl 塊為之提供了方法,但是帶有方法的 Struct、 enum 并沒(méi)被稱為對(duì)象。

1.2、封裝隱藏實(shí)現(xiàn)細(xì)節(jié)

封裝:調(diào)用對(duì)象外部的代碼無(wú)法直接訪問(wèn)對(duì)象內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),唯一可以與對(duì)象進(jìn)行交互的方法就是通過(guò)它公開(kāi)的API。

Rust 里面使用 pub 公開(kāi)數(shù)據(jù)或方法,默認(rèn)是私有的。

1.3、繼承和代碼復(fù)用

繼承:使對(duì)象可以沿用另外一個(gè)對(duì)象的數(shù)據(jù)和行為,且無(wú)需重復(fù)定義相關(guān)代碼。

Rust 沒(méi)有繼承。

使用繼承的原因:

  • 代碼復(fù)用:Rust 使用 Trait方法來(lái)進(jìn)行代碼共享
  • 多態(tài):Rust 使用泛型 和 trait 約束(限定參數(shù)化多態(tài) bounded parametric)

二、使用 trait 對(duì)象存儲(chǔ)不同類型的值

2.1、為共有行為定義為一個(gè) trait


pub trait Draw{
	fn draw(&self);
}

2.2、動(dòng)態(tài)派發(fā)(dynamic dispatch):和靜態(tài)派發(fā)(static dispatch)

Trait 對(duì)象執(zhí)行的是動(dòng)態(tài)派發(fā),將Trait約束作用于泛型,Rust 編譯器會(huì)執(zhí)行單態(tài)化,編譯器會(huì)為我們用來(lái)替換泛型類型參數(shù)的每個(gè)具體類型生成對(duì)應(yīng)函數(shù)和方法的非泛型實(shí)現(xiàn)。

通過(guò)態(tài)化生成的代碼會(huì)執(zhí)行靜態(tài)派發(fā)(static dispatch),在編譯過(guò)程中確定調(diào)用的具體方法

動(dòng)態(tài)派發(fā)(dynamic dispatch): 無(wú)法確定在編譯過(guò)程中你調(diào)用究竟是哪一種方法,編譯器會(huì)產(chǎn)生額外的代碼以便在運(yùn)行時(shí)找出希望調(diào)用的方法

使用 trait 對(duì)象會(huì)執(zhí)行動(dòng)態(tài)派發(fā),產(chǎn)生運(yùn)行時(shí)開(kāi)銷,阻止編譯器內(nèi)聯(lián)方法代碼,使得部分優(yōu)化操作無(wú)法進(jìn)行。

trait 對(duì)象必須保證對(duì)象安全

2.3、Trait 對(duì)象必須保證對(duì)象安全

只能把滿足對(duì)象安全的trait 轉(zhuǎn)化 trait 對(duì)象
Rust 采用一系列規(guī)則來(lái)判定某個(gè)對(duì)象是否安全,只需要記住兩條

  • 方法的返回類型不是 Self
  • 方法中不包含任何泛型類型參數(shù)

三、實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)模式

3.1、狀態(tài)模式(state pattern)

狀態(tài)模式是一種面向?qū)ο笤O(shè)計(jì)模式,一個(gè)值擁有內(nèi)部狀態(tài)由數(shù)個(gè)狀態(tài)對(duì)象(state object) 表達(dá)而成,而值的行為則隨著內(nèi)部狀態(tài)的改變而改變

使用狀態(tài)模式意味著

  • 業(yè)務(wù)需求變化時(shí),不需要修改持有狀態(tài)的值的代碼,或者使用這個(gè)值的代碼
  • 只需要更新?tīng)顟B(tài)對(duì)象內(nèi)部的代碼,以便改變其規(guī)則或增加一些新的狀態(tài)對(duì)象

3.2、示例代碼

pub struct Post {
    state: Option<Box<dyn State>>,
    content: String,
}

impl Post {
    pub fn new() -> Post {
        Post {
            state: Some(Box::new(Draft {})),
            content: String::new(),
        }
    }
    pub fn add_text(&mut self, text: &str) {
        self.content.push_str(text);
    }
  	pub fn content(&self) -> &str {
        self.state.as_ref().unwrap().content(self)
    }
    pub fn request_review(&mut self) {
        if let Some(s) = self.state.take() {
            self.state = Some(s.request_review())
        }
    }
}

trait State {
  fn request_review(self: Box<Self>) -> Box<dyn State>;
  fn content<'a>(&self, post: &'a Post) -> &'a str {
        ""
    }
}

struct Draft {}

impl State for Draft {
    fn request_review(self: Box<Self>) -> Box<dyn State> {
        Box::new(PendingReview {})
    }
}

struct PendingReview {}

impl State for PendingReview {
    fn request_review(self: Box<Self>) -> Box<dyn State> {
        self
    }
}

struct Published {}

impl State for Published {
    fn request_review(self: Box<Self>) -> Box<dyn State> {
        self
    }

    fn approve(self: Box<Self>) -> Box<dyn State> {
        self
    }
     fn content<'a>(&self, post: &'a Post) -> &'a str {
        &post.content
    }
}

缺點(diǎn)

  • 某些狀態(tài)之間是相互耦合的
  • 需要重復(fù)實(shí)現(xiàn)一些邏輯代碼

3.3、

總結(jié)

以上就是今天要講的內(nèi)容文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-684777.html

到了這里,關(guān)于【跟小嘉學(xué) Rust 編程】十七、面向?qū)ο笳Z(yǔ)言特性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ)

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ)

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 本系列旨在分享 Rust 學(xué)習(xí)心得,適合初學(xué)者入門(mén),后續(xù)系列會(huì)有 Rust 項(xiàng)目實(shí)戰(zhàn)系列編程介紹。 主要教材參考 《The Rust Programming Language》 Rust 是一門(mén)新的編程語(yǔ)言,它可以讓每個(gè)人編寫(xiě)可靠且高效的程序,使用于需要運(yùn)行時(shí)速度、需要內(nèi)

    2024年02月10日
    瀏覽(18)
  • 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念

    【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 本章節(jié)涵蓋幾乎所有編程語(yǔ)言會(huì)出現(xiàn)的概念以及他們?cè)?Rust之中的工作原理,這不是 Rust 獨(dú)有的,但我們將在 Rust 上下文中討論他們,并且

    2024年02月10日
    瀏覽(21)
  • 【跟小嘉學(xué) Rust 編程】三十、Rust 使用 Slint UI

    【跟小嘉學(xué) Rust 編程】三十、Rust 使用 Slint UI

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月04日
    瀏覽(26)
  • 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念

    【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 本章節(jié)將講解 Rust 獨(dú)有的概念(所有權(quán))。所有權(quán)是 Rust 最獨(dú)特的特性,它使得 Rust 能夠

    2024年02月10日
    瀏覽(30)
  • Rust編程語(yǔ)言入門(mén)之高級(jí)特性

    不安全 Rust 高級(jí) Trait 高級(jí) 類型 高級(jí)函數(shù)和閉包 宏 隱藏著第二個(gè)語(yǔ)言,它沒(méi)有強(qiáng)制內(nèi)存安全保證:Unsafe Rust(不安全的 Rust) 和普通的 Rust 一樣,但提供了額外的“超能力” Unsafe Rust 存在的原因: 靜態(tài)分析是保守的。 使用 Unsafe Rust:我知道自己在做什么,并承擔(dān)相應(yīng)風(fēng)險(xiǎn)

    2023年04月24日
    瀏覽(21)
  • 【跟小嘉學(xué) Rust 編程】二十一、網(wǎng)絡(luò)編程

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月10日
    瀏覽(19)
  • 【跟小嘉學(xué) Rust 編程】二十、進(jìn)階擴(kuò)展

    【跟小嘉學(xué) Rust 編程】二十、進(jìn)階擴(kuò)展

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月10日
    瀏覽(20)
  • 【跟小嘉學(xué) Rust 編程】十五、智能指針

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月11日
    瀏覽(23)
  • 【跟小嘉學(xué) Rust 編程】二十二、常用 API

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月10日
    瀏覽(17)
  • 【跟小嘉學(xué) Rust 編程】六、枚舉和模式匹配

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月13日
    瀏覽(32)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包