2012-03-29 13 views
11

उदाहरण के लिए, जावास्क्रिप्ट में, !important का अर्थ है 'महत्वपूर्ण नहीं'। सीएसएस में, इसका मतलब है 'यह महत्वपूर्ण है'।सीएसएस में क्यों '!' सी-आधारित भाषाओं में इसके उपयोग के विपरीत अर्थ है?

क्या सीएसएस के अलावा अन्य भाषाएं हैं जहां अस्वीकृति के बजाय विस्मयादिबोधक चिह्न के लिए विस्मयादिबोधक चिह्न का उपयोग किया जाता है? '!' क्यों था सीएसएस में चुना गया?

संपादित

मैं अगर यह एक संयोग है, लेकिन ! जल्द से जल्द गैर प्रणाली और ASCII तालिका (# 32 पर) में गैर-सफ़ेद चरित्र है पता नहीं है। पार्सिंग के मामले में, क्या इससे जल्दी हो जाएगा?

+0

मुझे लगता है कि यह सिर्फ लोगों का ध्यान आकर्षित करने के लिए था। –

+4

'क्या सीएसएस के अलावा अन्य भाषाएं हैं जहां अस्वीकृति के बजाय विस्मयादिबोधक चिह्न के लिए विस्मयादिबोधक चिह्न का उपयोग किया जाता है?' - प्राकृतिक भाषाओं के बारे में कैसे? ;) – delnan

+1

किसी अन्य भाषा के लिए स्पष्ट उम्मीदवार का उपयोग कर! पुष्टि के लिए प्राकृतिक भाषा है! –

उत्तर

3

! एक ऑपरेटर होने की तुलना में एक बचने वाला चरित्र है। यह एक अलग टुकड़े की बजाय important का हिस्सा है (उदाहरण के लिए जावास्क्रिप्ट में मैं इसे ! और somevar के रूप में देखता हूं, जबकि सीएसएस में मैं इसे !important के रूप में देखता हूं)। इसलिए, यह इतना प्रतिज्ञान के रूप में आप इसे रख नहीं है, यह ऐसा चरित्र होता है जिसे उन्होंने कीवर्ड important के सामने फेंकने के लिए चुना है।

इसके अलावा, गैर-प्रोग्रामिंग भाषाओं में, ! अक्सर किसी चीज़ पर ध्यान आकर्षित करने के लिए उपयोग किया जाता है, हालांकि यह अक्सर किसी अन्य प्रकार के आकार/प्रतीक के साथ होता है (उदाहरण के लिए ⚠), और यह संभवतः कारण है! चुना गया था। यह देखने के लिए सहायक हो सकता है के रूप में important! या ¡important! (!important सिर्फ पार्स और विकल्पों से टाइप करने के लिए आसान है)।

संपादित करें: @ माइक-शमूएल द्वारा बताया गया है: "CSS2.1 व्याकरण कल्पना की lexical scanner खंड एक भी टोकन ("!"({w}|{comment})*{I}{M}{P}{O}{R}{T}{A}{N}{T} {return IMPORTANT_SYM;}) हालांकि यह ! और important के बीच खाली स्थान के और टिप्पणियों की अनुमति नहीं के रूप में !important सूचीबद्ध करता है। "

+0

काफी सही। [लेक्सिकल व्याकरण] (http://www.w3.org/TR/CSS21/grammar.html#scanner) एक टोकन के रूप में 'महत्वपूर्ण' सूचीबद्ध करता है ('"! "({W} | {comment}) * {I} {एम} {पी} {ओ} {आर} {टी} {ए} {एन} {टी} \t {वापसी IMPORTANT_SYM;} ') हालांकि यह व्हाइटस्पेस और ''! 'के बीच टिप्पणियों की अनुमति देता है और 'मैं'। –

+0

यह एक अच्छा स्पष्टीकरण की तरह लगता है। क्या कोई पार्सिंग विशेषज्ञ पुष्टि कर सकते हैं कि 'महत्वपूर्ण 'की तुलना में' महत्वपूर्ण 'पार्स करना आसान है? –

+4

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

0

यदि आप इसके बारे में सोचते हैं, तो ASCII आदेश में गुणों को सॉर्ट करना, "!" से शुरू होने वाली कुछ भी पहले दिखाई देगा। मेरा अनुमान है कि इस तरह से पार्स करना आसान था।

+0

आसान क्योंकि '!' पहले ASCII चरित्र सेट में आपका मतलब है? मैंने इस सवाल में इसके बारे में एक नोट जोड़ा है। –

+0

यह हो सकता है। मैं बस अनुमान लगा रहा हूँ। ASCII तालिका से परामर्श करने के बाद, मैंने "!" के साथ शीर्षक शुरू करके एक समाचार पत्र में सूची में पहली बार वर्गीकृत करने का प्रबंधन किया था। :) –

