<< Chapter < Page | Chapter >> Page > |
Ví dụ trước khi thực hiện lệnh gán X := A * B việc kiểm tra phải được xác định đối với 2 phép toán nhân và phép gán. Trước hết phép nhân phải nhận được 2 tham số A, B có kiểu số, nếu cả A và B đúng là có kiểu số (chẳng hạn số nguyên) thì tiếp tục kiểm tra cho phép toán gán. Tích A*B sẽ là một số nguyên nên X cũng phải là một biến thuộc kiểu nguyên, nếu không đúng như vậy thì có sự sai kiểu.
Kiểm tra kiểu có thể được tiến hành trong lúc chạy chương trình (kiểm tra kiểu động) hoặc trong lúc biên dịch chương trình (kiểm tra kiểu tĩnh).
Khái niệm:
Kiểm tra kiểu động là kiểm tra kiểu được thực hiện trong khi thực hiện chương trình.
Thông thường kiểm tra kiểu động được thực hiện một cách tức thì trước khi thực hiện một phép toán.
Phương pháp thực hiện:
Ðể kiểm tra kiểu động người ta phải lưu trữ thông tin về kiểu của mỗi một ÐTDL cùng với ĐTDL đó. Trước khi thực hiện một phép toán thông tin về kiểu của mỗi một đối số được kiểm tra. Nếu kiểu của các đối số là đúng thì phép toán sẽ được thực hiện và kiểu của kết quả sẽ được ghi lại để dùng kiểm tra cho các phép toán sau, ngược lại sẽ có một thông báo lỗi về kiểu .
Ngôn ngữ sử dụng:
Kiểm tra kiểu động được sử dụng trong các ngôn ngữ không khai báo như SNOBOL4, LISP, APL. Trong các ngôn ngữ này không có sự khai báo kiểu cho biến. Kiểu dữ liệu của các biến A và B trong biểu thức "A+B" có thể thay đổi trong quá trình thực hiện chương trình. Trong những trường hợp như vậy, kiểu của A và B phải được kiểm tra động tại mỗi lần phép cộng được gọi thực hiện. Trong các ngôn ngữ không khai báo, các biến đôi khi được gọi là không định kiểu vì chúng không có kiểu cố định.
Ưu điểm:
Ưu điểm chủ yếu của kiểm tra kiểu động là tính mềm dẻo trong khi viết chương trình: không yêu cầu khai báo kiểu và kiểu của ÐTDL có thể thay đổi trong quá trình thực hiện chương trình. Người lập trình không phải lo lắng về kiểu dữ liệu.
Nhược điểm:
Tuy nhiên kiểm tra kiểu động cũng có một số yếu điểm như sau:
Nhập số a từ bàn phím;
Nhập số b từ bàn phím;
Nếu a>b Thì x := a + b
Ngược lại x := a + “titi”;
Nếu khi thực hiện đoạn chương trình này, người sử dụng luôn luôn nhập số a lớn hơn số b thì điều kiện a>b luôn luôn đúng nên không bao giờ chương trình thực hiện lệnh x := a + “titi” do đó không bao giờ phát hiện lỗi về kiểu: a là một số, không thể cộng với “titi” là một chuỗi.
Notification Switch
Would you like to follow the 'Cấu trúc dữ liệu' conversation and receive update notifications?