Rust - Loại dữ liệu

Hệ thống Loại biểu thị các loại giá trị khác nhau được ngôn ngữ hỗ trợ. Hệ thống Loại kiểm tra tính hợp lệ của các giá trị được cung cấp, trước khi chúng được chương trình lưu trữ hoặc thao tác. Điều này đảm bảo rằng mã hoạt động như mong đợi. Hệ thống Loại cũng cho phép gợi ý mã phong phú hơn và tài liệu tự động.

Rust là một ngôn ngữ được gõ tĩnh. Mọi giá trị trong Rust đều thuộc một kiểu dữ liệu nhất định. Trình biên dịch có thể tự động suy ra kiểu dữ liệu của biến dựa trên giá trị được gán cho nó.

Khai báo một biến

Sử dụng let từ khóa để khai báo một biến.

fn main() {
   let company_string = "TutorialsPoint";  // string type
   let rating_float = 4.5;                 // float type
   let is_growing_boolean = true;          // boolean type
   let icon_char = '♥';                    //unicode character type

   println!("company name is:{}",company_string);
   println!("company rating on 5 is:{}",rating_float);
   println!("company is growing :{}",is_growing_boolean);
   println!("company icon is:{}",icon_char);
}

Trong ví dụ trên, kiểu dữ liệu của các biến sẽ được suy ra từ các giá trị được gán cho chúng. Ví dụ: Rust sẽ gán kiểu dữ liệu chuỗi cho biến company_string , kiểu dữ liệu float cho rating_float , v.v.

Bản in ! macro có hai đối số -

  • Cú pháp đặc biệt {} , là trình giữ chỗ
  • Tên biến hoặc một hằng số

Phần giữ chỗ sẽ được thay thế bằng giá trị của biến

Đầu ra của đoạn mã trên sẽ là:

company name is: TutorialsPoint
company rating on 5 is:4.5
company is growing: true
company icon is: ♥

Các loại vô hướng

Kiểu vô hướng đại diện cho một giá trị duy nhất. Ví dụ: 10,3.14, 'c'. Rust có bốn kiểu vô hướng chính.

  • Integer
  • Floating-point
  • Booleans
  • Characters

Chúng ta sẽ tìm hiểu về từng loại trong các phần tiếp theo của chúng tôi.

Số nguyên

Một số nguyên là một số không có thành phần phân số. Nói một cách đơn giản, kiểu dữ liệu số nguyên được sử dụng để biểu diễn các số nguyên.

Số nguyên có thể được phân loại thêm là Đã ký và Chưa ký. Số nguyên có dấu có thể lưu trữ cả giá trị âm và giá trị dương. Các số nguyên không dấu chỉ có thể lưu trữ các giá trị dương. Mô tả chi tiết nếu các kiểu số nguyên được cung cấp bên dưới:

Sr.No. Kích thước Đã ký Chưa ký
1 8 bit i8 u8
2 16 bit i16 u16
3 32 bit i32 u32
4 64 bit i64 u64
5 128 bit i128 u128
6 Vòm isize sử dụng

Kích thước của một số nguyên có thể là vòm . Điều này có nghĩa là kích thước của kiểu dữ liệu sẽ được lấy từ kiến trúc của máy. Một số nguyên có kích thước là vòm sẽ là 32 bit trên máy x86 và 64 bit trên máy x64. Một số nguyên vòm chủ yếu được sử dụng khi lập chỉ mục một số loại tập hợp.

Hình minh họa

fn main() {
   let result = 10;    // i32 by default
   let age:u32 = 20;
   let sum:i32 = 5-15;
   let mark:isize = 10;
   let count:usize = 30;
   println!("result value is {}",result);
   println!("sum is {} and age is {}",sum,age);
   println!("mark is {} and count is {}",mark,count);
}

Đầu ra sẽ như dưới đây:

result value is 10
sum is -10 and age is 20
mark is 10 and count is 30

Đoạn mã trên sẽ trả về lỗi biên dịch nếu bạn thay thế giá trị của tuổi bằng giá trị dấu phẩy động.

Dải số nguyên