+0

'महत्वपूर्ण 'संपत्ति मूल्य के बाद प्रकट होता है, न कि संपत्ति के नाम में जो संभवतः आप द्वारा क्रमबद्ध किया जाएगा। –

4

! एक विस्मयादिबोधक चिह्न है, इसलिए अपने आप में यह कहा गया है कि कुछ महत्वपूर्ण है। तो मैं कहूंगा कि यह अजीब है कि (अन्य) प्रोग्रामिंग भाषाएं उपयोग करें! एक नियामक के रूप में।

HTML में! एक घोषणा का हिस्सा है (जैसे <!-- --> कोई दस्तावेज़ प्रकार की घोषणा करने के लिए एक टिप्पणी और <!DOCTYPE ..> घोषित करने के लिए), तो यह कोई और अर्थ नहीं है।

लेकिन तब फिर से, सीएसएस एक प्रोग्रामिंग भाषा बिल्कुल भी नहीं है ..

और यहां तक ​​कि प्रोग्रामिंग भाषाओं के बीच वहाँ मतभेद हैं। और यह समझ में आता है।, अगर वे सभी समान थे, तो यह केवल एक भाषा होगी। : डी

+2

दूसरी तरफ, सीएसएस में सी-जैसी संरचनाएं होती हैं, जैसे '{'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' एक 'नहीं' ऑपरेटर! तो ओपी का सवाल समझ में आता है। –

+0

++ 1: पूरी तरह से सहमत हैं, खासकर इस तथ्य के बारे में कि यह एक प्रोग्रामिंग भाषा नहीं है। –

+0

@ मिस्टर, हम्म, मुझे आज सुबह और कैफीन पीना चाहिए था। उस पर माफी - टिप्पणी हटाना। – 0b10011

0

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

और शायद यह एक कीबोर्ड लेआउट निर्णय है। जर्मन कीबोर्ड पर कुछ टोकन Englisch कीबोर्ड { पर से टाइप करने के लिए कड़ी मेहनत कर रहे एक Alt Gr7 उदाहरण के लिए है। ! जर्मन कुंजीबॉड्स पर अंग्रेजी के समान है। किसी को विदेशी बोली जाने वाले व्यक्तियों के साथ दया हो सकती है। फिर एक अनुमान है।

2

मुझे नहीं पता कि यह एक संयोग है, लेकिन! ASCII तालिका (# 32 पर) में सबसे पुराना गैर-सिस्टम और गैर-सफेद स्थान है। पार्सिंग के मामले में, क्या इससे जल्दी हो जाएगा?

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

हाथ से लुढ़का पार्स कभी-कभी पहले चरित्र के आधार पर टोकन वर्गीकृत करने के लिए लुकअप-टेबल का उपयोग करते हैं।

static const uint8 firstCharKinds[] = { 
/*   0  1  2  3  4  5  6  7  8  9 */ 
/* 0+ */ _______, _______, _______, _______, _______, _______, _______, _______, _______, Space, 
/* 10+ */  EOL, Space, Space,  EOL, _______, _______, _______, _______, _______, _______, 
/* 20+ */ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 
/* 30+ */ _______, _______, Space, _______, String, _______, Ident, _______, _______, String, 
/* 40+ */ OneChar, OneChar, _______, Plus, OneChar, _______,  Dot, _______, HexOct,  Dec, 
/* 50+ */  Dec,  Dec,  Dec,  Dec,  Dec,  Dec,  Dec,  Dec, Colon, OneChar, 
... 

लेकिन |! से अधिक का उपयोग कर आप नहीं दूँगी इस तरह के एक मेज बहुत छोटे हैं: उदाहरण के लिए, मोज़िला जे एस इंजन jsscan.cpp में जिसके बाद lexer को परिभाषित करता है है। सीएसएस और एचटीएमएल हेवीवेट हैं इसलिए स्मृति-बाधित डिवाइस सीएसएस को पार्स नहीं करते हैं और लेक्सर में कुछ बाइट्स ('|' - 'z' == 2) को सहेजने के लिए ब्राउज़र प्रदर्शन को महत्वपूर्ण रूप से प्रभावित नहीं करेंगे।

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

  • कोई संबंधित समस्या नहीं^_^