अन्य, यदि आप कर सकते हैं तो अधिक सुरुचिपूर्ण समाधान बेहतर हो सकते हैं, स्ट्रिंग मिश्रित बेहद उपयोगी हो सकते हैं। वे दोनों कोड पुन: उपयोग और कोड पीढ़ी के लिए अनुमति देते हैं। वे संकलन समय पर जांच कर रहे हैं। परिणाम जो कोड बिल्कुल वैसा ही है जैसा आपने इसे हाथ से लिखा है, इसलिए यदि आप इसे हाथ से लिख चुके हैं तो यह कम सुरक्षित नहीं है।
स्ट्रिंग मिश्रणों के साथ समस्या यह है कि हाथ में लिखे गए कोड से उन्हें नियंत्रित करना कठिन होता है, यह समझ में आता है कि यह आपके स्रोत में शारीरिक रूप से नहीं रखा गया है, साथ ही रेखा संख्या स्पष्ट रूप से त्रुटियों के लिए पता लगाने योग्य है, और यह हो सकता है डीबग करने के लिए कठिन है। उदाहरण के लिए, एक स्ट्रिंग mixin साथ नमस्ते दुनिया ले:
import std.stdio;
void main()
{
mixin(hello());
}
string hello()
{
return "
writeln(\"hello world\");
";
}
हम writeln()
के बाद अर्धविराम दूर करने के लिए थे, तो त्रुटि हमारे पास
d.d(7): found 'EOF' when expecting ';' following statement
mixin लाइन 5 पर किया जाता है होगा। रेखा 7 एक खाली रेखा है। तो, रेखा संख्या यहां सीमित उपयोगिता है। अब, यह मिश्रण इतना छोटा है कि हम इसे एक पंक्ति पर डाल सकते थे और यह कहने के लिए प्राप्त कर सकते थे कि त्रुटि मिश्रण के समान रेखा पर थी, लेकिन अधिक जटिल मिश्रित के साथ, यह स्पष्ट रूप से काम नहीं करेगा। तो, एक स्ट्रिंग मिश्रण का उपयोग करके, यह पता लगाने की आपकी क्षमता है कि त्रुटि कहां खराब है।यदि कोड सीटीएफई का उपयोग करके जेनरेट किया गया है, तो यह पता लगाने के लिए कि यह क्या गलत है, यह पता लगाने के लिए यह भी उतना ही मुश्किल हो जाएगा कि कोड कैसा दिखता है। यह पता लगाने की तरह है कि सी-स्टाइल मैक्रो किस कोड में बदल जाता है, सिवाय इसके कि यह बदतर हो सकता है क्योंकि उन्हें सीधे प्रतिस्थापन के बजाय उत्पन्न किया जा सकता है। हालांकि, वे स्पष्ट रूप से उन्हें कहने के अलावा उन्हें प्रतिस्थापित नहीं करते हैं, इसलिए वे सी-शैली मैक्रोज़ से कहीं अधिक सुरक्षित हैं।
स्ट्रिंग मिश्रण पूरी तरह से सुरक्षित हैं, और उनके साथ विशेष रूप से कुछ भी गलत नहीं है, लेकिन वे कुछ तरीकों से रखरखाव को कठिन बनाते हैं। इसी तरह के हाथ से लिखित कोड डीबग करना आसान होगा। हालांकि, स्ट्रिंग मिश्रित पर्याप्त शक्तिशाली हैं कि वे आपके लिए बहुत सी कोड जनरेशन कर सकते हैं और आपको उस भावना में बहुत से रखरखाव लागतों को बचा सकते हैं, और वे आपको कोड का फिर से उपयोग करने की अनुमति देते हैं, जो एक बड़ा रखरखाव लाभ भी हो सकता है।
तो, एक स्ट्रिंग मिश्रण का उपयोग करना एक विशेष स्थिति में एक अच्छा विचार है उस स्थिति पर निर्भर करता है। मुझे उनके साथ विशेष रूप से कुछ भी गलत नहीं दिख रहा है, और मैं निश्चित रूप से उन्हें एक विरोधी पैटर्न नहीं कहूंगा, लेकिन इन दोनों का उपयोग करने के लिए पेशेवर और विपक्ष दोनों हैं जैसे कि वे एक अच्छा विचार हैं कि आप क्या कर रहे हैं । कई मामलों में, अधिक सुरुचिपूर्ण, क्लीनर समाधान हैं जो बेहतर होंगे। दूसरों में, वे वही हैं जो डॉक्टर ने आदेश दिया था।
व्यक्तिगत रूप से, मुझे लगता है कि यदि आप कोड उत्पन्न करना चाहते हैं तो वे शानदार हैं, स्वयं को उस कोड को हाथ से लिखने का प्रयास सहेजना, और संभवतः विभिन्न स्थितियों के लिए सही कोड उत्पन्न करना आसान बनाना और आपके जैसे नई बग बनाने के जोखिम से बचने से आपने उन सभी स्थानों में खुद को लिखा होगा जहां आपने मिश्रण का उपयोग किया था। यह फंक्शन कॉल की लागत या सिंगल-विरासत की सीमाओं के साथ मुद्दों या किसी भी चीज को कॉल या फिर विरासत को कड़ी मेहनत करके कोड का पुन: उपयोग करने के बारे में चिंता किए बिना कोड का पुन: उपयोग करने के तरीकों में से एक है। आप बस प्रत्येक स्थान पर कोड को प्रतिलिपि बनाकर चिपका रहे हैं जिससे यह सुनिश्चित हो जाता है कि यदि आप कोड बदलते हैं, तो परिवर्तनों को ठीक से चिपकाया जाएगा, बिना आपको उन सभी को ट्रैक करने के बारे में चिंता किए बिना, जैसे कि आपके पास हाथ की प्रतिलिपि थी और चिपकाया।
तो, जहां उचित हो वहां स्ट्रिंग मिश्रित का उपयोग करें, और यदि संभव नहीं है तो इसका उपयोग न करना सबसे अच्छा है, लेकिन इनका उपयोग करने में वास्तव में कुछ भी गलत नहीं है।
* स्नीफ * मैं दिल तुम, जीप। यह वास्तव में आपके अधिक भयानक विचारों में से एक है। –
प्रत्येक विश्वसनीय अर्ध-साफ चाल जैसे कि तीन या चार विचार हैं जो केवल सादे _horrible_ हैं - जैसे कि सीटीएफई टेक्स्ट-आधारित राज्य मशीन ग्राफ़ पार्सर टूल्स में गहरी दफन की गई है :) – FeepingCreature