Các ngôn ngữ được gõ động mà tôi biết không bao giờ để các nhà phát triển chỉ định các loại biến hoặc ít nhất có hỗ trợ rất hạn chế cho điều đó.
JavaScript, chẳng hạn, không cung cấp bất kỳ cơ chế nào để thực thi các loại biến khi thuận tiện để làm như vậy. PHP cho phép bạn chỉ định một số loại đối số phương pháp, nhưng không có cách nào để sử dụng các loại có nguồn gốc ( int
, string
, vv) cho các đối số, và không có cách nào để thực thi các loại cho bất cứ điều gì khác hơn là đối số.
Đồng thời, sẽ thuận tiện khi có lựa chọn chỉ định trong một số trường hợp loại biến trong ngôn ngữ được nhập động, thay vì thực hiện kiểm tra loại thủ công.
Tại sao có giới hạn như vậy? Là vì lý do kỹ thuật / hiệu suất (tôi cho rằng đó là trong trường hợp của JavaScript), hoặc chỉ vì lý do chính trị (đó là, tôi tin rằng, trường hợp của PHP)? Đây có phải là trường hợp đối với các ngôn ngữ được gõ động khác mà tôi không quen thuộc không?
Chỉnh sửa: theo dõi các câu trả lời và các ý kiến, đây là một ví dụ để làm rõ: giả sử chúng ta có phương pháp sau trong PHP đơn giản:
public function CreateProduct($name, $description, $price, $quantity)
{
// Check the arguments.
if (!is_string($name)) throw new Exception('The name argument is expected to be a string.');
if (!is_string($description)) throw new Exception('The description argument is expected to be a string.');
if (!is_float($price) || is_double($price)) throw new Exception('The price argument is expected to be a float or a double.');
if (!is_int($quantity)) throw new Exception('The quantity argument is expected to be an integer.');
if (!$name) throw new Exception('The name argument cannot be an empty string.');
if ($price <= 0) throw new Exception('The price argument cannot be less or equal to zero.');
if ($price < 0) throw new Exception('The price argument cannot be less than zero.');
// We can finally begin to write the actual code.
// TODO: Implement the method here.
}
Với một số nỗ lực, điều này có thể được viết lại thành (cũng xem Lập trình theo hợp đồng trong PHP ):
public function CreateProduct($name, $description, $price, $quantity)
{
Component::CheckArguments(__FILE__, __LINE__, array(
'name' => array('value' => $name, 'type' => VTYPE_STRING),
'description' => array('value' => $description, 'type' => VTYPE_STRING),
'price' => array('value' => $price, 'type' => VTYPE_FLOAT_OR_DOUBLE),
'quantity' => array('value' => $quantity, 'type' => VTYPE_INT)
));
if (!$name) throw new Exception('The name argument cannot be an empty string.');
if ($price <= 0) throw new Exception('The price argument cannot be less or equal to zero.');
if ($price < 0) throw new Exception('The price argument cannot be less than zero.');
// We can finally begin to write the actual code.
// TODO: Implement the method here.
}
Nhưng phương thức tương tự sẽ được viết như sau nếu PHP tùy ý chấp nhận các kiểu gốc cho các đối số:
public function CreateProduct(string $name, string $description, double $price, int $quantity)
{
// Check the arguments.
if (!$name) throw new Exception('The name argument cannot be an empty string.');
if ($price <= 0) throw new Exception('The price argument cannot be less or equal to zero.');
if ($price < 0) throw new Exception('The price argument cannot be less than zero.');
// We can finally begin to write the actual code.
// TODO: Implement the method here.
}
Cái nào ngắn hơn để viết? Cái nào dễ đọc hơn?