4.通用編程概念

目錄

  • 一、變量與常量
    • 1.1 變量
    • 1.2 常量
  • 二、遮蔽
  • 三、數據類型
    • 3.1 標量類型
      • 1. 整型
      • 2. 浮點型
      • 3. 布爾類型
      • 4.字符類型
    • 3.2 復合類型
      • 1. 元組
      • 2. 數組
  • 四、函數
  • 五、語句和表達式
  • 六、函數的返回值

一、變量與常量

1.1 變量

??????在Rust中默認的變量是不可變的,如果修改其值會導致錯誤。

fn main(){let x = 3;x = 5;  //error[E0384]: cannot assign twice to immutable variable `x`
}

定義變量時添加mut關鍵字就能解決以上問題,例如let mut x = 3

1.2 常量

  1. 常量必須使用const定義,且類型必須被標注。
  2. 常量可以在任何作用域內進行聲明,包括全局作用域。
  3. 常量只可以綁定到常量表達式
  4. 常量使用全大寫字母,每個單詞之間用下劃線分隔
  5. 數字可以用_分隔,以增加可讀性
const MAX_POINTS:u32  100_000;

二、遮蔽

在Rust中,可以定義不同類型/相同類型的相同變量而不會報錯,例如

fn main(){let x = 3;let x = x + 5;  //同為i32類型的xlet x = String::from("Hello");  //將x設置為String類型println!("{}", x);
}

三、數據類型

??????Rust是一門靜態類型語言,在編譯期內就必須知道變量的類型,因此將一個字符型的整數轉換成真正的整數型時,就必須顯式的定義類型。

fn main(){let x  = "42".parse().expect("Not a number"); //let x:u32  = "42".parse().expect("Not a number"); 這是正確的println!("{}", x);
}

通過下面的報錯信息可以很明顯的知道應該如何修改源碼
在這里插入圖片描述

3.1 標量類型

??????Rust有四種基本的標量類型:整型、浮點型、布爾型以及字符型

1. 整型

??????下表展示的Rust語言中的整型,后面的數字代表了所示用的位數,isize 和 usize 類型取決于程序運行的計算機體系結構。

長度有符號類型無符號類型
8 位i8u8
16 位i16u16
32 位i32u32
64 位i64u64
128位i128u128
archisizeusize

也可以按照下表中所示的任意形式來表示整型的字面量

數字字面量示例
十進制98_222
十六進制0xff
八進制0o77
二進制0b1111_0000
字節 (僅限于 u8)b’A’

整型溢出的問題

??????u8可以存放0~255的值,如果存放256則會發生整型溢出,在調試模式(debug)下編譯,Rust會檢查溢出,在發布模式(release)下構建時,Rust對于溢出的處理時采用取余的方式循環。比如在 u8 的情況下,256 變成 0,257 變成 1。
??????要顯式處理溢出的可能性,可以使用標準庫針對原始數字類型提供的以下一系列方法:

  • 使用 wrapping_* 方法在所有模式下進行循環,例如 wrapping_add
  • 如果使用 checked_* 方法時發生溢出,則返回 None 值
  • 使用overflowing_*方法返回該值和一個指示是否存在溢出的布爾值
  • 使用 saturating_* 方法使值達到最小值或最大值

2. 浮點型

??????在 Rust 中浮點型數字也有兩種基本是 f32 和 f64,它們的大小分別為 32 位和 64 位。默認浮點類型是 f64,浮點型都是有符號的。

fn main(){let x = 83.1;       //f64let y:f32 = 83.1;   //f32
}

3. 布爾類型

??????Rust 中的布爾類型有兩個可能的值:true 和 false。布爾值的大小為 1 個字節。Rust 中的布爾類型可以使用 bool進行顯式的聲明。

fn main() {let t = true;let f: bool = false; // 顯式聲明為布爾型
}

4.字符類型

??????字符類型字面量用單引號引起來,Rust 的字符類型大小為 4 個字節,表示的是一個 Unicode 標量值,這意味著它可以表示的遠遠不止是 ASCII。標音字母,中文/日文/韓文的文字,emoji,還有零寬空格(zero width space)在 Rust 中都是合法的字符類型。

fn main() {let c = 'z';let z = '?';let heart_eyed_cat = '😻';
}

3.2 復合類型

??????Rust有兩種復合類型:元組(tuple)和數組(array)。

1. 元組

??????將多種類型的多個值組合到一個復合類型中的一種基本方式,元組的長度是固定的。

fn main(){let tup = (500, 30.1, "China");  //默認的類型創建元組let tup2:(i64, f32, bool) = (35, 34.1, true);  //顯式創建元組let (x, y, z) = tup2; //將tup2中的三個值分別賦給x,y,zprintln!("{} {} {}", x, y, z); //訪問tup2的方式1println!("{} {} {}", tup2.0, tup2.1, tup2.2) //訪問tup2的方式1
}

2. 數組

數組的每個元素的元素類型必須相同,且數據的長度固定。

