2015-01-23 7 views
12

ऐसे कई लोग हैं जो सोचते हैं कि विशेष मूल्य null की अवधारणा (क्योंकि इसका उपयोग सी, जावा, सी #, पर्ल, जावास्क्रिप्ट, एसक्यूएल इत्यादि जैसे लैन्यूज में किया जाता है) एक बुरा विचार है। एसओ और पीएसई पर इस बारे में कई सवाल हैं, जैसे Best explanation for languages without null और Are null references really a bad thing?क्या वहां "शून्य" के बिना भाषाएं हैं?

हालांकि, मुझे उनके बिना कोई भी भाषा नहीं मिल सका। जिन भाषाओं में मैं परिचित हूं, उनके पास null है, या कुछ समान है (उदाहरण के लिए पर्ल में "अपरिभाषित")।

मुझे एहसास है कि संभवतः प्रत्येक भाषा को "मूल्य की अनुपस्थिति" व्यक्त करने के लिए कुछ तरीका चाहिए। हालांकि, "शून्य" या "अपरिभाषित" होने की बजाय, इसे Maybe (हास्केल) या Optional (अमरूद) जैसे कुछ का उपयोग करके स्पष्ट किया जा सकता है। "शून्य" या "अपरिभाषित" होने का मुख्य अंतर यह है कि किसी ऑब्जेक्ट में केवल "कोई मान नहीं" हो सकता है यदि उसके पास एक विशिष्ट प्रकार (शायद, वैकल्पिक ...) हो। इसके विपरीत, "शून्य"/"अपरिभाषित" आमतौर पर प्रत्येक प्रकार के लिए मान्य मान संभव है।

क्या ऐसी कोई भाषाएं हैं जिनके पास इस अर्थ में "शून्य" या इसी तरह की अवधारणा नहीं है?

+0

पॉइंटर्स एक बुरा विचार है, नल नहीं। पर्ल में, एक शून्य संदर्भ या एक लटकते सूचक बनाना असंभव है। कई आधुनिक भाषाओं में, एक शून्य सूचक या एक लटकने वाला बनाना भी असंभव है। – shawnhcorey

+0

जब तक परिमित राज्यों को संभालने के लिए भाषा को स्कॉप्ड नहीं किया जाता है, मुझे नहीं लगता कि "शून्य" टालने योग्य होगा। अनुपस्थिति या जानकारी की कमी का प्रतिनिधित्व करने की आवश्यकता बहुत जल्दी उत्पन्न होती है। आपके द्वारा बनाए गए प्रत्येक प्रकार के लिए आपके पास हमेशा "खाली" मान हो सकता है लेकिन फिर यह अधिक व्यावहारिक होगा कि केवल – Pedrom

+2

सभी के लिए एक सामान्य प्रकार सामान्य हो, वैसे, सामान्य अनुशंसा "डेटा की अनुपस्थिति" को स्पष्ट करना है। हास्केल में 'हो सकता है' या गुवा में 'वैकल्पिक' जैसा कुछ। मैं सवाल संपादित करूंगा। – sleske

उत्तर

18

यहाँ बिना null/undefined/भावना आप वर्णित में nothing भाषाओं की एक अधूरी सूची है, विकिपीडिया के अनुसार पहली उपस्थिति के वर्ष द्वारा आदेश दिया है।

  • Pony (प्री-1.0.0)। यूनियन प्रकार का उपयोग करता है जहां None प्रकारों में से एक है।
  • Crystal (अल्फा चरण में): nil है, लेकिन संकलन समय पर सभी शून्य सूचक अपवादों को रोकता है।
  • Kotlin (2015): ? सिंटैक्स के साथ वैकल्पिक प्रकार हैं।
  • Swift (2014): ? वाक्यविन्यास के साथ वैकल्पिक प्रकार हैं।
  • Hack (2014): ? वाक्यविन्यास के साथ वैकल्पिक प्रकार हैं।
  • Elm (2012): संघ प्रकार Maybe है।
  • Ceylon (2011): ? वाक्यविन्यास के साथ वैकल्पिक प्रकार हैं।
  • Rust (2010): वैकल्पिक प्रकार Option है।
  • Fantom (2005): ? वाक्यविन्यास के साथ वैकल्पिक प्रकार हैं।
  • F# (2005): संघ प्रकार Option है।
  • Nice (2003): ? वाक्यविन्यास के साथ वैकल्पिक प्रकार हैं।
  • OCaml (1 99 6): संघ प्रकार option है।
  • Haskell (1 99 0): संघ प्रकार Maybe है।
  • Standard ML (1 99 0): संघ प्रकार option है।
  • Tcl (1988)

सूची के पूरक के लिए स्वतंत्र महसूस।

1

आप पहले से ही "नल" के बिना भाषा का उदाहरण के रूप में हास्केल का उल्लेख करते हैं। एमएल परिवार में मानक एमएल, ओकैमल या एफ # जैसी भाषाएं भी हैं। कई गतिशील रूप से टाइप की गई भाषाओं में नल पॉइंटर्स भी नहीं होते हैं, योजना एक अच्छा उदाहरण होगा।

+0

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

2

टीसीएल में शून्य की कोई अवधारणा नहीं है। सबकुछ एक मूल्य है और सभी मानों में एक स्ट्रिंग प्रस्तुति होती है (आमतौर पर संक्षेप में "सब कुछ एक स्ट्रिंग है")।

शून्य के निकटतम चीज़ खाली स्ट्रिंग है।

"कोई मूल्य" की अवधारणा को व्यक्त करने के लिए कुछ रचनात्मकता की आवश्यकता होती है।

बेशक, जैसा ऊपर बताया गया है, कुछ लोग खाली मूल्य का उपयोग करने के लिए खाली स्ट्रिंग का उपयोग करते हैं। इसके लिए काम करने के लिए, खाली स्ट्रिंग्स आपके द्वारा प्रसंस्करण किए जा रहे डेटा सेट में मान्य नहीं हो सकती हैं। हैरानी की बात है कि इस श्रेणी में बहुत से वास्तविक विश्व डेटा आते हैं।

मूल्य की अनुपस्थिति को इंगित करने का एक और तरीका केवल एक त्रुटि फेंकना है। कुछ मामलों में यह ठीक है कि कुछ शून्य या त्रुटि मान (सी से सीखा एक विरोधी पैटर्न और एक आदत जो छुटकारा पाने में मुश्किल है) लौटने के बजाय क्या किया जाना चाहिए था।

फिर भी एक और तरीका एक खाली सूची वापस करना है (एक सूची टीसीएल के अन्य भाषाओं में सरणी के बराबर है)। खाली सूची का स्ट्रिंग प्रस्तुति खाली स्ट्रिंग है। लेकिन सौभाग्य से एक खाली स्ट्रिंग वाली सूची का स्ट्रिंग प्रस्तुति दो डबल कोट्स है: "\"\""। यह अंतर किसी सूची के बीच अंतर करने की अनुमति देता है जिसमें "कुछ नहीं" और एक सूची है जिसमें एक स्ट्रिंग है जिसमें इसमें कोई वर्ण नहीं है।

आखिर में कुछ लोग आसानी से वैरिएबल घोषित करके मूल्यों की अनुपस्थिति को इंगित करते हैं (या इसे अव्यवस्थित करते हैं, जो टीसीएल में एक चीज है)। यह अजीब लग सकता है क्योंकि चर एक संकलन-समय का निर्माण प्रतीत होता है (जबकि मूल्य रन-टाइम निर्माण होते हैं) लेकिन टीसीएल में सबकुछ रन-टाइम होता है। इस प्रकार कोड के लिए एक संकेत के रूप में चर के अस्तित्व का उपयोग करना संभव है। एक त्रुटि में एक अविकसित चर परिणामों को पढ़ने की कोशिश कर रहा है जिसे आप पकड़ सकते हैं। इसके अलावा, टीसीएल आपको दुभाषिया की स्थिति की जांच करने के लिए आत्मनिरीक्षण का उपयोग करने की अनुमति देता है। तो नामक एक चर मौजूद है या नहीं, यह जांचने के लिए आप [info exist x] का उपयोग कर सकते हैं।

+2

जानबूझकर "undeclaring" एक चर कई गतिशील टाइप किया भाषाओं की एक विशेषता है। पर्ल में 'undef' है, जावास्क्रिप्ट को' हटाएं 'है, बैश ने' अनसेट 'किया है। – sleske

+0

बहुत दिलचस्प है। टीसीएल जानकारी – MegaTux

+0

साझा करने के लिए धन्यवाद यह बिंदु को याद करता है। अर्थात्, एक खाली स्ट्रिंग शून्य के समान ही खराब है। एक ठीक से टाइप किया भाषा - कई के अनुसार - यह संभव भी परोक्ष रूप से जो मौजूद नहीं है एक मूल्य के संदर्भ के लिए नहीं करना चाहिए। पारंपरिक अर्थशास्त्र द्वारा, एक खाली स्ट्रिंग एक मान नहीं है जो "वर्तमान" है। बेशक, अगर सब कुछ एक स्ट्रिंग है, यह स्ट्रिंग को श्रेणीबद्ध करने के लिए '' '" foo "' '' कोई रिक्त स्ट्रिंग के साथ की कोशिश की तरह त्रुटियों से आप से बचने करता है '' '" "' '', लेकिन फिर आप अक्सर करने की जरूरत है कई स्थानों में स्ट्रिंग के खालीपन की जाँच (जैसे कि, सत्यापन, अल्पविराम आदि द्वारा तार में शामिल होने) – EdvardM

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