स्थिर भाषाओं के लिए उपयोग किया जाने वाला प्रोग्रामर कैसे जावास्क्रिप्ट टूलिंग की कमी का सामना करता है


28

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

आप ऐसा कर सकते हैं:

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

ये सभी सुविधाएं मुझे ऐसा महसूस कराती हैं कि आईडीई मेरा सबसे अच्छा दोस्त है। जावा कोड लिखना और विशेष रूप से अन्य लोगों के कार्यक्रमों को समझना बहुत आसान हो जाता है।

हालांकि, मुझे जावास्क्रिप्ट का उपयोग करने के लिए अधिक से अधिक पर बुलाया जा रहा है, और मेरा अब तक का अनुभव काफी नकारात्मक रहा है।

विशेष रूप से:

  • किसी फ़ंक्शन के प्रवेश बिंदु को खोजने का कोई तत्काल तरीका नहीं है (एक सादे पाठ खोज के अलावा, जिसके परिणामस्वरूप बाद में कॉल पदानुक्रम के तरीकों की खोज हो सकती है, दो या तीन के बाद आप भूल गए हैं कि आप कहाँ शुरू हुए थे)

  • पैरामीटर्स फ़ंक्शंस में पास किए जाते हैं, यह जानने का कोई तरीका नहीं है कि उस पैरामीटर पर कौन से गुण और फ़ंक्शंस उपलब्ध हैं (वास्तव में प्रोग्राम चलाने के अलावा, उस बिंदु पर नेविगेट करना, जिस पर फ़ंक्शन को बुलाया जाता है, और सभी गुणों को आउटपुट करने के लिए कंसोल.लॉग्स का उपयोग किया जाता है। उपलब्ध)

  • कॉलबैक के रूप में अनाम फ़ंक्शंस का सामान्य उपयोग, जो अक्सर कोड पथों को भ्रमित करने वाले स्पेगेटी की ओर जाता है, जिसे आप जल्दी से चारों ओर नेविगेट नहीं कर सकते।

  • और यकीन है, JSLint रनटाइम से पहले कुछ त्रुटियों को पकड़ता है, लेकिन यहां तक ​​कि ब्राउज़र में सीधे आपके कोड के तहत लाल लहराती रेखाओं के रूप में काम नहीं करता है।

उतावलापन यह है कि आपको हर समय अपने सिर में पूरे कार्यक्रम की आवश्यकता होती है। यह जटिल कार्यक्रमों को लिखने के लिए संज्ञानात्मक भार को बड़े पैमाने पर बढ़ाता है। और यह सब अतिरिक्त सामान के बारे में चिंता करने के लिए वास्तविक रचनात्मकता और समस्या समाधान के लिए मेरे मस्तिष्क में कम जगह छोड़ता है।

यकीन है, यह सिर्फ एक औपचारिक औपचारिक परिभाषा लिखने के बजाय एक वस्तु को एक साथ फेंकने के लिए तेज़ है। लेकिन जबकि कार्यक्रम लिखने में थोड़ा आसान और तेज हो सकता है, मेरे अनुभव में वे पढ़ने और डिबग करने के लिए बहुत कठिन हैं।

मेरा सवाल यह है कि अन्य प्रोग्रामर इन मुद्दों से कैसे निपटते हैं? जावास्क्रिप्ट स्पष्ट रूप से लोकप्रियता में बढ़ रहा है, और मैंने जो ब्लॉग पढ़े हैं, वे इस बारे में हैं कि लोग इन मुद्दों के समाधान खोजने के लिए सख्त कोशिश करने के बजाय इसके साथ कैसे उत्पादक हो रहे हैं।

GWT आपको इसके बजाय जावा में जावास्क्रिप्ट पर्यावरण के लिए कोड लिखने की अनुमति देता है, लेकिन जैसा कि मुझे उम्मीद थी कि इसका व्यापक रूप से उपयोग नहीं किया जाएगा; लोग वास्तव में जटिल कार्यक्रमों के लिए जावास्क्रिप्ट को पसंद करते हैं।

मुझे किसकी याद आ रही है?


8
जेएस के साथ कठिन समय रखने वाले सभी जावा देवों को मेरी सलाह एक और भाषा सीखने के लिए है जिसमें सी-आधारित सिंटैक्स नहीं है। जब आप जेएस में वापस आते हैं तो आपको वाक्य-रचना के पिछले हिस्से को प्राप्त करने में मदद मिलेगी और यह आपको सभी कोड लिखने के तरीके के बारे में चीजों को देखने के बजाय भाषा डिजाइन के ट्रेडऑफ के संदर्भ में सामान देखने में मदद कर सकता है। बाकी सब गलत हो जाते हैं। और अगर आपको एक यूआई फ्रेमवर्क लिखने का विचार मिलता है, तो कृपया जावास्क्रिप्ट सीखने से पहले हमें एक और ब्लॉटेड क्लास-कैस्केडिंग टुकड़ा कचरे के साथ मिला दें जो सीटीओ को जकड़ने के लिए बाजार में बहुत आसान है।
एरिक रेपेने

