Quý vị có biết từ "immutable" trong lập trình nghĩa là gì không?
Từ này có thể tạm dịch ra tiếng Việt là "không thể chỉnh sửa". Trong lập trình, nó có thể hiểu là "không thể chỉnh sửa, chỉ có thể thay mới"
Điển hình là kiểu biến String trong VBA. String chỉ có thể thay mới chứ không thể chỉnh sửa (có ngoại lệ là dùng hàm MID)
str1 = "12345"
str1 = str1 & "abc"
VBA không thể giản dị cộng "abc" vào chuỗi có sẵn của str1. Trong bộ nhớ, str1 được định độ dài là 5 bytes. VBA không thể nới thành 8 bytes để chứa trị mới. (nới nhằm vùng nhớ của biến khác thì sao?)
Vì vậy VBA phải lập một chuỗi mới có chiều dài là 8 bytes, chép trị mới (12345abc) vào, chĩa str1 vào chỗ mới này và trả 5 bytes ban đầu lại cho hệ thống (ụ nhớ).
Các kiểu biến căn bản khác như integer, long,... dùng độ dài cố định cho nên được liệt vào loại "mutable". Khi gán trị mới thì VBA chỉ việc chép trị mới vào dùng nhớ của biến, hết.
Nếu tôi nhớ không lầm thì keys và items của dictionary được ghi theo kiểu immutable. Tức là code chỉ có thể thay mới chúng chứ không thể sửa chúng.
Tuy array là mutable (khi gán trị cho phần tử thì địa chỉ array vẫn nằm đấy) nhưng khi ghi vào item thì nó phải chịu luật immutable của dictionary. Nói cách khác, cde chỉ có thể thay thế key hoặc item chứ không thể chỉnh một phần của key hoặc item.
(lưu ý là tôi có nói "nếu nhớ không lầm". Quý vị siêng thì tìm tài liệu kiểm chứng hoặc bác bỏ. Bản thân tôi thì hiện tại lười tìm hiểu thêm về VBA quá)