जेएस में एक समारोह बनाने के लिए एक बड़ा विरोध प्रतीत होता है। इस उकसावे के कारण लोग चालाक बनने की कोशिश करते हैं और हास्यास्पद चाल का इस्तेमाल करते हैं ताकि सामान को एक पंक्ति में रखा जा सके जैसे कि फ़ंक्शन कॉल होता। बेशक एक कॉल में फ़ंक्शन नाम अतिरिक्त प्रलेखन के रूप में भी कार्य करता है। हम एक टिप्पणी को एक व्यंजक अभिव्यक्ति के साथ संलग्न नहीं कर सकते क्योंकि तब यह करने के बिंदु को हरा देगा इसलिए हम इसे "js मुहावरा" कहते हैं और अचानक यह समझ में आता है।
जावास्क्रिप्ट बेहद सुलभ है, ज्यादातर लोग नाश्ते के लिए विशिष्टताओं को नहीं खाते हैं जैसे हम करते हैं। इसलिए वे कभी नहीं समझ पाएंगे कि मुहावरे की छिपी हुई धारणाएं और धार के मामले क्या हैं।
x = x || 'default_value';
औसत जो या तो यह समझ नहीं पाएगा या यह याद रखेगा कि यह डिफ़ॉल्ट मान के लिए मुहावरा है। दोनों हानिकारक हैं, वास्तव में उत्तरार्द्ध और भी अधिक हानिकारक है। वह यहाँ मान्यताओं और धार के मामलों को नहीं समझेगा। वह विनिर्देश को पढ़ने और इसे कभी समझने की परवाह नहीं करेगा।
जब मैं उस कोड को देखो मैं देख रहा हूँ "अगर यह null
या undefined
, तो यह डिफ़ॉल्ट मान पर सेट करें। हालांकि यह भी परोक्ष व्यवहार करेगा +0
, -0
, NaN
, false
, और ""
के रूप में उपयुक्त नहीं मान। मुझे याद है करना होगा कि 3 महीने अब से जब कि जरूरतों बदलने के लिए। मैं शायद इसे भूल जाऊंगा। "
निहित धारणा भविष्य में एक बग पैदा होने की संभावना है और जब आपका कोडबेस इस तरह से चाल से भरा होता है तो कोई मौका नहीं है कि आप उन सभी को अपने सिर में रख रहे हैं जब भी आप सोच रहे हैं कि संशोधन क्या प्रभावित करेगा। और यह "JS pro" के लिए है, औसत joe ने बग लिखा होगा भले ही आवश्यकताओं को शुरू करने के लिए एक मिथ्या मूल्य को स्वीकार करना था।
आपके नए स्निपेट में अधिक परिचित वाक्यविन्यास हैं लेकिन फिर भी उपरोक्त समस्या है।
आप इसके साथ जा सकते हैं:
function f(x) {
x = valueOrDefault(x, "default_value");
}
अब आपके पास किनारे के मामलों को संभालने के लिए बहुत जटिल तर्क हो सकते हैं और क्लाइंट कोड अभी भी सुंदर और पठनीय दिखता है।
अब, आप कैसे उन्नत भाषा सुविधा के बीच अंतर करते हैं जैसे एक फ़ंक्शन को तर्क के रूप में पास करना या जैसे एक चतुर चाल || "default"
?
चालाक चाल हमेशा कुछ छिपी हुई मान्यताओं के तहत काम कर रहे हैं जिन्हें अनदेखा किया जा सकता है जब कोड शुरू में बनाया गया था। मुझे एक IIFE को कभी और नहीं बदलना होगा क्योंकि एक आवश्यकता बदल गई, यह हमेशा रहेगी। शायद 2020 में जब मैं वास्तविक मॉड्यूल का उपयोग कर सकता हूं, लेकिन हाँ।
| 0
या ~~num
फर्श के लिए उपयोग किए जाने वाले कार्गो पंथ संस्करण सकारात्मक और 32-बिट हस्ताक्षरित पूर्णांक सीमा मानता है।
|| "default"
सभी मिथ्या मानों को समान माना जाता है जैसे कि किसी तर्क को पारित नहीं करना।
और इसी तरह।