मैं एक साधारण एन्क्रिप्शन अभ्यास के लिए रूबी कोड लिख रहा हूं और अक्सर इस दुविधा में रहता हूं (यदि आप जानते हैं तो व्यायाम एक सॉलिटेयर सिफर है)। यह एक प्रश्न है कि क्या मुझे वर्णनात्मक चर और एकल कदम बयानों के साथ अपने तर्क को छोड़ देना चाहिए जो फ़ंक्शन को संक्षिप्त के बजाय पठनीय बनाते हैं, यहां तक कि घने बयान भी जो दोहराव को खत्म करते हैं और / या त्रुटियों के अवसरों को कम करते हैं।
मेरा सबसे हालिया उदाहरण: मेरा कार्यक्रम इनपुट लेता है, और कठोर प्रारूप दिशानिर्देशों के कारण, यह आसानी से निर्धारित कर सकता है कि इनपुट एन्क्रिप्ट किया जाना चाहिए या डिक्रिप्ट किया जाना चाहिए। सरल करने के लिए, एक बार एन्क्रिप्शन कुंजी और संदेश परिवर्तित होने / संगत होने के लिए उत्पन्न होने के बाद, यह एन्क्रिप्टेड संदेश से कुंजी को हटाने या एक अनएन्क्रिप्टेड संदेश में कुंजी को जोड़ने की बात है, वांछित आउटपुट प्राप्त करने के लिए (एन्क्रिप्शन के रूप में कुंजी के बारे में सोचो) संदेश + एन्क्रिप्शन = कोड; कोड - एन्क्रिप्शन = संदेश)। DRY स्थिति मुझसे कहती है कि मुझे अपने एन्क्रिप्टेड संदेश को अपने अनएन्क्रिप्टेड संदेश से अलग तरीके से परिवर्तित करना चाहिए ताकि जो फ़ंक्शन एन्क्रिप्शन कुंजी लेता है और संदेश पर लागू होता है उसे कभी भी भेद करने की आवश्यकता नहीं होती है। मैंने पाया है कि इसका मतलब है कि फ़ंक्शन में स्टेटमेंट्स पर कुछ नेस्टेड हैं, लेकिन तर्क ठोस प्रतीत होता है। हालाँकि, यह कोड आसानी से पढ़ने योग्य नहीं है।
मैं दूसरी ओर, दो अलग-अलग कार्यों को लिख सकता हूं, जिन्हें एक ध्वज के आधार पर कहा जाता है जो तब सेट होता है जब एप्लिकेशन एन्क्रिप्शन या डिक्रिप्शन निर्धारित करता है। यह पढ़ने में सरल होगा लेकिन एन्क्रिप्शन कुंजी को संदेश पर लागू करने के उच्च स्तर के फ़ंक्शन को डुप्लिकेट करेगा (इसके कारण इसे एन्क्रिप्ट या डिक्रिप्ट किया जाएगा)।
क्या मुझे पठनीय कोड, या संक्षिप्त कोड की ओर झुकना चाहिए? या क्या मैंने इस कार्यक्षमता को प्राप्त करने और दोनों सिद्धांतों को संतुष्ट करने का एक और तरीका याद किया है? क्या यह उस पैमाने के साथ एक स्थिति है जिसमें किसी को परियोजना के उद्देश्य पर विचार करना चाहिए और उस उद्देश्य की पूर्ति के लिए सर्वोत्तम निर्णय लेने चाहिए?
अब तक, मैं संक्षिप्त, जोर देने योग्य कोड पर DRY कोड पर जोर देता हूं।