2012-03-17 5 views
5

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

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

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

एक प्रलेखन तंत्र के रूप में, मैं एक नामित चर होने (भले ही वह एक निरंतर रूप से लागू नहीं है) अभी भी पठनीयता में सुधार करने के लिए एक अच्छा तरीका है लगता है जादू संख्या के लिए कहते हैं,।

var trackingCookieName = "trackingCookie"; 

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

उत्तर

6

जवाब व्यक्तिपरक है। जैसा आपने लिखा था, कोई कंपाइलर या स्थिरांक नहीं है।

तो अगर यह आप आप पढ़ रहे हैं और कोड बनाए रखने अगर तार चर में जमा हो जाती है, यह करना है, अन्यथा यह से बचने के ...

+1

सहमत हुए। मैं जोड़ता हूं कि यह स्थिरांक का उपयोग करने के लिए तर्कसंगत रूप से बेहतर है क्योंकि स्ट्रिंग अक्षर की संख्या बढ़ जाती है। एक टाइपो की स्थिति में, आपको एक संदर्भ त्रुटि मिल जाएगी जो डीबग करना अधिक आसान बना देगा। – squidbe

0

स्थिरांक का उपयोग करना हमेशा बेहतर है, भले ही भाषा की (ठीक है, हो सकता है में मदद करता है एक अच्छा अपवाद पा सकते हैं)। स्ट्रिंग अक्षर का उपयोग करने का एकमात्र समय यह है कि यदि मैं फ़ाइल पार्सर बना रहा हूं या यदि मैं समय पर छोटा हूं और स्थिरांक की सूची बनाना नहीं चाहता हूं।

बेशक

भी कई स्थिरांक को पढ़ने के लिए कठिन हो सकता है ... यह वास्तव में कैसे अस्पष्ट स्ट्रिंग शाब्दिक हैं पर निर्भर करता है।

परवाह किए बिना, जावास्क्रिप्ट एक स्ट्रिंग भारी भाषा (के रूप में किसी भी व्याख्या की भाषा हो जाएगा) है। आप ऑब्जेक्ट के स्ट्रिंग नाम (container["innerObject"]) के आधार पर वस्तुओं से फ़ील्ड निकाल सकते हैं, और स्ट्रिंग के माध्यम से कोड चलाने के लिए लगभग बहुत आसान है।

1

जावास्क्रिप्ट कॉन्स व्यापक रूप से समर्थित नहीं है इसलिए मैं कहूंगा कि नहीं, यह सर्वोत्तम अभ्यास नहीं है।

"कॉन्स्ट का वर्तमान कार्यान्वयन एक मोज़िला-विशिष्ट एक्सटेंशन है और यह ईसीएमएस्क्रिप्ट 5 का हिस्सा नहीं है। यह फ़ायरफ़ॉक्स & क्रोम (वी 8) में समर्थित है और आंशिक रूप से ओपेरा 9 + और सफारी में समर्थित है। यह इंटरनेट में समर्थित नहीं है एक्सप्लोरर 6-9, या इंटरनेट एक्सप्लोरर 10 के पूर्वावलोकन में। वर्तमान में कॉन्स कीवर्ड फ़ंक्शन स्कोप (जैसे var के साथ घोषित चर) में निरंतर घोषित करता है।

कॉन्स्ट ईसीएमएस्क्रिप्ट 6 द्वारा परिभाषित किया जा रहा है, लेकिन अलग-अलग के साथ अर्थशास्त्र। लेट स्टेटमेंट के साथ घोषित चर के समान, कॉन्स्टेंट घोषित कॉन्सेंट ब्लॉक-स्कोप्ड होगा। " - https://developer.mozilla.org/en/JavaScript/Reference/Statements/const

इसके अलावा, यदि आप जावास्क्रिप्ट में एक सच्चे कॉन्स को कार्यान्वित करना चाहते हैं तो इसे किसी ऑब्जेक्ट में लपेटें और केवल कार्यक्षमता प्रदान करें।

कुछ इस तरह:

var Cookies = (function() 
{ 
var consts = 
{ 
    'APPLICATION': '21930857a3e', 
    'SERVER': '435a3456jh5' 
}; 
return 
{ 
    get: function(name) 
    { 
    return consts [name]; 
    } 
}; 
} 
)(); 

और फिर उन्हें पुनः प्राप्त:

document.write('<img src="' + Cookies.get('APPLICATION') + '" />') 

या फिर भी आप स्थिरांक उपयोग करना चाहते हैं।

+0

@ जेफरी स्वीनी - शायद मैंने इसे गलत पढ़ा, मैंने व्याख्या की थी कि 'मैं अनुशंसा करता हूं कि शाब्दिकों को स्थिरांक के साथ प्रतिस्थापित किया जाए' जैसे स्ट्रिंग को 'कॉन्स्ट' पर सेट किया गया था, यही वह था जिसे मैंने जवाब दिया था। –

1

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

मैंने "सम्मेलन" चीज लाई, क्योंकि यह "कॉन्स" चीज इसके बारे में काफी कुछ है, और कुछ लोग/संगठन हैं जो इन भाषाओं का उपयोग करते हैं और उनके लिए कुछ अच्छे अभ्यासों को परिभाषित करते हैं। आप इन सम्मेलनों का उपयोग इस तरीके से कर सकते हैं कि आप बेहतर तरीके से उपयुक्त हों, क्योंकि वे उनके बीच थोड़ा अलग हैं, ताकि आप अनुभव प्राप्त कर सकें। यहाँ वे हैं:

Google Style Guide

JS Crockford Style Guide

+0

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

1

ठीक है, मैं मानता हूँ कि यह व्यक्तिपरक विकल्प हो सकता है। जावास्क्रिप्ट में स्थिरांक के बराबर कुछ का उपयोग करने के लिए मैं पक्षपातपूर्ण क्यों हूं। फिर,,

function ENUM(name) { 
    window[name] = name; // depending on platform I am on 
} 

वैश्विक क्षेत्र में शायद कुछ फ़ाइल में मैं

ENUM("MSG_DOOR_OPEN"); 
ENUM("MSG_DOOR_CLOSED"); 

करना और, मैं का उपयोग करें: सबसे पहले, यहाँ मैं अपने स्थिरांक कैसे परिभाषित कर सकता है (या इन अधिक enums की तरह हैं) है की तरह मेरे कोड में इस:

obj.notify(MSG_DOOR_OPEN); 

कारण मैं इस बेहतर चाहते हैं:

  1. यदि मैं कुछ गलत टाइप करता हूं, तो मुझे कुछ अपरिभाषित संदर्भ त्रुटि मिलती है, जो किसी भी जावास्क्रिप्ट कंसोल में स्पॉट करना बहुत आसान बनाता है।
  2. इस तरह, मैं नई स्ट्रिंग ऑब्जेक्ट बनाने के बजाए प्री-आवंटित स्ट्रिंग ऑब्जेक्ट का जिक्र कर रहा हूं।
  3. मुझे इस बात को उद्धृत करने की ज़रूरत नहीं है - विशेष रूप से विम में अच्छी लगती है।

गिरावट:

  1. हाँ, यह एक वैश्विक चर रहा है।
  2. नाम-दूरी नहीं (अन्य एमएसजी_ उपसर्ग)।
  3. यदि आप सबकुछ के लिए ऐसा करना चाहते हैं तो यह एक परेशानी है। (आपको यह नहीं करना है)

लेकिन संदेश नाम आदि जैसी महत्वपूर्ण चीज़ों के लिए, मुझे ऐसा करना पसंद है। इसके अलावा, 1 स्थान में परिभाषित सभी संदेश नाम वैसे भी अच्छे हैं। मैं जावास्क्रिप्ट विशेषज्ञ या कुछ भी नहीं हूं, इसलिए अगर मैं गलत हूं तो कृपया मुझे सही करें ...

7

स्थिरांक को स्ट्रिंग शाब्दिक निकाला जा रहा है इसका मतलब है

  • उपकरण JSHint तरह गलत वर्तनी चर नाम की पहचान कर सकते
  • कंप्रेसर छोटे उत्पादन
  • के लिए चर नाम संक्षिप्त कर सकते हैं आप वास्तव में 1 जगह में स्ट्रिंग मूल्यों को बदल
0

जावास्क्रिप्ट में स्थिरांक की बहस में, मैं व्यक्तिगत रूप से निम्नलिखित विधि पसंद करता हूं (जो वास्तव में enums के करीब है)।

var DIR = { 
    North: [-1, 0], 
    NorthEast: [-1, 1], 
    East: [0, 1], 
    SouthEast: [1, 1], 
    South: [1, 0], 
    SouthWest: [1, -1], 
    West: [0, -1], 
    NorthWest: [-1, -1] 
}; 

कौन सा आसान इसे पसंद उपयोग करने के लिए बनाता है:

var myDirection = DIR.SouthEast; 

साथ ही, आधुनिक आईडीई के मूल्यों जो वास्तव में मदद करता है के लिए Intellisense प्रदान कर सकते हैं।

@ ट्रैविस-जे द्वारा उल्लिखित अन्य विधि अच्छी है और बहुत सारे ढांचे इसका उपयोग करते हैं (सेन्चा, इत्यादि)। लेकिन जेएस में निरंतर या enum के करीब है, मैं अपनी उपरोक्त विधि पसंद करते हैं।

लेकिन आप इसे ट्रैविस की तरह निश्चित रूप से कर सकता है उल्लेख:

var Directions = (function() { 
    var consts = { 
     'North': [-1, 0], 
     'NorthEast': [-1, 1], 
     'East': [0, 1], 
     'SouthEast': [1, 1], 
     'South': [1, 0], 
     'SouthWest': [1, -1], 
     'West': [0, -1], 
     'NorthWest': [-1, -1] 
    }; 

    return { 
     get: function(name) { 
      return consts[name]; 
     } 
    } 
})(); 

लेकिन समस्या यह है कि मैं के साथ किया है अब आप करना पड़ता है उचित कुंजी पता है।

var myDirection = Directions.get('SouthEast'); 
var myDirection = Directions.get('SOUTHEAST'); // null 

आशा है कि थोड़ा सा सहायता प्रदान करेगी।

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

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