昨天介紹了簡單的基本概念,今天就要來介紹變數跟基本型別了
當我們需要將一個值儲存起來,在日後做使用的時候,我們就需要用到變數
將變數指向這個值,需要的時候再拿出來用他
我們來看一下在 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 中,大寫與小寫是不同的,所以 age != AGE
還有幾個規則務必要遵守
常數顧名思義就是永恆不變的,所以基本上他是不能被改變的
在 Rust 中定義常數的方式跟 JavaScript 很像
const PI: f32 = 3.14;
之後再賦予一個值給常數即可
我們來試試印出常數
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 屬於強型別語言,必須明確定義型別給它,否則他會自行判斷型別
我們剛剛在定義常數的時候有加上了型別,相信大家在定義的時候知道怎麼加入型別了
所以就來看一下基本型別有哪些吧!
年齡都是用整數來算,用以下範例來舉例
fn main() {
let age: i8 = 18;
println!("{}", age);
}
來一一拆解一下
i
指的是 integer8
指的是 在記憶體中佔據 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`.
會出現不可以加上 -
的錯誤訊息哦!
浮點數有 32 bits 跟 64 bits 兩種選項,小數點後面的位數越多,要使用的 bits 數就要越大 (因為要存在記憶體中)
fn main() {
let product_price: f32 = 5.5;
println!("{}", product_price);
}
# 結果: 5.5
布林值的定義很簡單,只要加上 bool
即可
fn main() {
let have_fun: bool = true;
println!("{}", have_fun);
}
# 結果: true
我們可以定義任何符號,甚至是數字為字的型別,型別設定為 char
即可
但只能放一個字
喔,後面務必要用單引號
,雙引號是用來定義字串的
fn main() {
let money: char = '$';
println!("{}", money);
}
# 結果: $
型別一旦定義後就不能再變了嗎?
Rust 提供了變換型別的方法,我們明天再來介紹