Chặn phạm vi (scope guard) cho phép thực hiện các biểu thức trước khi
kết thúc khối mã nguồn (block
, mỗi block
là nhóm các biểu thức, mã
nguồn đặt bên trong cặp dấu ngoại { ... }
) hiện tại:
scope(exit)
sẽ luôn thi hành khi kết thúc block
scope(success)
chỉ thi hành khi khối mã hiện tại không phát sinh lỗi ngoại lệ
scope(failure)
chỉ thi hành khi khối mã hiện tại phát sinh lỗi ngoại lệ
Dùng các chặn phạm vi giúp mã nguồn sạch hơn, và cho phép đặt gần nhau phần mã nguồn để truy xuất tài nguyên và phần mã nguồn để dọn dẹp. Các chặn cũng tăng tính an toàn, bởi nhờ đó bạn có thể đảm bảo việc dọn dẹp luôn được thực hiện, độc lập với các hướng phát triển khác nhau trong mạch logic của ứng dụng.
Các chặn phạm vi trong D thay thế hiệu qua cho ý niệm RAII
trong C++
(RAII
thường dẫn tới các đối tượng chặn phạm vi đặc biệt dành cho
các tài nguyên đặc biệt.)
Lưu ý là các biểu thức chặn phạm vi được gọi theo thứ tự ngược với thứ tự mà chúng được định nghĩa.