5
यार 2 साल पहले मुझे क्या सूंघा गया था मैं अभी थोड़ा और मददगार बनने की कोशिश करूँगा कि मैंने हाल ही में जावा को बहुत मुश्किल से मारा है। आईडीई? Jetbrains Webstorm देखें (मैं अभी भी मुख्य रूप से Scite का उपयोग करता हूं, लेकिन WS खराब नहीं है), लेकिन क्लाइंट-साइड वेब के लिए, Chrome के dev टूल आपको डिबग पर कवर करने का एक बहुत अच्छा काम करते हैं और यह वास्तव में ऑटो-कंप्स का प्रदर्शन करता है जब निप्पल लिखते समय सांत्वना में कोड। इसके अलावा, OOP के बारे में सोचने में बहुत समय व्यतीत करें। IMO, गैर-वैकल्पिक वर्ग और IDEs को मानव की सुगमता के विकल्प के रूप में वहाँ से बाहर बहुत सारे जावा में OOP के पूरे बिंदु की हत्या कर दी है।
एरिक रेपेन

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

2
@ErikReppen मैंने जावा डेवलपर के रूप में शुरू किया था, लेकिन मैं ओब्ज-सी में धाराप्रवाह हूं, रूबी, डेल्फी, सी ++, सी #, प्रोलॉग, पीएचपी, बैश में प्रोग्राम किया गया है और मुझे अभी भी जावास्क्रिप्ट पढ़ने और मंटेन के लिए सबसे खराब लगता है।
सुल्तान

2
टाइपस्क्रिप्ट पर एक नज़र डालें। एक बार जब मैं इसका उपयोग करना शुरू कर देता हूं तो मुझे क्लाइंट-साइड कोडिंग बहुत अधिक उत्पादक और सुखद लगती है। उचित अंतर्मुखी और शुरुआती संकलक चेतावनी को हरा देना।
इवगेनी

जवाबों:


22

IDE- आधारित निकेट्स उपलब्ध नहीं हैं * एक गतिशील भाषा में जैसे जावास्क्रिप्ट। आपको उनके बिना करना सीखना होगा। आपको बेहतर डिज़ाइन के साथ टूल सपोर्ट को बदलना होगा।

एक मॉड्यूल पैटर्न का उपयोग करें - या तो हाथ से, या जैसे उपकरण के साथ requirejs । मॉड्यूल को छोटा रखें, ताकि आप उनके बारे में आसानी से तर्क कर सकें।

कई प्रकारों को परिभाषित न करें - कॉल के बिंदु के करीब निर्मित अनाम वस्तुओं का उपयोग करें। तब आप कॉलर और कैली को देख सकते हैं और जान सकते हैं कि क्या चल रहा है।

अपने कोड को DOM पर टालने से बचने की कोशिश करें - अपने कोड में आपके द्वारा किए गए DOM मैनिपुलेशन की मात्रा को सीमित करने के लिए कड़ी मेहनत करें। यदि आप चयनकर्ताओं या jQuery संग्रहों में पास हो सकते हैं, तो अपने कोड को पृष्ठ संरचना के बारे में जानने के बजाय ऐसा करें।

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


टूलींग की कमी से निपटने के लिए रचनात्मक सलाह के लिए इसे स्वीकार करना।
फंकीब्रिज

3
"आपको उनके बिना करना सीखना होगा।" या इसे स्क्रैप करें या उच्च-स्तरीय भाषा का उपयोग करें जो जावास्क्रिप्ट उत्पन्न करता है और इसमें उचित उपकरण होते हैं।
डेन

@ क्या: क्या आपके पास उन्नत उपकरणों के साथ उच्च-स्तरीय भाषा के लिए कोई सुझाव है? मेरे अनुभव में, लोकप्रिय भाषाओं के लिए उन्नत उपकरण बनाए गए हैं। उच्च-स्तरीय भाषा जो जावास्क्रिप्ट में संकलित होती है, ऐसे उपकरण के लिए पर्याप्त लोकप्रिय है?
शॉन मैकमिलन

