iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0

昨天介紹了簡單的基本概念,今天就要來介紹變數跟基本型別了

變數是什麼

當我們需要將一個值儲存起來,在日後做使用的時候,我們就需要用到變數

將變數指向這個值,需要的時候再拿出來用他

我們來看一下在 Rust 中該怎麼定義變數

定義變數

我們會用 let 來定義變數 (有點像 JavaScript),來看看以下範例

let aa = 1;

我們會定義出一個 aa 的變數,並將它的值指向 1

接下來我們試著印出變數

fn main() {
  let age = 18;
  println!("{}", age)
}
$ rustc main.rs
$ ./main

# 18

Rust 對於變數相對嚴謹,基本上定義後就不能再改變

如果手賤想給他改值呢?

fn main() {
  let age = 18;
  println!("{}", age)
}
$ rustc main.rs

error[E0384]: cannot assign twice to immutable variable `age`
 --> main.rs:5:3
  |
2 |   let age = 18;
  |       ---
  |       |
  |       first assignment to `age`
  |       help: consider making this binding mutable: `mut age`
...
5 |   age = 19;
  |   ^^^^^^^^ cannot assign twice to immutable variable

error: aborting due to previous error

For more information about this error, try `rustc --explain E0384`.

在編譯的時候就直接噴錯給你看

但我們一定會需要改變變數值的時候,該怎麼做呢?

使用 mut 就可以定義一個可變的變數

let mut age = 18;

我們實際來試試

fn main() {
  let mut age = 18;
  println!("{}", age);

  age = 19;
  println!("{}", age);
}
$ rustc main.rs
$ ./main

# 18
# 19

以上是 Rust 定義變數的方式

Rust 變數命名規則

在 Rust 中,大寫與小寫是不同的,所以 age != AGE

還有幾個規則務必要遵守

  • 開頭不可用數字
  • 除了英文 / 數字 / 底線以外,不可加入其他符號或語言文字
  • 如果會有兩個以上的單字,請用蛇式命名法,比如說變數名稱是我的年齡,可取作 my_age

常數是什麼

常數顧名思義就是永恆不變的,所以基本上他是不能被改變的

定義常數

在 Rust 中定義常數的方式跟 JavaScript 很像

const PI: f32 = 3.14;
  • 定義方式:使用 const
  • 名稱:const 後面必須接大寫
  • 指定型別:需指定型別給它,否則他會自行判斷,稍後我們會介紹型別

之後再賦予一個值給常數即可

我們來試試印出常數

fn main() {
  const AGE: i8 = 18;
  println!("{}", AGE);
}
$ rustc main.rs
$ ./main

# 18

如果我們想改常數的值呢?會發生什麼事

應該想都不用想就是會噴錯,不過會噴什麼錯誤呢?

fn main() {
  const AGE: i8 = 18;
  println!("{}", AGE);

  AGE = 19;
  println!("{}", AGE);
}
$ rustc main.rs

error[E0070]: invalid left-hand side of assignment
 --> main.rs:5:7
  |
5 |   AGE = 19;
  |   --- ^
  |   |
  |   cannot assign to this expression

error: aborting due to previous error

For more information about this error, try `rustc --explain E0070`.

它會跟你說左邊的定義是不合法的唷!

以上是 Rust 常數與變數的基本定義介紹

基本型別

Rust 屬於強型別語言,必須明確定義型別給它,否則他會自行判斷型別

我們剛剛在定義常數的時候有加上了型別,相信大家在定義的時候知道怎麼加入型別了

所以就來看一下基本型別有哪些吧!

  • 整數 Integer
  • 浮點數 Floating-Point
  • 布林值 Boolean
  • 字 Character

整數 Integer

年齡都是用整數來算,用以下範例來舉例

fn main() {
  let age: i8 = 18;
  println!("{}", age);
}

來一一拆解一下

i 指的是 integer
8 指的是 在記憶體中佔據 8 bits

如果今天要存取的數字比較大,可以用 32 64
不管是正數還是負數都算在 integer 的型別範圍內

假設今天要指定這個型別只能為正數,我們需把 i 換成 u 就可以囉

fn main() {
  let age: i8 = 18;
  println!("{}", age);
}

# 結果: 18

如果把它定義成負數會怎樣呢?

fn main() {
  let price: u32 = -100;
  println!("{}", price);
}
$ rustc main.rs

error[E0600]: cannot apply unary operator `-` to type `u32`
 --> main.rs:2:20
  |
2 |   let price: u32 = -100;
  |                    ^^^^ cannot apply unary operator `-`
  |
  = note: unsigned values cannot be negated

error: aborting due to previous error

For more information about this error, try `rustc --explain E0600`.

會出現不可以加上 - 的錯誤訊息哦!

浮點數 Floating-Point

浮點數有 32 bits 跟 64 bits 兩種選項,小數點後面的位數越多,要使用的 bits 數就要越大 (因為要存在記憶體中)

fn main() {
  let product_price: f32 = 5.5;
  println!("{}", product_price);
}

# 結果: 5.5

布林值 Boolean

布林值的定義很簡單,只要加上 bool 即可

fn main() {
  let have_fun: bool = true;
  println!("{}", have_fun);
}

# 結果: true

字 Character

我們可以定義任何符號,甚至是數字為字的型別,型別設定為 char 即可
但只能放一個字喔,後面務必要用單引號,雙引號是用來定義字串的

fn main() {
  let money: char = '$';
  println!("{}", money);
}

# 結果: $

型別一旦定義後就不能再變了嗎?
Rust 提供了變換型別的方法,我們明天再來介紹


上一篇
Day01 Rust 基本介紹及安裝
下一篇
Day 03 轉換型別及邏輯判斷
系列文
成為程式界的 F1 賽車手,用 30 天認識 Rust 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言