17

संभावित डुप्लिकेट:
Is there any advantage of being a case-sensitive programming language?
Why are many languages case sensitive?भाषाओं में केस संवेदनशीलता का उद्देश्य क्या है?

कुछ मैं हमेशा आश्चर्य होता है, क्यों भाषाओं केस संवेदी होने के लिए तैयार कर रहे हैं रहा है?

मेरे मटर मस्तिष्क किसी भी संभावित कारण नहीं जान सकता क्यों यह उपयोगी है।

लेकिन मुझे यकीन है कि वहां एक है। और इससे पहले कि किसी को भी यह कहते हैं, एक चर dog और Dog केस संवेदनशीलता द्वारा विभेदित कहा जाता है, सही होने वास्तव में बहुत बुरा व्यवहार है?

किसी भी टिप्पणी की सराहना की, इस मामले पर शायद किसी भी इतिहास के साथ-साथ! मैं आम तौर पर केस संवेदनशीलता के बारे में असंवेदनशील हूं, लेकिन केस संवेदनशीलता के आसपास संवेदनशीलता के बारे में संवेदनशील हूं तो चलो सभी उत्तरों और नागरिकों को टिप्पणी दें!

+1

केस संवेदनशीलता सबकुछ पढ़ने में आसान बनाता है ... हालांकि मामला से संबंधित नहीं है लेकिन इंडेंटेशन देखें; पाइथन जैसी भाषाएं 'इंडेंटेशन' के कारण सफल होती हैं जो एक तरह से केस संवेदनशीलता हो सकती है। –

+2

जिस तरह से मैं इसे देखता हूं वह यह है कि इसका कोई भी माइक्रो लाभ मिसयूज, डीबगिंग इत्यादि से नकारात्मक नहीं है। –

+1

@ टॉम: मान लें कि आपके पास पीआईटी नामक कक्षा है, और आपके पास टैक्स नामक एक कॉन्स है ... या क्या होगा आपके पास HEllO नामक एक नियमित चर है। –

उत्तर

17

यह आवश्यक है कि दो सदस्यों के लिए यह आवश्यक रूप से खराब अभ्यास न हो, जो इसे समर्थन देने वाली भाषाओं में केवल अलग-अलग हैं। - विशेष रूप से के रूप में यह ऊपर है, जहां सदस्य चर और परंपराओं संपत्ति का पालन वैसे भी, भ्रम से बचने की तरह कोड की अनुमति देता है

private readonly string name; 
public string Name { get { return name; } } 

व्यक्तिगत तौर पर मैं केस संवेदनशीलता काफी खुश हूं: उदाहरण के लिए, यहां सी # की एक बहुत ही आम सा है।