1
@SeanMcMillan: कुछ नेट (सी # / एफ #) उदाहरण हैं jsil.org , projects.nikhilk.net/ScriptSharp , sharpkit.net , websharper.com
Den

1
@SeanMcMillan Java, GWT Developers.google.com/web-toolkit
funkybro

24

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

वहाँ आईडीई हैं, लेकिन यह समझने में मददगार हो सकता है कि वहाँ कई क्यों नहीं बने हैं

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

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

संरचना

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

मुझे वास्तव में हाल ही में हमारे जावा कोडबेस को समझने में काफी कठिन सीखने की अवस्था थी, जब तक कि मुझे अंततः यह पता नहीं चला कि इसमें से कोई भी उचित ओओपी नहीं था। कक्षाएं सेम या डीटीओ या स्टैटिक गेटर्स / सेटरों के आसपास बैठे विश्व स्तर पर उपलब्ध डेटा को बदलने वाले शिथिल संबंधित तरीकों के बंडलों से ज्यादा कुछ नहीं थीं। यह मूल रूप से वही पुराना जानवर है जिसे OOP को बदलना था। इसलिए मैंने मूल रूप से कोड के बारे में देखना और सोचना बंद कर दिया। मैंने बस शॉर्टकट कुंजियाँ सीखीं और मैसेजेस के माध्यम से पता लगाया और सब कुछ बहुत आसानी से हो गया। इसलिए यदि आप पहले से ही इस आदत में नहीं हैं, तो OOD के बारे में बहुत अधिक सोचें।

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

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

कोर सिद्धांत पहले

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

डर टाइपिंग टाइपिंग मत करो

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

जेएस फंक्शंस और क्लोजर से बाहर बकवास जानें

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

अपनाने से पहले पैटर्न / अभ्यास का पुन: मूल्यांकन करें

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

भाषा के लीड का पालन करें और कम के साथ अधिक करें

मेरा मानना ​​है कि जावा हेड होनकोस में से एक तर्क कहीं न कहीं यह तर्क देता है कि वाचालता वास्तव में एक सकारात्मक विशेषता है जो सभी पक्षों को समझने के लिए कोड को आसान बनाती है। बेतुकी। अगर यह सच होता, तो कानूनी पढ़ना आसान होता। केवल लेखक ही बना सकता है कि उन्होंने क्या लिखा है, इसे समझना आसान है और आप कभी-कभार खुद को दूसरे व्यक्ति के जूते में डालकर ऐसा कर सकते हैं। इसलिए इन दो नियमों को अपनाएं। 1. यथासंभव प्रत्यक्ष और स्पष्ट रहें। 2. लानत बिंदु पर पहले से ही जाओ। जीत यह है कि स्वच्छ, संक्षिप्त कोड परिमाण के आदेश हैं जो उस चीज़ को समझने और बनाए रखने में आसान हैं जहां आपको ट्रिगर से वास्तविक वांछित कार्रवाई करने के लिए पच्चीस परतों को पार करना पड़ता है। अधिकांश पैटर्न जो सख्त भाषाओं में उस प्रकार की वकालत करते हैं, वे वास्तव में उन सीमाओं के लिए वर्कअराउंड हैं जो जावास्क्रिप्ट के पास नहीं हैं।

सब कुछ निंदनीय है और यही ठीक है

जेएस शायद लोकप्रिय उपयोग में सबसे कम संरक्षणवादी भाषाओं में से एक है। गले लगा लो कि यह बढ़िया काम करता है। उदाहरण के लिए, आप एक निर्माण कार्य में नियमित रूप से vars घोषित करके दुर्गम लगातार "निजी" var के साथ ऑब्जेक्ट लिख सकते हैं और मैं अक्सर ऐसा करता हूं। लेकिन यह मेरे कोड या इसके उपयोगकर्ताओं को "खुद से" की रक्षा करने के लिए नहीं है (वे इसे रन-टाइम के दौरान अपने स्वयं के संस्करण के साथ बदल सकते हैं)। लेकिन इसके बजाय यह इरादे को संकेत देने के लिए है क्योंकि धारणा यह है कि दूसरा आदमी सक्षम है कि वह किसी भी निर्भरता को कम नहीं करना चाहता है और यह देखेगा कि आप इसे एक अच्छे कारण के लिए सीधे प्राप्त करने के लिए नहीं हैं।

कोई आकार सीमाएं नहीं हैं, केवल समस्या डोमेन हैं

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

अगर जावा ऑल यू नो, डब्बल इन समथिंग विथ ए नॉन-सी-बेस्ड सिंटेक्स है

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

निष्कर्ष

अब, उस सब पर विचार करते हुए, अपनी सभी समस्या-बिंदुओं को प्रभावित करें:

  • किसी फ़ंक्शन के प्रवेश बिंदु को खोजने का कोई तत्काल तरीका नहीं है (एक सादे पाठ खोज के अलावा, जिसके परिणामस्वरूप बाद में कॉल पदानुक्रम के तरीकों की खोज हो सकती है, दो या तीन के बाद आप भूल गए हैं कि आप कहाँ शुरू हुए थे)

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

function ObjectConstructor(){
    //No need for an init method.
    //Just pass in params and do stuff inside for instantiation behavior

    var privateAndPersistent = true;

    //I like to take advantage of function hoisting for a nice concise interface listing
    this.publicAndPointlessEncapsulationMurderingGetterSetter
    = publicAndPointlessEncapsulationMurderingGetterSetter;
    //Seriously though Java/C# folks, stop with the pointless getter/setters already

    function publicAndPointlessEncapsulationMurderingGetterSetter(arg){
        if(arg === undefined){
            return privateAndPersistent;
        }
        privateAndPersistent = arg;
    }

}

ObjectConstructor.staticLikeNonInstanceProperty = true;

var instance = new ObjectConstructor();//Convention is to  capitalize constructors

मेरे कोड में, मैं लगभग कभी भी वस्तुनिष्ठ {}अनुप्रयोग घटकों का उपयोग संरचनात्मक ऐप घटकों के रूप में नहीं करता हूं क्योंकि वे आंतरिक (निजी) संस्करण नहीं हो सकते हैं और डेटा संरचनाओं के रूप में उपयोग करने के लिए उन्हें आरक्षित करने के बजाय पसंद करते हैं। यह एक ऐसी उम्मीद स्थापित करने में मदद करता है जो इरादे की स्पष्टता को बनाए रखती है। (यदि आप कर्लियां देखते हैं, तो यह डेटा है, ऐप आर्किटेक्चर का एक घटक नहीं है)।

  • पैरामीटर्स फ़ंक्शंस में पास किए जाते हैं, यह जानने का कोई तरीका नहीं है कि उस पैरामीटर पर कौन से गुण और फ़ंक्शंस उपलब्ध हैं (वास्तव में प्रोग्राम चलाने के अलावा, उस बिंदु पर नेविगेट करना, जिस पर फ़ंक्शन को बुलाया जाता है, और सभी गुणों को आउटपुट करने के लिए कंसोल.लॉग्स का उपयोग किया जाता है। उपलब्ध)

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

  • कॉलबैक के रूप में अनाम फ़ंक्शंस का सामान्य उपयोग, जो अक्सर कोड पथों को भ्रमित करने वाले स्पेगेटी की ओर जाता है, जिसे आप जल्दी से चारों ओर नेविगेट नहीं कर सकते।

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

doSomethingWithCallback( (function callBack(){}) );

जब आप कॉल से ट्रेस कर रहे हों तो अब क्रोम का नाम आपके लिए होगा। गैर-तुच्छ कवक के लिए मैं इसे कॉल के बाहर परिभाषित करूंगा। यह भी ध्यान दें कि एक चर को सौंपे गए अननोनोमस फ़ंक्शन अभी भी गुमनाम हैं।

  • और यकीन है, JSLint रनटाइम से पहले कुछ त्रुटियों को पकड़ता है, लेकिन यहां तक ​​कि ब्राउज़र में सीधे आपके कोड के तहत लाल लहराती रेखाओं के रूप में काम नहीं करता है।

मैं कभी सामान नहीं छूता। क्रॉकफोर्ड ने समुदाय को कुछ अच्छी चीजें दी हैं, लेकिन जेएसएलआईएनटी ने शैलीगत प्राथमिकताओं में रेखा को पार कर लिया है और जावास्क्रिप्ट के कुछ तत्वों का सुझाव है कि विशेष रूप से अच्छे कारण के लिए खराब हिस्से हैं, आईएमओ। निश्चित रूप से ध्यान दें कि regEx और नकार वर्ग के बारे में एक बात * और + के बाद। वाइल्डकार्ड अधिक खराब प्रदर्शन करते हैं और आप आसानी से {} के साथ पुनरावृत्ति को सीमित कर सकते हैं। साथ ही, फंक्शन कंस्ट्रक्टर्स के बारे में उनके द्वारा कही गई बातों को नजरअंदाज करें। यदि नया कीवर्ड आपको परेशान करता है तो आप उन्हें आसानी से फ़ैक्टरी फंक में लपेट सकते हैं। बुरी सलाह के मोर्चे पर CSSLint (क्रॉकफोर्ड का नहीं) और भी बुरा है। हमेशा ऐसे लोगों को लें जो नमक के एक दाने के साथ बहुत सारे बोलने वाले काम करते हैं। कभी-कभी मैं शपथ लेता हूं कि वे केवल अधिकार स्थापित करना चाहते हैं या नई सामग्री उत्पन्न करना चाहते हैं।

और फिर, आपको इस बात से अनजान होना चाहिए कि आपने इस रन-टाइम चिंता के साथ क्या सीखा है। (यह एक सामान्य है जिसे मैंने बहुत सारे जावा / सी # देवों के साथ देखा है) यदि रन-टाइम में त्रुटियों को देखते हुए अभी भी आपको 2 साल बाद परेशान करता है, तो मैं चाहता हूं कि आप एक ब्राउज़र में नीचे बैठें और जब तक यह डूब न जाए तब तक अनलोड करें। कोई संकलन-समय / रन-टाइम डिवाइड नहीं है (वैसे भी दृश्यमान नहीं है - JS को अब JIT पर चलाया जाता है)। केवल रन-टाइम में बग्स की खोज करना ठीक नहीं है, यह बहुत सस्ते और आसानी से स्पैम लोड करने के लिए बेहद फायदेमंद है और आपको मिलने वाले हर पड़ाव बिंदु पर बग्स की खोज करता है।

और उन क्रोम देव टूल्स पर 'क्रैकिन' प्राप्त करें। वे सीधे वेबकिट में अंतर्निहित हैं। क्रोम में राइट-क्लिक करें। तत्व का निरीक्षण। टैब का अन्वेषण करें। रन-टाइम के दौरान कंसोल में कोड को बदलने की क्षमता के साथ वहां बहुत डिबग पावर है जो सबसे शक्तिशाली लेकिन कम स्पष्ट विकल्पों में से एक है। परीक्षण के लिए भी अच्छा है।

संबंधित नोट पर, त्रुटियां आपके मित्र हैं। कभी भी एक खाली कैच स्टेटमेंट न लिखें। जे एस हम न छुपाएं या दफनाने त्रुटियों (या कम से कम हम नहीं करना चाहिए खांसी YUI / खांसी )। हम उनके पास जाते हैं। कुछ भी कम होने से डिबग दर्द होगा। और यदि आप उत्पादन में संभावित त्रुटियों को छिपाने के लिए कैच स्टेटमेंट लिखते हैं तो कम से कम चुपचाप त्रुटि और दस्तावेज़ को लॉग इन करें कि लॉग कैसे एक्सेस करें।


3
उत्तर के आकार के लिए
उत्थान

5

आप जो कह रहे हैं, वह जावा दिमाग वाले व्यक्ति का सामान्य पकड़ है, जो जावास्क्रिप्ट को देख रहा है।

चलिए सबसे पहले आपके सवाल का जवाब देते हैं ...

... मेरा सवाल है, अन्य प्रोग्रामर इन मुद्दों से कैसे निपटते हैं ...

उत्तर: उन्होंने नहीं किया। वे जावा पंथ को पहले त्याग कर जावास्क्रिप्ट दर्शन सीखते हैं।

आपको इस आधार को समझना होगा ... जावास्क्रिप्ट जावा नहीं है। यह सिंटैक्स के बारे में नहीं है - यह दर्शन के बारे में अधिक है।

चलिए अब उनमें से कुछ को लेते हैं ...

  • तुरंत उन सभी स्थानों को देखें जहां एक विधि लागू होती है, या एक स्थिरांक का उपयोग किया जाता है (ओपन कॉल पदानुक्रम / संदर्भ देखें)

    सीधे अपनी परिभाषा पर जाने के लिए एक फ़ंक्शन / सदस्य / वर्ग नाम पर नियंत्रण-क्लिक करें

    ये सभी उपलब्ध हैं - बस एक सभ्य IDE चुनें।

  • स्टेटिक टाइपिंग का मतलब है कि आप किसी वस्तु पर उपलब्ध सभी मापदंडों / कार्यों को दिखाने के लिए कोड पूरा करने का उपयोग कर सकते हैं

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

  • और यकीन है, JSLint रनटाइम से पहले कुछ त्रुटियों को पकड़ता है, लेकिन यहां तक ​​कि ब्राउज़र में सीधे आपके कोड के तहत लाल लहराती रेखाओं के रूप में काम नहीं करता है।

    फायरबग, क्रोम / सफारी कंसोल और यहां तक ​​कि आईडीई भी वह और अधिक करते हैं।

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

  • उतावलापन यह है कि आपको हर समय अपने सिर में पूरे कार्यक्रम की आवश्यकता होती है। यह जटिल कार्यक्रमों को लिखने के लिए संज्ञानात्मक भार को बड़े पैमाने पर बढ़ाता है।

    गलत! इसके विपरीत, जावास्क्रिप्ट एक "हल्के" प्रोग्रामिंग भाषा है - और आपको सरल कार्यक्रमों के लिए प्रोत्साहित करती है। जैसा कि डौग क्रॉकफोर्ड कहते हैं ... यदि आप जावास्क्रिप्ट में भारी मॉडल आधारित कार्यक्रम लिखने की कोशिश करते हैं तो यह आपको "दंडित" करेगा।

  • जबकि कार्यक्रमों को लिखने में थोड़ा आसान और तेज हो सकता है, मेरे अनुभव में वे पढ़ने और डिबग करने के लिए बहुत कठिन हैं।

    पूरा गलत! प्रोग्रामिंग भाषा के आधार पर आप पठनीयता कैसे तय करते हैं? कार्यक्रम पठनीय हैं (या नहीं) - भाषाएं नहीं। साथ ही, जावास्क्रिप्ट को शानदार डिबगर्स मिले हैं।

मुझे माफ कर दो अगर मैं थोड़ा कठोर लग रहा था - लेकिन सच्चाई यह है कि आपको जावास्क्रिप्ट को समझने के लिए अपने जावा स्वभाव को बदलना होगा।

केवल "परिपक्व" जावा प्रोग्रामर जावास्क्रिप्ट की सराहना कर सकते हैं - और आप वह नहीं कर सकते, जिसकी आप सराहना नहीं करते हैं। फिर, एकमुश्त कुंद होने के लिए क्षमा करें।


2
क्या आपके पास एक जावास्क्रिप्ट आईडीई की छूट है, जहां मैं "अपनी परिभाषा पर सीधे जाने के लिए किसी फ़ंक्शन / सदस्य / वर्ग के नाम पर नियंत्रण-क्लिक कर सकता हूं"? मैं जावा और स्काला के लिए ग्रहण का उपयोग करता हूं, लेकिन जावास्क्रिप्ट के लिए एक अच्छे आईडीई / संपादक का अभाव है।
जोनास

11
कुछ आलोचना करने के लिए तैयार है, लेकिन यहाँ कुछ चीजें काफी गलत हैं। यदि मैं एक ऑब्जेक्ट बनाता हूं, और फिर इसे एक फ़ंक्शन में पास करता हूं, तो मैं पैरामीटर पर क्लिक कर सकता हूं और इसके गुणों को देख सकता हूं? नहीं, मैं नहीं कर सकता, क्योंकि वस्तु कुछ भी हो सकती है। यदि मुझे ऑब्जेक्ट प्रॉपर्टी के नामों में से एक की याद आती है, तो क्या यह मुझे चेतावनी देगा? नहीं, यह नहीं होगा, क्योंकि यह जेएस में कोई त्रुटि नहीं है, भले ही यह कभी भी ऐसा नहीं है जो आप चाहते हैं। सहायक कोड पूरा होना असंभव है। यह पता लगाना कि किसी फ़ंक्शन के पैरामीटर के पास क्या गुण हैं, जिसमें कोड को फ़ंक्शन के माध्यम से स्पेलुनकिंग शामिल है, यह पता लगाने के लिए कि ऑब्जेक्ट कहाँ बनाया गया था।
फंकीब्रु

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

2
यहां तक ​​कि Google के जावा देवता भी जेएस लिखते समय अपना सिर जावा से बाहर नहीं निकाल सकते हैं। sitepoint.com/google-closure-how-not-to-write-javascript
Erik Reppen

3
आप लिखते हैं: जावास्क्रिप्ट जावा नहीं है और आपको जावास्क्रिप्ट को समझने के लिए अपना जावा स्वभाव बदलना होगा : केवल "परिपक्व" जावा प्रोग्रामर जावास्क्रिप्ट की सराहना कर सकते हैं ... इसलिए जावास्क्रिप्ट को समझने के लिए मुझे पहले जावा को मास्टर करना होगा, और फिर सभी के बारे में भूलना होगा यह?
कालेब

3

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


2

यह वह मूल्य है जो हम खराब टाइप की गई भाषाओं का उपयोग करने के लिए भुगतान करते हैं। कोई केवल आश्चर्य कर सकता है कि यह घृणा इतनी लोकप्रिय क्यों हो गई है। नुकसान अब तक खराब टाइप की गई भाषाओं के फायदों से ज्यादा है।

शायद हमें इस कबाड़ से गैर-सहयोग-सिद्धांत को लागू करना चाहिए ताकि इसे दूर किया जा सके।


3
"खराब टाइप की गई भाषाएं" - कई प्रोग्रामर आपसे असहमत होंगे।
शॉन मैकमिलन

7
+1, एकमात्र कारण जावास्क्रिप्ट लोकप्रिय है क्योंकि यह सही समय पर सही जगह पर था।
maple_shaft

2
अरे, तुम लोग सिर्फ इस बात से दुखी हो रहे हो कि Node.js के पास C ++ की बाइंडिंग है जावा के बजाय तुम नहीं हो?
एरिक रेपेने

1
मुझे यकीन नहीं है कि "खराब टाइप की गई भाषाओं" से क्या मतलब है। जावास्क्रिप्ट "खराब टाइप" नहीं है। यह गतिशील रूप से टाइप किया गया है, और ऑपरेशन के कारण टाइप कॉर्शन हो सकता है। भाषा को दोष न दें क्योंकि आपके संपादक / आईडीई को चर के प्रकार का पता नहीं है - आपको इसे वैसे भी जानना चाहिए।
रायन काइल

3
@RyanKinal सच में? आपको पता होना चाहिए सभी गुण और के तरीकों सभी अपने पूरे अनुप्रयोग के भीतर वस्तुओं और वर्गों, और अपनी भाषा के एपीआई का, और किसी भी पुस्तकालयों का उपयोग कर रहे, की है कि स्मृति से ? आपने संज्ञानात्मक भार को कम करके और आपको सोचने के लिए कम सामान देकर उत्पादकता में सुधार करने वाली IDE कोड-पूर्णता की धारणा को अस्वीकार कर दिया है?
फंकीब्रेल

2

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

जावास्क्रिप्ट के लिए मेरी पसंदीदा विचारधारा वेबस्टॉर्म है क्योंकि यह jQuery के इंट्रालस्टेक्स को काम करना आसान है (यह मुफ़्त नहीं है)।

इसके अलावा, मैं इसके बढ़ते - इसके सर्वव्यापी पहले से ही नहीं कहूंगा।

आपके विशिष्ट बिंदु:

फ़ंक्शन के प्रवेश बिंदु को खोजने का कोई तत्काल तरीका नहीं है

मुझे यह समझ में नहीं आता है, यह कैसे सरल हो सकता है?

पैरामीटर उस फ़ंक्शन पर पारित किए जाते हैं, जिसमें यह जानने का कोई तरीका नहीं है कि उस पैरामीटर पर क्या गुण और फ़ंक्शन उपलब्ध हैं

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

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

सामान्य उपयोग ? यदि आपको अनाम फ़ंक्शन पसंद नहीं हैं, तो उनका उपयोग न करें। या आप jQuery का जिक्र कर रहे हैं जो उन्हें काफी उपयोग करता है? jQuery को संभवतः अधिकांश वेब डेवलपर्स द्वारा वेब विकास के इतिहास में सबसे बड़ा समय बचाने वाला माना जाता है

JSLint रनटाइम से पहले कुछ त्रुटियों को पकड़ता है

यह उन सभी को पकड़ता है, आप इसे अपनी विचारधारा में शामिल कर सकते हैं । या वेबस्टॉर्म इसे डिफ़ॉल्ट रूप से शामिल करता है (मुझे लगता है)।


निष्पक्ष होने के लिए सर्वव्यापी और लोकप्रिय जरूरी समान नहीं हैं! ;-) वैसे भी, वेबस्टॉर्म जावास्क्रिप्ट के लिए एक उत्कृष्ट आईडीई है (और यद्यपि यह मुफ़्त नहीं है यह बहुत सस्ता है)। मैंने इसका उपयोग नहीं किया है, लेकिन मेरा मानना ​​है कि इंटेलीजे (जेटब्रेन्स से भी) में वही कार्यक्षमता है जो प्रासंगिक हो सकती है यदि आप एक जावा पृष्ठभूमि से हैं और एक एकल आईडीई का उपयोग करना चाहते हैं।
फिनकॉक

ठीक है शायद मुझे स्पष्ट करने की आवश्यकता है ... मेरा मतलब था "लोकप्रियता में बढ़ रहा है" ब्राउज़र / डीओएम के साथ विकास के संदर्भ में अधिक। यानी, इसका उपयोग किया जाता है जहां अन्य विकल्प उपलब्ध हैं। "फ़ंक्शन के प्रवेश बिंदु" से मेरा मतलब उस कोड में बिंदु का पता लगाना है, जिस पर एक फ़ंक्शन का उपयोग किया जाता है। पैरामीटर गुण: किसी आईडीई के लिए रनटाइम से पहले किसी दिए गए ऑब्जेक्ट के गुणों को जानने का कोई तरीका नहीं है! बेनामी फ़ंक्शन: मैं उन्हें पसंद नहीं कर सकता, लेकिन अन्य जिनके कोड को मुझे बनाए रखने की आवश्यकता है। उदाहरण के लिए, JSLint को नहीं पता है कि मैंने किसी दिए गए ऑब्जेक्ट की प्रॉपर्टी का नाम गलत लिखा है या नहीं
फंकीब्रिज

@funkybro "रनटाइम से पहले किसी दिए गए ऑब्जेक्ट के गुणों को जानने के लिए IDE के लिए कोई रास्ता नहीं है", बस विचारधारा में संदर्भित स्क्रिप्ट के रूप में "जो भी हो "MyObjectIs.js" शामिल है, और गलत तरीके से संपत्ति के नाम के लिए, वेबस्टॉर्म यह कोशिश करें (अगर मुझे ठीक से याद है)।
निमशिम्प्सकी

3
वहाँ नही है! इस कोड पर विचार करें: var myFunc = function(param) { ... }; var myObj1 = { fooProp: fooVal, barProp: barVal}; var myObj2 = { catProp: catVal, dogProp: dogVal}; myFunc(myObj1); myFunc(myObj2); कैसे कर सकते हैं पर एक IDE प्रस्ताव कोड पूरा होने myFuncके paramपैरामीटर? paramकिसी भी प्रकार की कोई भी वस्तु किसी भी गुण के साथ हो सकती है।
फंकीब्रिज

हां, लेकिन संभवत: आप जिन पैरामेट्स से गुजर रहे हैं, वे वास्तव में उस संदर्भ में उपलब्ध हैं। एक पार्सर अपने पूर्ण उड़ा जेएस दुभाषिया के बिना बाहर हल कर सकते हैं।
एरिक रेपेन

2

मुझे किसकी याद आ रही है?

जावा से अधिक जावास्क्रिप्ट के दो बड़े फायदे आपको याद आ रहे हैं:

  • जावास्क्रिप्ट कोड लगभग एक-चौथाई के बराबर जावा कोड है।
  • आपको कंपाइल और सर्वर रिस्टार्ट के लिए कभी इंतजार नहीं करना पड़ेगा।

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

मैंने जावा प्रोग्रामिंग को अपेक्षाकृत अनुत्पादक पाया है , और अब मैं ग्रूवी में अपने सभी सर्वर-साइड कोड को उन्हीं दो कारणों से लिख रहा हूं।


5
"जावास्क्रिप्ट कोड लगभग एक-चौथाई के बराबर जावा कोड का आकार है" <- यह समस्या है! यकीन है कि यह सिर्फ गुमनाम कार्यों को बनाने और वस्तुओं में अतिरिक्त गुण जोड़ने के लिए तेज़ है, और उन्हें कंफ़ेद्दी की तरह चारों ओर फेंक देना चाहिए। लेकिन जब कोई दूसरा आपके कोड पर जाता है और यह पता लगाने की कोशिश करता है कि क्या चल रहा है? इसके अलावा, जावा में अधिक कोड आवश्यक रूप से अधिक टाइपिंग के बराबर नहीं है ... ग्रहण आपके लिए इसके बारे में बहुत कुछ लिखता है।
फंकीब्र्स

3
@funkybro: ग्रहण इसे लिखता है ... तो मैं इसे परियोजना के जीवन के लिए पिछले देख रहा हूं। यदि यह आवश्यक है, लेकिन एक तुच्छ प्लगइन इसे उत्पन्न कर सकता है, यह एक भाषा गंध है। आप सही कह रहे हैं कि जावास्क्रिप्ट क्लासेस के लिए थोड़ा और प्रलेखन की आवश्यकता होती है। लेकिन सिर्फ जावा विधि हस्ताक्षर जानना पर्याप्त नहीं है।
केविन क्लाइन

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

1
क्या प्रतिबिंब जावा को रन-टाइम के दौरान वस्तुओं को संशोधित करने की अनुमति देता है? बंद के बारे में कैसे? इससे पहले कि आप इसकी आलोचना करें या जावा मान लें, असेंबली के बाहर सबसे बंद प्रतिमान भाषा इसका अनुकरण करने में सक्षम है।
एरिक रेपेने

1
डाउनवोटर्स: यह जावा बनाम जावास्क्रिप्ट पर जनमत संग्रह नहीं है। यह एक कारण के बिना पतन के लिए अशिष्ट है।
केविन क्लाइन

0

मुझे पता है कि यह सवाल पुराना है, लेकिन C ++ / C # प्रोग्रामर के रूप में, जिनके पास समान भावनाएं थीं, लेकिन जिन्होंने पिछले 10 वर्षों से बहुत सारे जावास्क्रिप्ट किए हैं, मेरी पहली सिफारिश विज़ुअल स्टूडियो कोड को देने की कोशिश होगी।

बेशक यह हर उस सुविधा की पेशकश नहीं कर सकता है जो एक जोरदार टाइप की गई भाषा के साथ जोड़ा जा सकता है लेकिन यह काफी करीब आता है।

यह टाइपस्क्रिप्ट से प्रकार की जानकारी भी ले सकता है और इसे जावास्क्रिप्ट पर लागू कर सकता है। यहां तक ​​कि अगर आप टाइपस्क्रिप्ट का उपयोग कभी नहीं करते हैं, तो आप जावास्क्रिप्ट में टाइप करते हुए एपीआई के टन पर कोड पूरा होने और प्रलेखन प्राप्त कर सकते हैं।

तो आपके सवालों के लिए

  • किसी फ़ंक्शन के प्रवेश बिंदु को खोजने का कोई तत्काल तरीका नहीं है (एक सादे पाठ खोज के अलावा, जिसके परिणामस्वरूप बाद में कॉल पदानुक्रम के तरीकों की खोज हो सकती है, दो या तीन के बाद आप भूल गए हैं कि आप कहाँ शुरू हुए थे)

ज्यादातर VSCode में हल लगता है?

  • पैरामीटर उस फ़ंक्शन पर पारित किए जाते हैं, जिसमें यह जानने का कोई तरीका नहीं है कि उस पैरामीटर पर क्या गुण और फ़ंक्शन उपलब्ध हैं

यह आपके कोड को JSDoc शैली टिप्पणियों या टाइपस्क्रिप्ट के साथ दस्तावेज़ करके कई IDE के लिए हल किया गया है। संपादक टिप्पणियों को पढ़ेंगे और आपको वही पूर्णता प्रदान करेंगे, जिसका आप उपयोग कर रहे हैं

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

C # प्रोग्रामर के रूप में अनाम फ़ंक्शंस सामान्य होते हैं और C ++ में जोड़े जाते हैं। मुझे लगता है कि यह कुछ ऐसा है जिसकी आपको आदत है।

हालांकि कॉलबैक को ज्यादातर वादों के साथ और async / इंतजार के साथ बदल दिया गया है और यदि आपके पास एक एपी है जो कॉलबैक का उपयोग करता है तो आप वादे का उपयोग करने के लिए इसे जल्दी से लपेट सकते हैं और फिर async / इंतजार का उपयोग कर सकते हैं ताकि समस्या दूर हो जाए।

और यकीन है, JSLint रनटाइम से पहले कुछ त्रुटियों को पकड़ता है, लेकिन यहां तक ​​कि ब्राउज़र में सीधे आपके कोड के तहत लाल लहराती रेखाओं के रूप में काम नहीं करता है।

आपको विजुअल स्टूडियो कोड में लहराती लाइनें मिलेंगी। इतना ही नहीं, लेकिन अगर आप ESLint एकीकरण चालू करते हैं, तो आपको अद्भुत चेतावनियाँ मिलेंगी और या आपके संपादक में त्रुटियां उजागर होंगी। वास्तव में मैंने अन्य भाषाओं के लिए देखा है। मेरा अनुभव C / C # / Java के लिए लिंटर है, जहां बहुत कठिन कोडित किया गया है जहां ESLint दोनों बड़े पैमाने पर विन्यास और व्यापक रूप से एक्स्टेंसिबल हैं और इस तरह के लोकप्रिय पुस्तकालय आपको संपादक में विशिष्ट पुस्तकालय उपयोग के बारे में सलाह और चेतावनी देने के लिए भी एकीकृत कर सकते हैं। ऐसा कुछ जो मैंने व्यक्तिगत रूप से अन्य भाषाओं में नहीं देखा है (हालाँकि शायद यह अब अन्य भाषाओं के लिए भी आम है?)

यह 2018 भी है और ES7 नया मानदंड है जिससे आपको मिलता है class। आप हमेशा सख्त मोड का उपयोग करें। आप कभी भी उपयोग नहीं करते हैं varऔर हमेशा उपयोग करते हैं constऔर letउन चीजों का एक गुच्छा है जो C ++ / C # / Java प्रोग्रामर के लिए एक कठिन समय था जो गायब होने की तरह इस्तेमाल किया जा रहा था। no-undefESLint में नियम को चालू करें और इससे भी अधिक मुद्दे गायब हो जाते हैं

यह कहा कि thisवास्तव में कैसे काम करता है और कैसे कार्य और तरीके वास्तव में काम करते हैं क्योंकि यह C ++ / C # / Java के समान नहीं है।

मेरे पहले 2-3 साल के जावास्क्रिप्ट से मुझे निराशा हो रही थी। कुछ बिंदु पर हालांकि यह क्लिक किया। मैंने इसे C ++ / C # / Java होने के लिए मजबूर करने की कोशिश करना बंद कर दिया है और अब मैं निराश हो जा रहा हूं, जब जावास्क्रिप्ट में 15 लाइन लेने वाली चीजों को उन अन्य भाषाओं में 150 लगेंगे।


-1

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

अनाम फ़ंक्शंस के लिए, मुझे पता है कि वे जावास्क्रिप्ट में सबसे शक्तिशाली विशेषता हैं और ऐसी भाषा में काम करने की कोशिश कर रहे हैं जो उनके पास नहीं है, इस बिंदु पर यह काफी दर्दनाक है।

यदि आप कुछ और चाहते हैं जो जावास्क्रिप्ट को संकलित कर सकते हैं तो विकल्प का एक गुच्छा है, CofffeeScript, Clojure और GWT सभी मन में कूद जाते हैं लेकिन अन्य हैं।


2
मैंने एक बार Aptana की कोशिश की, और यह वास्तव में बुरा है। इसमें ऑटो-इंडेंटेशन भी नहीं है और यह अन्य एक्लिप्स संपादकों द्वारा निर्धारित सभी प्रोजेक्ट सेटिंग्स को नष्ट कर देता है, जैसे कि मैं एक ही प्रोजेक्ट में एक्लिप्स और अप्टाना का उपयोग करता हूं तो कलरिंग और सामान।
जोनास

1
मैंने इसे थोड़ी देर के लिए इस्तेमाल किया और इससे नफरत की, लेकिन जैसा कि मैंने कहा कि मुझे आईडीई के आईटम से नफरत है, मैं कमांड लाइन टूल द्वारा फॉर्मेट करता हूं और जीवीआईएम या एमएसीएस (जो मैं कर रहा हूं, उसके आधार पर) में एडिट करता हूं
Zachary K

पहले कुछ घंटों में क्रैश और मेरे पास मुट्ठी भर फाइलों के अलावा कुछ नहीं है? टाटा।
एरिक रेपेने

वेबस्टॉर्म खराब नहीं है। मैं अभी भी ज्यादातर समय Scite का उपयोग करता हूं, लेकिन Node.js सामान लिखते समय IDE चीज़ को अधिक महसूस करना शुरू कर देता हूं और मुझे दृश्य ब्राउज़र प्रतिक्रिया और देव टूल्स का लाभ नहीं है।
एरिक रेपेन

-1

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

आप दोनों ऑनलाइन सर्विस मॉडल के लिए जा सकते हैं या इसे GitHub से डाउनलोड कर सकते हैं।

और एक IDE के रूप में इसकी गुणवत्ता के सबूत के रूप में, Cloud9 का उपयोग करके लिखा गया था ... Cloud9!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.