iT邦幫忙

2023 iThome 鐵人賽

DAY 3
1
自我挑戰組

Let's go Rusty. 從0開始了解Rust.系列 第 3

Day 03 - 變數(Variable) & 資料型別(Data Type) & 註解(Comment)

  • 分享至 

  • xImage
  •  

也有英文版文章
Also this tutorial has been written in English
Check out my Medium: Rust 01 — Installatin, data types & println!

Rust的中文翻譯以參考這份檔案為主.


目錄

  • 變數(Variable)
  • 資料型別(Data Type)
  • 註解(Comment)

什麼是變數(variable)?

⭐ 查看Rust官網文章(繁體版) - 變數(variables)和可變性(Mutability)
變數就是分派檔案(Assign Data)到一個暫時的記憶體位址(a temporary memory location)

⚡Rust 程式都會用到變數綁定

在Rust, 變數綁定就是使用let宣告變數(預設不可變)

我們能將變數(variable)設定任何值和型別(value & type)

  • 變數預設為不可變性(immutable)
  • 可以設成可變性(mutable)
  • 常數(Constants)

🔹範例01 - 不可變性(immutable)

假如硬改不可變的變數x,這情況會...

fn main() {
    let x = 5;
    println!("x 的數值為:{x}");
    x = 6;
    println!("x 的數值為:{x}");
}

將會收到如下錯誤。
https://ithelp.ithome.com.tw/upload/images/20230906/20145149pZKIjj7yBN.png

這只是其中一個Rust推動你使用Rust提供的安全性(safety)和簡易性(easy concurrency)寫程式的方法之一。

⭐補充說明
並行(Concurrency) 是什麼?
簡而言之,就像暗殺教室-殺老師在一段時間內做許多事,但每個時間點只做一件事

和此相對的是Parallelism(平行),每個時間點同時做許多事(非人哉)。

🔹範例02 - 可變性(mutablility)

fn main() {
    let mut x = 5;
    println!("x 的數值為:{x}");
    x = 6;
    println!("x 的數值為:{x}");
}

https://ithelp.ithome.com.tw/upload/images/20230906/20145149DyyBv4i5he.png

🔹範例03 - 常數(constants)

  • 和不可變變數一樣,常數會讓數值與名稱綁定且不允許被改變,但是不可變變數與常數還是有些差異。
  • 無法在使用常數使用 mut,常數不是預設不可變,它們永遠都不可變
  • 當使用 const 宣告而非 let 的話,你必須指明型別
  • 常數只能被常數表達式設置
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
  • Rust 的常數命名規則為使用全部英文大寫並用底寫區隔每個單字

檔案型別Data Type

Rust 是一門靜態型別語言(Statically Typed Language),這代表它必須在編譯時知道所有變數的型別

型別常見如下:

  • 整數Integer
  • 布林值Boolean
  • 浮點數float: &32, &64
  • 字元char
  • 字串string

複合型別(Compound Types)如下:

  • 元組(tuples)
  • 陣列(arrays)

整數

https://ithelp.ithome.com.tw/upload/images/20230906/20145149Lf187oYteJ.png
更細節之數值,請看Rust官網繁體版 - 資料型別

浮點數

所有的浮點數型別都是帶號的(signed)

fn main() {
    let x = 2.0; // f64

    let y: f32 = 3.0; // f32
}

布林

fn main() {
    let t = true;

    let f: bool = false; // 型別詮釋的方式
}

字元char

fn main() {
    let something = 'a';
    let other_thing: char = 'A'; // 明確標註型別的寫法
    let heart_eyed_cat = '⭐';
}

字串String

fn main() {
    let hello = String::from("Hello, world!");
    println!("{}", hello)
}

Tuples

🔹 範例01

fn main() {
    let tup = (800, 4.5, 3);

    let (x, y, z) = tup;

    println!("y的值: {y}");
}

結果是

y的值: 4.5

🔹 範例02 - 另一種表達方式

fn main() {
    let x: (i32, f64, u8) = (500, 6.4, 1);

    let five_hundred = x.0;

    let six_point_four = x.1;

    let one = x.2;
}

Arrays

🔹 範例01 - 宣告方式百百種

fn main() {
    let a = [1, 2, 3, 4, 5];
    let months = [
        "一月",
        "二月",
        "三月",
        "四月",
        "五月",
        "六月",
        "七月",
        "八月",
        "九月",
        "十月",
        "十一月",
        "十二月",
    ];
    let b: [i32; 5] = [1, 2, 3, 4, 5];
    let c = [3; 5];

    println!("The value of a is: {:?}", a);
    println!("The value of months is: {:?}", months);
    println!("The value of b is: {:?}", b);
    println!("The value of c is: {:?}", c);
}

https://ithelp.ithome.com.tw/upload/images/20230906/20145149f79dxDK1MN.png

🔹 範例02 - 獲取陣列元素的方法

fn main() {
    let a = [1, 2, 3, 4, 5];

    let first = a[0];
    let second = a[1];
}

註解(Comment)

最後不得不提的就是註解(Comment),好的註解簡易說明了此行/此段落程式碼,幫助工程師們互相交流、互相了解、互相抄襲


參考資料 Reference

Nice 教學影片


上一篇
Day 02 - 安裝Rust & println!
下一篇
Day 04 - 函式(Functions) & 控制流程(Control Flow) - if/else
系列文
Let's go Rusty. 從0開始了解Rust.15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言