ध्यान दें कि मामले संवेदनशीलता भी एक संस्कृति पहलू है ... नहीं सभी संस्कृतियों (देखने के एक अनुभवहीन मुद्दा यह है कि विहित पर ध्यान नहीं देता से एक ही वर्ण समझना होगा बराबर होने का ...

+0

उत्तर के लिए धन्यवाद, क्या आप सांस्कृतिक पहलू पर विस्तार कर सकते हैं? मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं। –

+4

सबसे अधिक बार दिया गया उदाहरण, "मैं" की तुर्की विविधता है। अंग्रेजी केस-असंवेदनशीलता इस के लिए असंवेदनशील है, क्योंकि इस मामले में "i" =/= "I"। – maxwellb

+3

+1 जॉन, क्योंकि मैं लोअरकेस सैमनाम के साथ भी अपनी संपत्तियों को वापस लेता हूं। मैं निजी क्षेत्रों के लिए "_" उपसर्ग का उपयोग करके व्यक्तिगत रूप से नापसंद करता हूं। – maxwellb

3

कल्पना कीजिए कि आप एक वस्तु dog कहा जाता है, जो एक विधि Bark() कहा जाता है की है। इसके अलावा आपने कुत्ते नामक एक वर्ग को परिभाषित किया है, जिसमें एक स्थिर विधि है जिसे Bark() कहा जाता है। आप dog.Bark() लिखते हैं। तो यह क्या करने जा रहा है? ऑब्जेक्ट की विधि या कक्षा से स्थैतिक विधि को कॉल करें? (एक ऐसी भाषा में जहां :: मौजूद नहीं है)

+3

उन्हें अलग-अलग चीजें क्यों न बुलाएं ताकि आप लाइन के नीचे मिश्रित न हों? कुत्ते नामक एक वर्ग होने और कुत्ते नामक एक वस्तु भ्रमित करने जा रही है। यही वह है जो मुझे समझ में नहीं आता है। –

+2

कुत्ता बहुत सामान्य है ... लैब्राडोर जैसे कुत्ते से एक वस्तु अधिक समझ में आती है। –

+3

तो अब संकलक जानता है कि किस विधि को कॉल करना है, लेकिन पाठक अभी भी भ्रमित हो जाएगा। मुझे लगता है कि आपको 1 अक्षर के पूंजीकरण की तुलना में दोनों के बीच अंतर करने के लिए कुछ बेहतर उपयोग करना चाहिए। – Miel

1

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

+1

मुझे लगता है कि मामला "संवेदनशील" तुलना अधिक तुच्छ होगी। एक "कोड" बिंदुओं को "ए" ~ "ए" कहने के लिए कैसे करता है? एक चरित्र एन्कोडिंग में, कोई साधारण बाइनरी तुलना करके संवेदनात्मक रूप से केस की तुलना कर सकता है ... – maxwellb

+1

मैंने केस-असंवेदनशीलता के साथ केस-सेंसिटी को भ्रमित कर दिया। – Philipp

+0

मैंने जो भी खोजकर्ता कभी भी उपयोग किया है वह केस-असंवेदनशील खोज कर सकता है। कई (उदाहरण: Emacs ') डिफ़ॉल्ट रूप से ऐसा करते हैं। हां, जब आप गैर-अंग्रेजी भाषाओं से निपट रहे हों, तब तक चीजें खराब हो जाती हैं, लेकिन जब तक आपके कंपाइलर और आपके खोजकर्ता के नियम समान होते हैं, वहां कोई वास्तविक समस्या नहीं होती है। –

2

मुझे यकीन है कि मूल रूप से यह एक प्रदर्शन विचार था। caseless तुलना के लिए अपर या लोअर केस के लिए एक स्ट्रिंग परिवर्तित एक महंगी आपरेशन बिल्कुल नहीं है, लेकिन यह भी मुक्त नहीं है, और पुराने सिस्टम पर यह जटिलता जोड़ दिया हो उस दिन की प्रणाली को संभालने के लिए तैयार नहीं थे।

और अब, ज़ाहिर है, भाषाओं एक दूसरे को (उदाहरण के सी # वर्ग या कार्यों कि केवल मामले में मतभेद के बीच भेद नहीं कर सकते हैं के लिए VB) के साथ संगत होना चाहते हैं, लोगों को चीजें एक ही पाठ नामकरण करने के लिए, लेकिन विभिन्न साथ किया जाता है मामलों (जॉन स्कीट के जवाब देखें - मैं एक बहुत है कि), और caseless भाषाओं के मूल्य वास्तव में पर्याप्त इन दोनों पल्ला झुकना करने के लिए नहीं था।

+2

मुझे भी उतना ही यकीन है कि मूल रूप से प्रदर्शन के साथ ऐसा करने के लिए कुछ भी नहीं था जिसे प्रोग्रामिंग भाषाओं में अनदेखा किया गया था। इसके बजाए यह 1 9 50 के दशक के टेलीप्रिंटर्स पर उपयोग की जाने वाली 5-बिट एन्कोडिंग योजनाओं पर था, जिसमें बस ऊपरी और निचले केस अक्षरों दोनों नहीं थे। आपको टेलीग्राम स्टॉप –

+1

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

+1

हे, फिलिप जीता। इसके बारे में भी सोचा नहीं था। –

8

प्रोग्रामिंग भाषाओं में केस-संवेदनशीलता के लिए सबसे बड़ी कारणों में से एक पठनीयता है। चीजें जो इसका मतलब है वही दिखना चाहिए।

मैं एक संबंधित चर्चा में एम Sandin द्वारा निम्नलिखित interesting example पाया:,

मैं करने के लिए इस्तेमाल का मानना ​​है कि मामले की संवेदनशीलता एक गलती थी जब तक मैं मामले असंवेदनशील भाषा PL/SQL में ऐसा किया (वाक्य रचना अब entierly भूल):

function IsValidUserLogin(user:string, password :string):bool begin 
    result = select * from USERS 
      where USER_NAME=user and PASSWORD=password; 
    return not is_empty(result); 
end 

यह एक कम मात्रा में उत्पादनपर कई महीने के लिए किसी का ध्यान नहीं पारित कर दियाप्रणाली, और इसका कोई नुकसान नहीं हुआ। लेकिन यह एक गंदा बग है, जो असंवेदनशीलता, कोडिंग सम्मेलन, और से मनुष्य को कोड पढ़ने के तरीके से उगाया जाता है। मेरे लिए पाठ यह था कि: जैसी चीजें समान दिखनी चाहिए।

क्या आप तुरंत समस्या देख सकते हैं? मैं नहीं कर सका ...

+4

यह केस-असंवेदनशील कोड है, इसलिए 'PASSWORD = password' हमेशा सत्य है। – Blorgbeard

+1

@ टॉम गुलेन: यह जुड़ा हुआ धागा में [आगे नीचे] (http://lambda-the-ultimate.org/node/1114#comment-12098) समझाया गया है। –

+1

मेरा अनुमान है? पासवर्ड = पासवर्ड हमेशा सत्य का मूल्यांकन करता है? इसलिए कोई मान्य उपयोगकर्ता नाम लॉगइन करेगा ... कम से कम अगर मैं सही हूं: पी –

9

मुझे कक्षा और उदाहरण के बीच अंतर करने के लिए केस संवेदनशीलता पसंद है।

Form form = new Form();

आप ऐसा नहीं कर सकते हैं, तो आप चर myForm या form1 या f कहा जाता है, जो के रूप में स्वच्छ और के रूप में सादे पुराने form वर्णनात्मक नहीं हैं के साथ खत्म।

केस संवेदनशीलता का भी अर्थ है कि आपके पास form, FORM और Form का संदर्भ नहीं है, जिसका अर्थ सभी एक ही बात है। मुझे ऐसे कोड को पढ़ने में मुश्किल लगता है। मुझे कोड स्कैन करना बहुत आसान लगता है जहां एक ही वैरिएबल के सभी संदर्भ बिल्कुल वही दिखते हैं।

+1

मामले-असंवेदनशील भाषाओं में बहुत कुछ करने के बाद, मुझे लगता है कि कक्षाओं और वस्तुओं के लिए अलग-अलग नामों के साथ आने का एक अच्छा कौशल है। –

+1

यह समस्या उदा। विजुअल बेसिक क्योंकि टाइप आइडेंटिफायर और ऑब्जेक्ट आइडेंटिफायर स्पष्ट रूप से वहां अलग होते हैं ('फॉर्म के रूप में मंद फॉर्म' इत्यादि, केवल 'As' के बाद दिखाई दे सकते हैं)। फिर यह सी वाक्यविन्यास है जो सामान्य रूप से विचार नहीं है, दोषपूर्ण है। – Philipp

+3

@ टी.ई.डी. निर्भर करता है।कभी-कभी यह सबसे स्पष्ट और उपयोगी नाम होता है - कभी-कभी यह नहीं होता है। कम से कम विकल्प है यह अच्छा है। –

2

कारण आप समझ नहीं सकते कि केस-सेंसिटीविटी एक अच्छा विचार क्यों है, क्योंकि ऐसा नहीं है। यह सी (जैसे 0-आधारित सरणी) की अजीब बातों में से एक है जो अब "सामान्य" प्रतीत होता है क्योंकि सी ने कितनी भाषाओं की प्रतिलिपि बनाई है।

सी इंडेंटिफायर में केस-सेंसिटीविटी का उपयोग करता है, लेकिन एक भाषा डिजाइन परिप्रेक्ष्य से जो एक अजीब पसंद था। अधिकांश भाषाओं को स्क्रैच से डिजाइन किया गया था (किसी भी तरह से "सी जैसे" होने के लिए कोई विचार नहीं किया गया था) केस-असंवेदनशील बना दिया गया था। इसमें फोरट्रान, कोबोल, लिस्प, और लगभग पूरे अल्गोल परिवारों (पास्कल, मॉडुला -2, ओबेरॉन, एडा, इत्यादि)

स्क्रिप्टिंग भाषाएं मिश्रित बैग हैं। कई को केस-सेंसिटिव बनाया गया था क्योंकि यूनिक्स फाइल सिस्टम केस-संवेदी था और उन्हें इसके साथ समझदारी से बातचीत करना पड़ा। यूनिक्स पर्यावरण में सी प्रकार का व्यवस्थित रूप से बड़ा हुआ, और शायद वहां से केस-संवेदनशील दर्शन उठाया।

+0

मैं 1 9 70 के दशक में कंप्यूटर बहुत कम शक्तिशाली थे; लेकिन मुझे आश्चर्य है कि शायद यह 40 साल पहले समयपूर्व अनुकूलन का मामला नहीं था। –

+0

पूरी सी भाषा उस तरह से देखी जा सकती है। उदाहरण के लिए, पूर्व और पोस्ट वृद्धि और कमी ऑपरेटर के रूप में स्थापित की गई थी क्योंकि सी के मूल (सीआईएससी) सीपीयू में अधिकांश ऑपरेशन करने के लिए ओपोड वेरिएंट थे। –

4

कुछ मैंने हमेशा सोचा है, क्यों भाषाएं केस संवेदनशील होने के लिए डिज़ाइन की गई हैं?

आखिरकार, ऐसा इसलिए है क्योंकि केस-सेंसिटिव तुलना सही तरीके से सही ढंग से कार्यान्वित करना आसान है; आप बस बिना किसी रूपांतरण के बाइट्स/वर्णों की तुलना करें। आप हिंगिंग जैसी अन्य चीजें भी वास्तव में आसान कर सकते हैं।

यह एक मुद्दा क्यों है? खैर, केस-असंवेदनशीलता को तब तक जोड़ना कठिन होता है जब तक कि आप समर्थित वर्णों के एक छोटे से डोमेन (विशेष रूप से, यूएस-एएससीआईआईआई) में न हों।केस रूपांतरण नियम लोकेल द्वारा भिन्न होते हैं (तुर्की नियम दुनिया के बाकी हिस्सों के समान नहीं होते हैं) और इस बात की कोई गारंटी नहीं है कि एक बिट को फिसलने से सही चीज होगी, या यह हमेशा एक ही बिट है और उसी के तहत पूर्व शर्त। (आईआईआरसी, स्वरों को ऊपरी मामले में परिवर्तित करते समय डायक्रिटिक्स को फेंकने के लिए कुछ भाषाओं में कुछ जटिल नियम हैं, और कम मामले में परिवर्तित होने पर उन्हें पुन: प्रस्तुत करना। मुझे पता है कि विवरण क्या हैं।)

यदि आप केस संवेदनशील हैं , आप बस उन सभी को अनदेखा करते हैं; यह बस आसान है। (आपको याद है, आपको अभी भी यूनिकोड सामान्यीकरण फॉर्मों पर ध्यान देना चाहिए, लेकिन यह एक और कहानी है और यह आपके द्वारा उपयोग किए जा रहे किसी भी नियम के नियमों को लागू करती है।)

+1

यह भी खुश रहें कि कोई भी कंप्यूटर भाषाओं के लिए स्वचालित शीर्षक-आवरण नहीं करता है (और मुझे वास्तव में यह सुनिश्चित नहीं है कि यह कैसे काम करेगा); * के लिए नियम * अधिक जटिल हैं! –