Dynamic scope là gì?

Phrase Programming
dynamic scoping

Trong dynamic scope, khi ta truy cập / truy xuất một biến (variable), giá trị của biến đó được tìm bằng cách tìm trong khối (block) của biến đó và nếu không tìm thấy thì tìm kiếm trong hàm đang gọi của nó và nếu vẫn không tìm thấy thì tìm trong hàm đã gọi hàm đang gọi đó và và cứ tiếp tục như vậy. Mặc dù nghe định nghĩa có vẻ mơ hồ, bây giờ chúng ta xem một ví dụ trong C để hiểu rõ dynamic scope. Chú ý là ngôn ngữ C là static scope không phải là dynamic scope cho nên chúng ta giả sử code ngôn ngữ C bên dưới là dynamic scope.


int x = 50;
int fun2(){
    return x;
}
int fun1(){
    int x = 10;
    int y = fun2();
    return y;
}

int main()
{
    printf("%d",fun1());

    return 0;
}

Trong code trên ta thấy hàm fun1 gọi hàm fun2. Ở đây chúng ta chú ý đến giá trị trả về của hàm fun2 tức là trả về giá trị của biến x. Do dynamic scope, nên để tìm được giá trị của x trong hàm fun2, đầu tiên chương trình sẽ tìm định nghĩa biến x trong khối (block) chứa x tức là ở trong hàm fun2, chúng ta thấy bên trong hàm fun2 không có định nghĩa x, nên tiếp theo chương trình sẽ tìm định nghĩa của x trong hàm gọi hàm fun2 tức là hàm fun1, trong hàm fun1 chương trình tìm thấy định nghĩa của x (câu lệnh int x = 10). Vậy hàm fun2 trả về giá trị 10. Lưu ý nếu code trên là static scope thì hàm fun2 trả về giá trị 50 (giá trị biến x trong câu lệnh int x = 50;). Xem thêm static scope.

Learning English Everyday