2010-01-08 9 views
10

जिस तरह से मैं इसे समझता हूं, PHP में निम्नलिखित की अनुमति है क्योंकि यह एक कमजोर टाइप की गई भाषा है।क्या पाइथन एक कमजोर टाइप की गई भाषा है क्योंकि वेरिएबल प्रकार स्विच कर सकते हैं?

$var = 'Hello'; 
$var = 5; 

मैं सिर्फ अजगर 2.6 के एक Windows संस्करण स्थापित किया है और मैं इसे नहीं उम्मीद कर रहा था मुझे बस ऐसे ही प्रकार बदल जाने के लिए है, लेकिन इसके बाद के संस्करण कोड का अजगर बराबर सिर्फ पीएचपी उफ़ में की तरह काम करता है!

>>> var = "Hello" 
>>> type(var) 
<type 'str'> 
>>> var = 5 
>>> type(var) 
<type 'int'> 

क्या कमजोर/मजबूत टाइपिंग की मेरी समझ त्रुटिपूर्ण है?

+0

पायथन एक गतिशील भाषा है इसलिए इसे कमजोर रूप से कुछ अर्थ में टाइप किया गया है और दृढ़ता से दूसरे में टाइप किया गया है (कोई भी परिभाषा नहीं है) लेकिन पूरा सवाल उससे कहीं अधिक जटिल है। Http://wiki.python.org/moin/StrongVsWeakTyping –

+0