Mỗi biến thể có dấu có thể lưu trữ các số từ - (2 ^ (n-1) đến 2 ^ (n-1) -1 , trong đó n là số bit mà biến thể sử dụng. Ví dụ: i8 có thể lưu trữ các số từ - (2 ^ 7) thành 2 ^ 7 -1 - ở đây chúng tôi thay thế n bằng 8.

Mỗi biến thể không dấu có thể lưu trữ các số từ 0 đến (2 ^ n) -1 . Ví dụ: u8 có thể lưu trữ các số từ 0 đến 2 ^ 7 , tương đương với 0 đến 255.

Tràn số nguyên

Tràn số nguyên xảy ra khi giá trị được gán cho một biến số nguyên vượt quá phạm vi được xác định Rust cho kiểu dữ liệu. Hãy để chúng tôi hiểu điều này với một ví dụ -

fn main() {
   let age:u8 = 255;

   // 0 to 255 only allowed for u8
   let weight:u8 = 256;   //overflow value is 0
   let height:u8 = 257;   //overflow value is 1
   let score:u8 = 258;    //overflow value is 2

   println!("age is {} ",age);
   println!("weight is {}",weight);
   println!("height is {}",height);
   println!("score is {}",score);
}

Phạm vi hợp lệ của biến u8 không dấu là 0 đến 255. Trong ví dụ trên, các biến được gán giá trị lớn hơn 255 (giới hạn trên cho một biến số nguyên trong Rust). Khi thực thi, đoạn mã trên sẽ trả về cảnh báo -warning − literal out of range for u8cho các biến cân nặng, chiều cao và điểm số. Các giá trị tràn sau 255 sẽ bắt đầu từ 0, 1, 2, v.v. Kết quả cuối cùng không có cảnh báo như hình dưới đây:

age is 255
weight is 0
height is 1
score is 2

Phao nổi

Kiểu dữ liệu nổi trong Rust có thể được phân loại là f32f64. Loại f32 là phao chính xác đơn và f64 có độ chính xác gấp đôi. Loại mặc định là f64. Hãy xem xét ví dụ sau để hiểu thêm về kiểu dữ liệu float.

fn main() {
   let result = 10.00;        //f64 by default
   let interest:f32 = 8.35;
   let cost:f64 = 15000.600;  //double precision
   
   println!("result value is {}",result);
   println!("interest is {}",interest);
   println!("cost is {}",cost);
}

Đầu ra sẽ như hình dưới đây -

interest is 8.35
cost is 15000.6

Đúc loại tự động

Không cho phép đúc kiểu tự động trong Rust. Hãy xem xét đoạn mã sau. Một giá trị số nguyên được gán cho biến floatinterest.

fn main() {
   let interest:f32 = 8;   // integer assigned to float variable
   println!("interest is {}",interest);
}

Trình biên dịch ném một mismatched types error như được đưa ra bên dưới.

error[E0308]: mismatched types
   --> main.rs:2:22
   |
 2 | let interest:f32=8;
   |    ^ expected f32, found integral variable
   |
   = note: expected type `f32`
      found type `{integer}`
error: aborting due to previous error(s)

Dấu phân cách số

Để dễ đọc các số lớn, chúng ta có thể sử dụng dấu phân cách trực quan _ dấu gạch dưới để phân tách các chữ số. Đó là 50.000 có thể được viết là 50_000. Điều này được hiển thị trong ví dụ dưới đây.

fn main() {
   let float_with_separator = 11_000.555_001;
   println!("float value {}",float_with_separator);
   
   let int_with_separator = 50_000;
   println!("int value {}",int_with_separator);
}

Đầu ra được đưa ra dưới đây -

float value 11000.555001
int value 50000

Boolean

Kiểu boolean có hai giá trị có thể có - đúng hoặc sai . Sử dụngbool từ khóa để khai báo một biến boolean.

Hình minh họa

fn main() {
   let isfun:bool = true;
   println!("Is Rust Programming Fun ? {}",isfun);
}

Đầu ra của đoạn mã trên sẽ là:

Is Rust Programming Fun ? true

Tính cách

Kiểu dữ liệu ký tự trong Rust hỗ trợ số, bảng chữ cái, Unicode và các ký tự đặc biệt. Sử dụngchartừ khóa để khai báo một biến kiểu dữ liệu ký tự. Kiểu char của Rust đại diện cho Giá trị vô hướng Unicode, có nghĩa là nó có thể đại diện cho nhiều thứ hơn là chỉ ASCII. Giá trị vô hướng Unicode có phạm vi từU+0000 đến U+D7FFU+E000 đến U+10FFFF bao gồm.

Chúng ta hãy xem xét một ví dụ để hiểu thêm về kiểu dữ liệu Ký tự.

fn main() {
   let special_character = '@'; //default
   let alphabet:char = 'A';
   let emoji:char = '';
   
   println!("special character is {}",special_character);
   println!("alphabet is {}",alphabet);
   println!("emoji is {}",emoji);
}

Đầu ra của đoạn mã trên sẽ là:

special character is @
alphabet is A
emoji is