String
String
là kiểu dữ liệu chuẩn sử dụng để lưu trữ chuỗi UTF-8 trên bộ nhớ heap, có thể được mở rộng:
String
implement Deref<Target = str>
, có nghĩa tất cả các hàm của str
đều có thể được gọi trên một biến kiểu String
.
Speaker Notes
This slide should take about 10 minutes.
String::new
trả về một chuỗi rỗng. Khi dữ liệu cần đẩy vào chuỗi đã được xác định trước, hãy sử dụngString::with_capacity
.String::len
trả về kích thước củaString
theo byte (có thể khác với số ký tự trong chuỗi).String::chars
trả về một con trỏ chạy dọc theo các ký tự của chuỗi. Lưu ý rằng mộtchar
có thể khác với một “ký tự” thông thường bởi vì một khái niệm gọi là grapheme clusters.- Khi nói đến chuỗi, ta có thể sử dụng
&str
hoặcString
đều được. - Khi một kiểu dữ liệu implement
Deref<Target = T>
, trình biên dịch sẽ cho phép gọi các hàm thuộc vềT
trên kiểu dữ liệu đó.- Chúng ta chưa đi sâu vào
Deref
trait, việc đề cập đếnDeref
ở đây chủ yếu là để giải thích cấu trúc của mục lục tài liệu. String
implementDeref<Target = str>
, nên các hàm củastr
đều có thể được gọi trên các biến kiểuString
.- So sánh
let s3 = s1.deref();
vàlet s3 = &*s1;
. Cái nào dễ hiểu hơn?
- Chúng ta chưa đi sâu vào
String
được được viết dựa trên một vector gồm nhiều byte, nên những hàm gọi được trên vector cũng có thể được gọi trênString
, nhưng đi kèm với một số điều kiện để đảm bảo các tính chất của chuỗi.- So sánh các cách truy cập phần tử trong một biến kiểu
String
:- Truy cập một ký tự bằng cách sử dụng
s3.chars().nth(i).unwrap()
vớii
nằm trong phạm vi của chuỗi, và vớii
nằm ngoài phạm vi của chuỗi. - Truy cập một xâu con bằng cách sử dụng
s3[0..4]
, với phạm vi của xâu con con giao thoa với ranh giới của các ký tự cận biên, hoặc với các ký tự cận biên hoàn toàn nằm bên trong xâu con. Ví dụ, truy cậps[5..7] với
s = “Xin chào”`.
- Truy cập một ký tự bằng cách sử dụng
- Nhiều kiểu dữ liệu có thể được chuyển đổi thành chuỗi bằng phương thức
to_string
. Trait này đã được implement sẵn cho tất cả các kiểu dữ liệu implementDisplay
, nên bất cứ giá trị nào có thể được định dạng cũng có thể được chuyển thành chuỗi.