डायनेमिक भाषा में लिखे गए कोड को आप कैसे नेविगेट और रिफ्लेक्टर करते हैं?


14

मुझे यह पसंद है कि पायथन, रूबी या जावास्क्रिप्ट लिखना बहुत कम बॉयलरप्लेट की आवश्यकता है। मुझे सरल कार्यात्मक निर्माण पसंद हैं। मुझे साफ और सरल वाक्य रचना पसंद है।

हालाँकि, तीन चीजें हैं जो एक गतिशील भाषा में एक बड़े सॉफ्टवेयर को विकसित करते समय मैं वास्तव में खराब हूं:

  • कोड नेविगेट करना
  • उन वस्तुओं के इंटरफेस की पहचान करना जो मैं उपयोग कर रहा हूं
  • कुशलता से रिफलेक्ट करना

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

रीफैक्टरिंग के लिए, उदाहरण के लिए विधि के नाम बदलने के लिए, यह मेरी इकाई परीक्षणों की गुणवत्ता पर निर्भर करता है। और यदि मैं अपने यूनिट परीक्षणों को बाकी एप्लिकेशन को "काटकर" अलग करने की कोशिश करता हूं, तो इस बात की कोई गारंटी नहीं है कि मेरे स्टब का इंटरफ़ेस उस ऑब्जेक्ट के साथ अद्यतित रहता है जिस पर मैं ठोकर खा रहा हूं।

मुझे यकीन है कि इन समस्याओं के लिए समाधान हैं। आप पायथन, रूबी या जावास्क्रिप्ट में कुशलता से कैसे काम करते हैं?


प्यदेव की नाम बदलने की विशेषताओं ने मेरे लिए अब तक बहुत अच्छा काम किया है।

जवाबों:


3

कोड नेविगेट करना

VIM से बेहतर संपादक पाएं।

मैं कोमोडो एडिट का उपयोग करता हूं।

मुझे ऐसा लगता है कि मुझे याददाश्त के लिए बहुत कुछ करना है

अच्छा। सोच अच्छी है। मुझे लगता है कि "सीखने" अंततः "स्मृति" की ओर जाता है।

लगातार "grep" और इंटरफेस की पहचान करने के लिए कोड के माध्यम से पढ़ें।

यह विशिष्ट है। यदि आप उन्हें याद नहीं कर सकते हैं, तो वे बहुत जटिल हैं, वे नहीं हैं? सरल करने का समय।

सरल बनाना कठिन है। लेकिन जब आपको याद रखने में परेशानी होती है, तो यह खराब डिजाइन का लक्षण है।

मैं grep का उपयोग करता हूं। इससे मेरा काम बनता है। मेरे कोमोडो एडिट में बहुत अच्छी खोज है। तो नोटपैड ++ करता है

उन वस्तुओं के इंटरफेस की पहचान करना जो मैं उपयोग कर रहा हूं

डॉक्टर स्ट्रिंग्स और help()फ़ंक्शन काम करते हैं। मैं उनका उपयोग करता हूं। रोज।

कुशलता से रिफलेक्ट करना ... यह मेरी इकाई परीक्षणों की गुणवत्ता पर निर्भर करता है।

यह खबर नहीं है। यह हमेशा सच है, यहां तक ​​कि एक स्थिर भाषा में भी।

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


मुझे यकीन है कि इन समस्याओं के लिए समाधान हैं।

ये "समस्याएँ" नहीं हैं और इन्हें "वर्कआर्ड" की आवश्यकता नहीं है।


एक गतिशील भाषा ठीक उसी प्रकार के बारे में है जो आपके द्वारा हेरफेर की गई वस्तुओं के प्रकार को नहीं जानती है। जब आप एक पैरामीटर प्राप्त करते हैं, तो आप यह मानते हैं कि यह एक "क्वैक ()" और एक "पंख ()" विधि को परिभाषित करता है, लेकिन आप नहीं जानते कि जहां प्रलेखन है (वास्तव में, उनके कई कार्यान्वयन में कई डॉकस्ट्रिंग होंगे)।

"वस्तुओं के प्रकार को नहीं जानना"? वास्तव में। जब मैं किसी ऑब्जेक्ट के क्लाइंट को डिजाइन करता हूं, तो मुझे पता होता है कि मैंने किस प्रकार का डिजाइन किया है।

जब मैं एक सेवा, कई ग्राहकों द्वारा इस्तेमाल किया परिभाषित करते हैं, "सटीक" प्रकार नहीं प्रासंगिक है, जब मैं का एक परिभाषित आवश्यक इंटरफ़ेस है quack()और feathers()

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

>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)

बहुत मुश्किल नहीं लगता - कम से कम पायथन में - एक वस्तु के प्रकार को खोलना। गतिशील भाषाओं में एक REPL होना चाहिए, जिससे यह देखना बहुत आसान हो जाए कि क्या चल रहा है।

आप अपेक्षित पैरामीटर आदेश नहीं जानते हैं। आईडीई के लिए वहां मदद करना कठिन लगता है।

यह बहुत मतलब नहीं है। help()काम करता है।

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


6
मुझे ऐसा लगता है कि मैं तर्क दे सकता हूं कि याददाश्त के लिए अधिक मजबूर होने से आपको सोचने की क्षमता कम हो जाती है ...
निकोल

@ संदर्भ: इंटरफेस के लिए किसी भी तरह का पैटर्न या सिस्टम होने पर याद रखना बुराई नहीं है।
एस.लॉट 21

1
मैं मानता हूं @ रेनेसिस इंटरसेप्टर को याद करने से मेरा दिमाग वास्तविक सोच से दूर हो जाता है। मैं कम परवाह नहीं कर सकता था कि मेरी टीम के एक अन्य कोडर ने कैसे मापदंडों का आदेश दिया। यह तथ्य कि एक बड़ा कोडबेस विभिन्न नामकरण मानकों के साथ बहुत से विभिन्न पुस्तकालयों का उपयोग करता है, यह निराला नहीं है, और इन घटकों को सरल या एकीकृत करने के लिए अक्सर असंभव या अव्यवहारिक होता है।
फिलिप बेयॉइन

पुन :: डॉक्टर तार, वे ठीक हैं जब आप वस्तु के प्रकार को जानते हैं, लेकिन अक्सर आप नहीं करते हैं और आपको यह देखना होगा।
फिलिप बीडॉइन 23

1
grr ... विम: पी
एंटो

2

एक त्वरित खोज रूबी ( रूबी के लिए साक्षात्कार ) और पायथन के लिए साइकिल की मरम्मत करने वाले व्यक्ति के लिए Rfactor बन गई। निश्चित नहीं कि दोनों कितने अच्छे हैं ... लेकिन वे देखने लायक हैं।


1

एक कंपनी है - JetBrains - ReSharper, TeamCity और IDEA के लेखक। उन्होंने हाल ही में गतिशील भाषाओं को देखना शुरू किया और पहले से ही पायथन, पीएचपी और रूबी के लिए अपने उपकरण जारी किए।

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

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