Trang chủ > Uncategorized > Static/dynamic typing và strong/weak typing

Static/dynamic typing và strong/weak typing

Đôi khi người ta hay nhầm lẫn giữa static/dynamic typing và strong/weak typing. Phổ biến nhất là việc mặc nhiên xem các ngôn ngữ static typing là strong typing, và ngôn ngữ dynamic typing là weak typing. Thực tế đây là hai cách phân loại kiểm tra kiểu (type checking) khác nhau.

Static/dynamic typing

Đây là cách phân loại dựa vào thời điểm thực hiện kiểm tra kiểu.

Một ngôn ngữ lập trình thuộc dạng static typing (định kiểu chặt?) khi phần lớn công việc kiểm tra kiểu được thực hiện lúc biên dịch. Do khi biên dịch ta không thể xác định được giá trị của biến tại vị trí bất kì trong chương trình, trình biên dịch ngôn ngữ static typing phải gán kiểu cho biến ngay từ đầu (nhờ lập trình viên khai báo hoặc tự xác định khi biến được khởi tạo).

Trong khi đó, ngôn ngữ dạng dynamic typing kiểm tra kiểu lúc runtime. Kiểu của biến được xác định dựa vào giá trị của nó lúc sử dụng. Do đó, việc gán kiểu cho biến lúc biên dịch là không cần thiết (gán cũng được, nhưng như thế thì không cần đến dynamic typing nữa).

C là ngôn ngữ static typing, còn Python là ngôn ngữ dynamic typing. Để hiểu thêm, so sánh sự khác nhau giữa var (static typing) và dynamic (dynamic typing) trong C#.

Strong/weak typing

Khi kiểu của tham số trong một biểu thức không phù hợp, trình biên dịch phải chuyển tham số này thành kiểu đúng, rồi mới tính giá trì biểu thức. Tùy thuộc vào khả năng chuyển đổi giữa các kiểu với nhau mà chúng ta coi ngôn ngữ lập trình là strong typing hay weak typing. Ví dụ, C được xem là weak typing so với Java (nhớ là trong C ta có thể viết if (1) {} nhưng trong Java thì không). Python và Perl đều là ngôn ngữ dynamic typing, nhưng Perl được xem là weak typing so với Python (nhớ là biểu thức 1+”1” chỉ có ý nghĩa trong Perl).

Nói chung cách phân chia strong/weak này không có tiêu chuẩn gì, vì vậy ít được dùng một cách nghiêm túc. Tuy nhiên nhầm lẫn giữa hai cách phân loại static/dynamic và strong/weak thì cũng không hay chút nào.

Tags:
  1. Chưa có phản hồi.
  1. No trackbacks yet.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: