2012-09-09 13 views
11

के अंदर सेट वैरिएबल यह काम पर प्रतीत होता है और मान्य है, लेकिन क्या ऐसा कोई कारण नहीं है कि मुझे ऐसा नहीं करना चाहिए? यह मुझे कोड की एक पंक्ति बचाता है और मुझे एक चर क्षेत्र और एक पाठ क्षेत्र के मूल्य सेट करने देता है।वैल

$('#price').val(default_price = 2.9); 

यह इस के बराबर है:

default_price = 2.9; 
$('#price').val(default_price); 

उत्तर

18

यह कोड कोड कुछ पूरी तरह से अलग कर के अंदर एक बात कर रही एम्बेड करता है।

विशेष रूप से यदि आप डिफ़ॉल्ट मानों, "स्थिरांक" आदि के बारे में बात कर रहे हैं, तो यूआई इंटरैक्शन के साथ प्रारंभिकता को भ्रमित करने से भ्रम पैदा होता है। – को ढूंढने और बनाए रखने के लिए उन्हें अलग रखें।

तकनीकी रूप से यह वही बात है। संज्ञानात्मक यह नहीं है।

o.v. वैश्विक नेमस्पेस प्रदूषण के दर्शक को बढ़ाता है। मनमाने ढंग से स्थानों में चर घोषित करके आप एक मूल्य को ओवर-राइटिंग, वेट-ड्रिलिंग एक पहचानकर्ता, डुप्लिकेटिंग प्रयास आदि की बाधाओं को बढ़ाते हैं।

बनाने मुश्किल-से-अलग कीड़े के अलावा, यह एक अतिरिक्त संज्ञानात्मक लोड है, क्योंकि आप तो घोषित चर का दायरा समझना होगा, का पता लगाने, और कहाँ यह किया जा सकता है आदि

+7

मैं भी यहां दो-पंक्तियों के लिए वोट देता हूं। समझने या रखरखाव के साथ आसानी से लेखन (एक-लाइनर) को आसानी से भ्रमित न करें। दूसरों के लिए समझना आपके कोड पर महत्वपूर्ण है। बनाए रखने के लिए आसान कोड रखना हर किसी के लिए बेहतर है। – Gilbert

+0

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

+0

हम्म। प्रोग्रामिंग सिद्धांत पर छोटे सबक के लिए धन्यवाद। – northamerican

3

मैं तरह से कि आप कर रहे हैं में इसका इस्तेमाल नहीं होगा - जैसा कि मैं हमेशा एक संग्रह के रूप विलक्षण मान संग्रहीत करने के लिए वस्तुओं पसंद करते हैं, अर्थात्:

var defaults = { 
    "price" : 2.9 
}; 

(इस का कारण यह है कि यह अधिक निर्यात योग्य है, अधिक पोर्टेबल, और जावास्क्रिप्ट के साथ एक var को ठीक से हटाने का कोई तरीका नहीं है एक बार यह बनाया गया है - जबकि आप किसी ऑब्जेक्ट से जितनी चाहें उतनी चाबियाँ निकाल सकते हैं)

हालांकि, मैं if statements में जो कुछ कर रहा हूं उसका उपयोग करता हूं। वहाँ बहुत सारे कोडर हैं जो इसके बारे में शिकायत करेंगे, लेकिन मेरे लिए, एक var के लिए कुछ का परिणाम निर्दिष्ट करते हैं - कि आप तब अस्तित्व के लिए परीक्षण कर रहे हैं - और फिर उसी if block के भीतर उपयोग करने से सही अर्थ होता है, और मेरी आंखों में

var view; 

if ((view = someClass.thatChecksAndLoads('a view'))) { 
    /// do something with the view 
} 

ऊपर ही स्थितियों में, जहां आप अपने view वस्तु के लिए हो रही के कई तरीके होते हैं, उदाहरण के लिए करने के लिए अच्छी तरह से उधार देता है:

if ((view = someClass.thatChecksAndLoads('a view'))) { 
    /// do something with the view 
} 
else if ((view = anotherWay.toLoad('a view'))) { 
    /// do something here instead 
} 

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

+0

+1, दिलचस्प, लेकिन: मैं लगभग निश्चित रूप से एक अलग दृष्टिकोण लेता हूं, और व्यवहार को सीधे दृश्य और/या लोडिंग तंत्र से जोड़ता हूं। (या संदर्भ के आधार पर कुछ और।) यदि एक ऐसा/अन्य कथन आमतौर पर मेरे सिर में चेतावनी घंटी का सेट करता है कि मैं शायद कुछ गलत कर रहा हूं, और मैं व्यवहार को एक अधिक संवादात्मक तरीके से समाहित कर सकता हूं। –

+0

आपके पिछले पैराग्राफ में "जावास्क्रिप्ट कंपाइलर्स" का क्या मतलब है? क्या आप आईडीई या अन्य देव उपकरण के बारे में बात कर रहे हैं? (यह देखते हुए कि जेएस परिनियोजन के लिए संकलित नहीं किया गया है, और ब्राउजर उस निर्माण पर ऑब्जेक्ट नहीं करते हैं - या नहीं करना चाहिए।) – nnnnnn

+0

@nnnnnn माफी, जावास्क्रिप्ट एक व्याख्या की गई भाषा है (टाइपिंग करते समय मेरे पास विशिष्ट होने का एक निश्चित तरीका है) ... लेकिन कभी-कभी कम-से-कम वर्तमान ब्राउज़र 'जेआईटी' या बस समय संकलन में नहीं करेंगे। प्रभाव वही है, जो भी कोड चलाने की कोशिश कर रहा है चेतावनी और त्रुटियों को ट्रिगर करेगा (बस किसी भी ब्राउज़र में कंसोल की जांच करें)। असल में, मैंने अपने उत्तर को केवल ईएमसीएस्क्रिप्ट भाषाओं में से किसी एक में सुरक्षित रखने के लिए बढ़ाया - और पीपीएल के खिलाफ बचाव करने के लिए जिनके पास ब्रैकेट्स के खिलाफ कोई चीज है;) – Pebbl

9

मैं इस विचार का मनोरंजन करूंगा कि इस तरह के निर्माण कुछ मामलों में स्वीकार्य हो सकता है लेकिन यह एक नहीं है, खासकर जब से दिए गए उदाहरण में अन्य स्टाइलिस्ट मुद्दे हैं (सबसे बड़ा "जादू संख्या कहां से आती है")

मुख्य चिंता का विषय IMO या नहीं, चर घोषित किया गया है है - तुम नहीं बस

$('#price').val(var default_price = 2.9); //nope 

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

if (/*whatever*/) { 
    $('#price').val(default_price = 2.9); 
} else { 
    $('#price').val(default_price = 9522); //over 9000 
} 

फिर, यह बाद से सेटिंग #price का मूल्य सशर्त (या एक switch बयान) के बाहर मार दिया जाना चाहिए शैलीगत गरीब है:

if (/*whatever*/) { 
    default_price = 2.9; 
} else { 
    default_price = 9522; 
} 
$('#price').val(default_price); 

एक जटिल मामले में जहां चर सेटर मूल्य जो पहली जगह में एक संदिग्ध व्यवहार का एक सा IMO है सौंपा के अलावा कुछ वापस जाने के लिए ओवरराइड की गई है वहाँ हो सकता है।

+1

+1 के आधार पर अलग-अलग व्यवहार करते हैं, तो हाँ - निश्चित रूप से एक प्रमुख, प्रमुख मुद्दा। –

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