में सी-स्टाइल मैक्रोज़ मैं एक सप्ताह के लिए खेल रहा हूं और सी से कुछ याद करता हूं प्रीप्रोसेसर मैक्रोज़ है।गो
इस सुविधा को पाने के लिए मैं क्या उपयोग कर सकता हूं, एक बिल्ड स्क्रिप्ट हैकिंग के अलावा जो पाइप clang -E
के माध्यम से फाइलें चलाते हैं?
में सी-स्टाइल मैक्रोज़ मैं एक सप्ताह के लिए खेल रहा हूं और सी से कुछ याद करता हूं प्रीप्रोसेसर मैक्रोज़ है।गो
इस सुविधा को पाने के लिए मैं क्या उपयोग कर सकता हूं, एक बिल्ड स्क्रिप्ट हैकिंग के अलावा जो पाइप clang -E
के माध्यम से फाइलें चलाते हैं?
जैसा कि टिप्पणियों में बताया गया है, झंडे का निर्माण शायद आपको जो भी चाहिए उसे हल करने का सबसे अच्छा तरीका है। उदाहरण के लिए, यदि आप विकास में ही उपलब्ध कुछ सुविधाओं को करना चाहते थे, एक dev
ध्वज का उपयोग करें:
फ़ाइल constants_dev.go:
// +build dev
const DEVELOPMENT = true
फ़ाइल constants_pro.go
// +build !dev
const DEVELOPMENT = false
तब में
अपने कोड, बस एक साधारण if DEVELOPMENT { blah... }
करें। मुझे यह किसी भी प्रीप्रोसेसर की तुलना में बहुत अधिक पठनीय लगता है। यदि आपके पास बहुत सारे निर्माण झंडे हैं, तो यह काफी गन्दा हो सकता है, लेकिन उस बिंदु पर आपको शायद कमांड-लाइन तर्कों का उपयोग करना चाहिए।
आपकी टिप्पणी में, आपने कोड के दोहराव का उल्लेख किया है। यदि आपका कोड वास्तव में दोहराया गया है, तो आपको शायद इसे किसी फ़ंक्शन में डालना चाहिए, या दोहराए गए बिट्स का पुन: उपयोग करने के लिए संभावित रूप से कोड को पुन: स्थापित करना चाहिए। निजी तौर पर, मुझे लगता है कि सरल बूलियन चेक से परे कुछ भी कोड को बनाए रखने के लिए मुश्किल से समाप्त होता है, खासकर सी-स्टाइल मैक्रोज़ के साथ।
जेनिक्स के साथ यह वही बात है। मैं का उपयोग किया है एक जावा पुस्तकालय में, वर्ग हस्ताक्षर कुछ इस तरह था:
class Thing<A, B, C, D, E>
पुस्तकालय बहुत अच्छी तरह से दर्ज नहीं किया गया था, तो मैं कोड का एक महत्वपूर्ण राशि (दोनों कार्यान्वयन और कोड को पढ़ने के लिए किया था कि क्या चल रहा था यह समझने के लिए पुस्तकालय का उपयोग करता है)।
गो में, भाषा एक ऐसी शैली को मजबूर करती है जो आमतौर पर बेहतर, स्वयं-दस्तावेज़ कोड की ओर ले जाती है। मुझे लगता है कि गो डेवलपर्स को प्रीप्रोसेसर और जेनेरिक जैसी चीज़ों को छोड़ दिया गया ताकि वे बनाए रखने के लिए कड़ी मेहनत करने के लिए प्रलोभन से बच सकें, लेकिन चालाक, कोड।
मैं आपको पुरानी मुहावरों पर वापस देखने से पहले गो रास्ता खोजने की सलाह दूंगा जो आपने पहले उपयोग किया था। मुझे लगता है कि आप पाएंगे कि अधिकांश मैक्रोज़ और # डिफाइन का उपयोग बड़े पैमाने पर अप्रासंगिक है।
मुझे लगता है कि सीपीपी, एम 4 या जो भी प्री प्रीपेक्सेस्ड होने की आपकी इच्छा पूरी कर सकता है। यदि यह एक अच्छा विचार है या नहीं, तो आपका निर्णय है, लेकिन चेतावनी दी जानी चाहिए कि किसी भी प्रीप्रोकैसिंग किसी भी प्रकाशित गो कोड को अपनाने के लिए पर्याप्त बाधा है। (और उदाहरण के लिए, मेकफ़ाइल पर निर्भर होने वाला निर्माण एक ही कहानी है।)
मुझे लगता है कि आप गो के कुछ दर्शन को याद करते हैं। उदाहरण के लिए स्पष्टता का महत्व। –
बेशक स्पष्टता महत्वपूर्ण है, लेकिन मुझे नहीं लगता कि कई बार दोहराव स्पष्टता के लिए एक ही कोड बेहतर है। –
यदि आप जो कुछ हासिल करने की कोशिश कर रहे हैं उसका एक उदाहरण देते हैं, तो संभवतः ऐसा करने के लिए एक और "जाने" तरीका है। – Chris