fn main(){let a = [1, 2, 3, 4, 5]; //定義默認i32的5個元素的數組,組內元素為1~5let b: [i64; 5] = [1, 2, 3, 4, 5]; //定義i64型的5個元素的數組,組內元素為1~5let c = [3; 5];   //長度為5,元組全為3,即相當于[3, 3, 3, 3, 3]for item in c{println!("item = {}", item) //循環輸出c內的元素}println!("a[0] = {}", a[0]);   //單個訪問
}

四、函數

Rust的函數以fn關鍵字開頭,函數和變量名中所有字母都是小寫并使用下劃線分隔單詞,函數參數必須指明類型。

fn another_function(x: i32, source: &str){println!("x = {}, source = {}", x, source);
}fn main(){another_function(32, "China");
}

五、語句和表達式

  • 函數的函數體由一系列語句組成,也可以表達式結尾。
  • 語句是執行一些操作但不返回值的指令。表達式(expression)計算并產生一個值。
fn main(){// let x = (let y = 6); //語句不返回值,因此bool得不到初始值let x = {let  y = 6;y + 1    //不能加分號結尾,加分號后就成了語句};  //{}整體是表達式,返回值是y+1=7println!("x = {}", x);
}

六、函數的返回值

  • rust并不對返回值命令,以->聲明返回值的類型。
  • rust中的函數返回值等于最后一個表達式的值。
  • 使用return x可以提前返回

