डायनामिक रूप से टाइप की गई भाषाएं, मुझे पता है कि डेवलपर्स कभी भी चर के प्रकारों को निर्दिष्ट नहीं करते हैं, या कम से कम उसके लिए बहुत सीमित समर्थन है।
उदाहरण के लिए, जावास्क्रिप्ट ऐसा करने के लिए सुविधाजनक होने पर किसी भी प्रकार के चर को लागू करने के लिए कोई तंत्र प्रदान नहीं करता है। PHP आपको कुछ प्रकार के तर्कों को निर्दिष्ट करने देता है, लेकिन तर्कों के लिए देशी प्रकारों ( int
और string
, आदि) का उपयोग करने का कोई तरीका नहीं है, और तर्कों के अलावा किसी अन्य प्रकार के लिए लागू करने का कोई तरीका नहीं है।
उसी समय, कुछ मामलों में यह निर्दिष्ट करना सुविधाजनक होगा कि प्रकार को मैन्युअल रूप से करने के बजाय, गतिशील रूप से टाइप की गई भाषा में चर का प्रकार।
ऐसी सीमा क्यों है? क्या यह तकनीकी / प्रदर्शन कारणों से है (मुझे लगता है कि यह जावास्क्रिप्ट के मामले में है), या केवल राजनीतिक कारणों से (जो कि, मेरा मानना है, PHP का मामला है)। क्या यह अन्य गतिशील रूप से टाइप की जाने वाली भाषाओं के लिए एक मामला है जिससे मैं परिचित नहीं हूं?
संपादित करें: उत्तर और टिप्पणियों के बाद, यहाँ एक स्पष्टीकरण के लिए एक उदाहरण है: मान लें कि हमारे पास सादे PHP में निम्न विधि है:
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.
}
कुछ प्रयासों के साथ, इसे फिर से लिखा जा सकता है ( 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.
}
लेकिन एक ही विधि निम्नानुसार लिखी जाएगी यदि PHP वैकल्पिक रूप से मूल प्रकार के तर्कों को स्वीकार करेगी:
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.
}
कौन सा लिखना कम है? कौन सा पढ़ना आसान है?