संभावित डुप्लिकेट देखें [क्या कोई मुझे बता सकता है कि मजबूत टाइपिंग और कमजोर टाइपिंग का अर्थ क्या है और कौन सा बेहतर है?] (Http://stackoverflow.com/questions/323323/ कर सकते हैं-कोई-बताओ-क्या-मजबूत-टाइपिंग-और-कमजोर-टाइपिंग-साधन-और-जो-एक-होना चाहिए), और यह भी [मेरी समझ-प्रकार-प्रणाली-सही है] (http://stackoverflow.com/questions/2135066/is-my-understanding-of-type-systems- सही) – nawfal

+1

मुझे लगता है कि यह एक डुप्ली नहीं है क्योंकि यह पाइथन के लिए बहुत विशिष्ट है। ऐसा नहीं है कि हम अब सिस्टम सिस्टम पर भाषा विशिष्ट प्रश्न नहीं पूछ सकते हैं क्योंकि मजबूत और कमजोर टाइपिंग को अन्य सवालों के जवाब में समझाया गया था। एक बात के लिए, भले ही इसे समझाया गया हो, फिर भी अन्य सभी जानकारी के बीच खोजना मुश्किल होगा। –

उत्तर

39

आपका उदाहरण गतिशील टाइपिंग दिखाता है, कमजोर टाइपिंग नहीं। डायनामिक टाइपिंग का आम तौर पर मतलब है कि किसी ऑब्जेक्ट को स्टोर करने वाले डेटा का प्रकार म्यूटेबल है; किसी भी लक्ष्य किसी भी प्रकार की वस्तु के लिए बाध्यकारी हो सकता है। इसके विपरीत, कहें, सी #, जो स्थिर रूप से टाइप किया गया है [*]।

int i = 5; // Okay. 
i = "5"; // Illegal! i can only hold integers. 

मजबूत टाइपिंग मतलब यह है कि एक बार एक विशेष प्रकार का एक मूल्य सौंपा, वस्तुओं कि वे किस तरह विभिन्न प्रकार के अन्य वस्तुओं के साथ बातचीत कर सकते हैं बारे में सख्त नियम का पालन करना। कमजोर टाइपिंग का अर्थ है कि ऐसे नियम अधिक आराम से हैं। इसका मतलब यह नहीं है कि दृढ़ता से टाइप की गई भाषाएं किसी भी तरह से बेहतर हैं; यह सिर्फ एक भाषा डिजाइन पसंद है।

पायथन को दृढ़ता से टाइप किया जाता है क्योंकि वस्तुओं की एक अलग धारणा होती है कि वे क्या टाइप करते हैं। वस्तुओं के बीच असंगत संचालन त्रुटियों का कारण:

>>> 1 + 1   # Add two integers. 
2 
>>> "1" + "1"  # Concatenate two strings. 
'11' 
>>> 1 + int("1") # Add two integers. 
2 
>>> "1" + str(1) # Concatenate two strings. 
'11' 
>>> 1 + "1"  # Undefined! Adding integers and strings is meaningless. 
Traceback (most recent call last): 
    File "", line 5, in ? 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

लेकिन PHP में, नियमों और अधिक आराम से क्या स्वीकार्य है के बारे में कर रहे हैं। इस प्रकार इसे कुछ अन्य भाषाओं की तुलना में अधिक कमजोर टाइप माना जाता है।

$x = 1 + "1"; // x is 2 

[*] तकनीकी तौर पर, सी # 4 के रूप में, सी # स्थैतिक रूप से टाइप किया लेकिन साथ है विकल्प के रूप में गतिशील टाइपिंग एक प्रति बाध्यकारी आधार पर, dynamic कीवर्ड के लिए धन्यवाद। आजकल बहुत सी भाषाएं गतिशील क्षमताओं को जोड़ रही हैं और लाइनों को धुंधला कर रही हैं, इसलिए यह कहना मुश्किल हो रहा है कि "भाषा एक्स गतिशील है" और "भाषा वाई स्थैतिक है"। यह एक बाइनरी संपत्ति की तुलना में एक स्लाइडिंग पैमाने या एक स्पेक्ट्रम का अधिक है।

+3

मुझे लगता है कि आप उस अंतिम के लिए 2 का मतलब है, '11' नहीं। –

+0

ओह, धन्यवाद इग्नासिओ। –

+1

ओह, मैं देखता हूं। मैंने इसे मिश्रित किया था। अगर मैं वेब के लिए एक स्थैतिक रूप से टाइप की गई भाषा चाहता हूं, तो मुझे शायद सी # या जावा के साथ जाना चाहिए। – confused

2

हां। यह मजबूत/कमजोर टाइपिंग नहीं है, यह स्थैतिक/गतिशील टाइपिंग है। कमजोर टाइपिंग 5 + '5' जैसी चीजों को बराबर 10.

+1

दिलचस्प - इसलिए जावा कम से कम आदिम संख्याओं और स्ट्रिंग्स के रिश्ते में कमजोर-प्रकार होगा। –

4

कमजोर टाइपिंग या मजबूत टाइपिंग की कोई वास्तविक परिभाषा नहीं है। यह सब कुछ अंतर्निहित प्रकार रूपांतरणों के बारे में है और इसमें स्थिर/गतिशील टाइपिंग के साथ कुछ लेना देना नहीं है। जावा तरह

एक स्थिर टाइप किया भाषा दुर्बलता से टाइप किया जा सकता है (नहीं है कि यह है), और पीएचपी की तरह एक गतिशील टाइप किया भाषा दृढ़ता से टाइप किया जा सकता है (यह है नहीं है)।

कुछ कमजोर भाषा में कुछ प्रकार के डेटा मिश्रित किए जा सकते हैं, एक कमजोर टाइप की गई भाषा अधिक उदार है।

+0

गलत! सबसे बड़ी PHP समस्या है कि वह कमजोर प्रकार लैंग है, क्योंकि आपके पास कोड में छिपी हुई बग्स जैसे अपरिभाषित चर, फ़ंक्शंस आदि हो सकते हैं ..- PHP के वेब ऐप को बहुत कठिन बनाए रखें क्योंकि उस कारण – Yosef

+1

@Yosef आपकी टिप्पणी प्रतीत होती है इस उत्तर से पूरी तरह से असंबंधित (जिसे आपने गलत तरीके से दावा किया है गलत है)। –

5

एक जोड़ा पहला जवाब: यह एक और अधिक जटिल है क्योंकि पाइथन में + ऑपरेटर अधिभारित होता है जिसका अर्थ है कि यह दोनों जोड़ (गणित) और संयोजित (गोंद दो तार) दोनों होगा। php उदाहरण

$i = 1 + "1" // $i == 2 

प्लस कहते हैं (गणित), क्योंकि में। (डॉट) php

$i = 1 . "1" // $i == "11" 

में ऐसा है, संयोजन के लिए प्रयोग किया जाता है क्या मैं स्पष्ट करने की कोशिश कर रहा है कि है उसके अपने तरीके से इस के साथ हर दुर्बलता से टाइप किया/गतिशील भाषा से संबंधित है।

संबंधित मुद्दे