Giả sử một ngôn ngữ với một số loại an toàn vốn có (ví dụ: không phải JavaScript):
Đưa ra một phương thức chấp nhận a SuperType
, chúng tôi biết rằng trong hầu hết các trường hợp, trong đó chúng tôi có thể bị cám dỗ thực hiện kiểm tra loại để chọn một hành động:
public void DoSomethingTo(SuperType o) {
if (o isa SubTypeA) {
o.doSomethingA()
} else {
o.doSomethingB();
}
}
Chúng ta thường nên, nếu không luôn luôn, tạo một phương thức duy nhất, có thể ghi đè lên SuperType
và thực hiện điều này:
public void DoSomethingTo(SuperType o) {
o.doSomething();
}
... trong đó mỗi kiểu con được doSomething()
thực hiện riêng . Phần còn lại của ứng dụng của chúng tôi sau đó có thể không biết gì về việc bất kỳ thứ gì được đưa ra SuperType
thực sự là a SubTypeA
hay a SubTypeB
.
Tuyệt vời.
Nhưng, chúng tôi vẫn đưa ra các is a
hoạt động giống như trong hầu hết các ngôn ngữ, an toàn loại. Và điều đó cho thấy một nhu cầu tiềm năng để thử nghiệm loại rõ ràng.
Vì vậy, trong những tình huống, nếu có, chúng ta nên hoặc phải thực hiện kiểm tra loại rõ ràng?
Tha thứ cho sự đãng trí của tôi hoặc thiếu sáng tạo. Tôi biết tôi đã làm nó trước đây; nhưng, thật lòng từ lâu lắm rồi tôi không thể nhớ liệu những gì mình làm có tốt không! Và trong bộ nhớ gần đây, tôi không nghĩ rằng tôi đã gặp phải nhu cầu kiểm tra các loại bên ngoài JavaScript cao bồi của mình.