fn get_return_value(x: i32) -> i32 {if x < 0{return -1;}x
}fn main() {let x = get_return_value(-1);let y = get_return_value(10);println!("{}, {}", x,y);  //-1, 10
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24530.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24530.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24530.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《青少年編程與數學》課程方案:4、課程策略

《青少年編程與數學》課程方案&#xff1a;4、課程策略 一、工程師思維二、使命感驅動三、價值觀引領四、學習現代化五、工作生活化六、與時代共進 《青少年編程與數學》課程策略強調采用工程師思維&#xff0c;避免重復造輪子&#xff0c;培養使命感&#xff0c;通過探索興趣、…

編程語言有哪些?這些希望你都知道

編程語言有哪些 編程語言有很多種&#xff0c;包括但不限于以下幾種&#xff1a; Java&#xff1a;當今最普遍使用的開發語言之一&#xff0c;簡單易學&#xff0c;且跨平臺性非常強&#xff0c;對網絡開發的支持令人稱贊。Python&#xff1a;語法清楚&#xff0c;干凈&#…

【Vue】如何提供訪問vuex的數據

文章目錄 一、提供數據二、訪問Vuex中的數據通過$store訪問的語法1&#xff09;模板中使用2&#xff09;組件邏輯中使用3&#xff09;js文件中使用 三、通過輔助函數 - mapState獲取 state中的數據 一、提供數據 State提供唯一的公共數據源&#xff0c;所有共享的數據都要統一…

[office] 快速刪除excel中的空行和列的方法 #其他#學習方法#經驗分享

快速刪除excel中的空行和列的方法 用戶在網上下載好的Excel表格打開之后發現有很多空白行&#xff0c;怎么樣將這些空白行或單元格一次性刪除掉呢?下面教大家在Excel中用定位一次性可以把空白行刪除 用戶在網上下載好的Excel表格打開之后發現有很多空白行&#xff0c;怎么樣將…

Vue3 使用audio播放語音+監聽播放語音完成事件

需求&#xff1a;輸入一段文字&#xff0c;點擊語音框&#xff0c;將本地語音&#xff08;提前準備好的&#xff09; 播放出來 播放中效果 代碼 <div class"listConAI" click"handleOpenSpeech" ><imgsrc"../../../../assets/images/blueo…

web前端 孫俏:深度探索與實戰之路

web前端 孫俏&#xff1a;深度探索與實戰之路 在這個數字化、信息化的時代&#xff0c;web前端技術以其獨特的魅力&#xff0c;吸引著越來越多的開發者投身其中。今天&#xff0c;我們將跟隨孫俏的腳步&#xff0c;一同探索web前端的深度與廣度&#xff0c;揭開其神秘的面紗。…

中文文案寫作有哪些合適的AIGC工具?

這是計育韜老師第 8 次開展面向全國高校的新媒體技術公益巡講活動了。而在每場講座尾聲&#xff0c;互動答疑環節往往反映了高校師生當前最普遍的運營困境&#xff0c;特此計老師在現場即興答疑之外&#xff0c;會盡量選擇有較高價值的提問進行文字答疑梳理。 *本輪巡講主題除了…

【Vue】開啟嚴格模式及Vuex的單項數據流

文章目錄 一、引出問題二、開啟嚴格模式 一、引出問題 目標 明確 vuex 同樣遵循單向數據流&#xff0c;組件中不能直接修改倉庫的數據 這樣數據的流向才會更加清晰&#xff0c;將來對數據的修改&#xff0c;都在倉庫內部實現的&#xff0c;更易于維護 直接在組件中修改Vuex中…

Git:版本控制的藝術與GitLab實戰指南

在當今快速發展的軟件開發領域&#xff0c;高效、協同的代碼管理是項目成功的關鍵。Git&#xff0c;作為一款分布式版本控制系統&#xff0c;憑借其強大的功能和靈活性&#xff0c;成為了眾多開發者首選的版本控制工具。本文將帶您深入探索Git的核心概念、基礎操作&#xff0c;…

B3870 [GESP202309 四級] 變長編碼

[GESP202309 四級] 變長編碼 題目描述 小明剛剛學習了三種整數編碼方式&#xff1a;原碼、反碼、補碼&#xff0c;并了解到計算機存儲整數通常使用補碼。但他總是覺得&#xff0c;生活中很少用到 2 31 ? 1 2^{31}-1 231?1 這么大的數&#xff0c;生活中常用的 0 ~ 100 0…

Spring進階技巧:利用AOP提前介入的巧妙實踐

Spring框架中的面向切面編程&#xff08;AOP&#xff09;是一種強大的機制&#xff0c;它允許開發者在不修改原有代碼的情況下&#xff0c;對程序進行橫向切面的功能擴展。AOP提供了一種方式&#xff0c;可以在目標Bean的生命周期早期階段就實施切面邏輯&#xff0c;這為我們在…

Python 中如何使用 lambda 函數

在 Python 中&#xff0c;可以使用 lambda 函數來創建匿名函數。lambda 函數的語法是&#xff1a;lambda 參數: 表達式。以下是一些使用 lambda 函數的例子&#xff1a; 通過 lambda 函數來計算兩個數的和&#xff1a; add lambda x, y: x y print(add(2, 3)) # 輸出 5通過…

Oracle 日志挖掘

oracle 11g 日志挖掘測試 需要開啟補充日志 alter database add supplemental log data; SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;在用戶下執行一些刪除&#xff0c;插入等操作 SQL> create table zxy( …

LLM評測數據集

1. C-Eval 數據集源地址: C-Eval Official Repository 數據范圍: 該數據集包括學科類知識測試&#xff0c;涵蓋廣泛的學科知識&#xff0c;例如數學、物理、化學等。 數據集大小及數據形式: 數據集包含13,948道單選題&#xff0c;題目均為中文。 論文地址: C-Eval: A Multi-…

【一百一十】【算法分析與設計】[SDOI2009] HH的項鏈,樹狀數組應用,查詢區間的種類數,樹狀數組查詢區間種類數

P1972 [SDOI2009] HH的項鏈 [SDOI2009] HH的項鏈 題目描述 HH 有一串由各種漂亮的貝殼組成的項鏈。HH 相信不同的貝殼會帶來好運&#xff0c;所以每次散步完后&#xff0c;他都會隨意取出一段貝殼&#xff0c;思考它們所表達的含義。HH 不斷地收集新的貝殼&#xff0c;因此&am…

SMS - 基于阿里云實現手機短信驗證碼登錄(無需備案,非測試)

目錄 SMS 環境調試 從阿里云云市場中購買第三方短信服務 調試短信驗證碼功能 實戰開發 封裝組件 對外接口 調用演示 SMS 環境調試 從阿里云云市場中購買第三方短信服務 a&#xff09;進入阿里云首頁&#xff0c;然后從云市場中找到 “短信” &#xff08;一定要從 云…

如何實現網站HTTPS訪問

在當今網絡安全至關重要的時代&#xff0c;HTTPS已經成為網站安全的基本標準。HTTPS&#xff08;超文本傳輸安全協議&#xff09;通過在HTTP協議基礎上加入SSL加密層&#xff0c;確保了數據在用戶瀏覽器和服務器之間的傳輸是加密的&#xff0c;有效防止數據被竊取或篡改&#x…

calico node一直not ready

背景 我司某個大數據集群在做完添加到集群聯邦管理后&#xff0c;該集群的calico-node全部處于not ready 狀態&#xff0c;導致集群中節點之前的跨節點容器網絡不通。 操作 將大數據所在的k8s集群添加到集群聯邦的控制平面后&#xff0c;我們為了做各個子集群之間的容器網絡…

換熱器設計參數的選用

1 換熱管類型 光管&#xff1a;適用于任何條件&#xff1b;應用面廣 螺紋管&#xff1a;殼程流體的膜傳熱系數相當于管程傳熱系數1/3~3/5的場合&#xff1b;強化殼程傳熱系數&#xff0c;提高總傳熱系數&#xff1b;結垢速率低&#xff0c;結垢周期長。 波紋管&#xff1a;管…

使用 PAI-DSW x Free Prompt Editing圖像編輯算法,開發個人AIGC繪圖小助理

教程簡述 在本教程中&#xff0c;您將學習在阿里云交互式建模平臺PAI-DSW x Free Prompt Editing&#xff08;CVPR2024中選論文算法&#xff09;圖像編輯算法&#xff0c;開發個人AIGC繪圖小助理&#xff0c;實現文本驅動的圖像編輯功能單卡即可完成AIGC圖片風格變化、背景變化…