मेरे अनुभव से, मैक्रो लोगों पर सबसे अच्छा प्रभाव बनाने के लिए जब वे देखें कि यह कैसे कोड, कि प्रक्रियाओं या अन्य निर्माणों से नहीं बनाया जा सकता उत्पादन करने के लिए मदद करता है। अक्सर इस तरह की चीजों को वर्णित किया जा सकता है:
<common code>
<specific code>
<other common code>
जहां <common code>
हमेशा समान होता है। यहां इस तरह के स्कीमा के कुछ उदाहरण दिए गए हैं:
1. time
मैक्रो। मैक्रो के बिना एक भाषा में कोड कुछ इस तरह दिखेगा:
int startTime = getCurrentTime();
<actual code>
int endTime = getCurrentTime();
int runningTime = endTime - startTime;
आप नहीं, प्रक्रिया के लिए सभी आम कोड डाल सकते हैं, क्योंकि यह वास्तविक कोड इर्द-गिर्द घूमती। (ठीक है, यदि आप भाषा का समर्थन करते हैं, तो आप लैम्बडा फ़ंक्शन में एक प्रक्रिया बना सकते हैं और वास्तविक कोड पास कर सकते हैं, लेकिन यह हमेशा सुविधाजनक नहीं होता है)।
और, जैसा कि आप सबसे शायद जानते हैं, लिस्प में आप सिर्फ time
मैक्रो बनाते हैं और इसे करने के लिए वास्तविक कोड पारित:
(time
<actual code>)
2. लेन-देन। पूछो जावा प्रोग्रामर JDBC के साथ सरल SELECT
के लिए विधि लिखने के लिए - यह संबंध और लेनदेन को खोलने के लिए 14-17 लाइनों लेने के लिए और कोड शामिल होंगे, उन्हें बंद करने के लिए, कई नेस्टेड try-catch-finally
बयानों और अद्वितीय कोड का केवल 1 या 2 लाइनों।
लिस्प में आप बस with-connection
मैक्रो लिखें और कोड को 2-3 लाइनों तक कम करें।
3. तुल्यकालन। ठीक है, जावा, सी # और अधिकांश आधुनिक भाषाओं में पहले से ही इसके लिए बयान हैं, लेकिन अगर आपकी भाषा में ऐसा कोई निर्माण नहीं है तो क्या करें? या यदि आप STM-आधारित लेनदेन जैसे नए प्रकार के सिंक्रनाइज़ेशन को पेश करना चाहते हैं? दोबारा, आपको इस कार्य के लिए अलग-अलग वर्ग लिखना चाहिए और मैन्युअल रूप से इसके साथ काम करना चाहिए, यानी प्रत्येक कथन के चारों ओर सामान्य कोड डालें जिसे आप सिंक्रनाइज़ करना चाहते हैं।
केवल कुछ उदाहरण था। आप उल्लेख कर सकते हैं with-open
श्रृंखला की तरह मैक्रो "नहीं करने के लिए भूल जाते हैं", कि सफाई पर्यावरण और संसाधन लीक, कई if
रों के बजाय cond
जैसे नए निर्माणों मैक्रो से बचाने के लिए, और, ज़ाहिर है, आलसी निर्माणों के बारे में भूल नहीं है जैसे if
, or
और and
, जो उनके तर्कों का मूल्यांकन नहीं करते हैं (प्रक्रिया अनुप्रयोग के विपरीत)।
कुछ प्रोग्रामर वकील हो सकते हैं कि उनकी भाषा में इस या उस मामले (ओआरएम, एओपी, आदि) का इलाज करने की तकनीक है, लेकिन उनसे पूछें, क्या मैक्रोज़ मौजूद होने पर इन सभी तकनीकों की आवश्यकता होगी?
तो, इसे पूरी तरह से लेना और मैक्रोज़ को समझाने के तरीके के बारे में मूल प्रश्न का उत्तर देना। जावा (सी #, सी ++, आदि) में किसी भी व्यापक रूप से इस्तेमाल किए गए कोड को ले जाएं, इसे लिस्प में बदलें और फिर इसे मैक्रो के रूप में फिर से लिखें।
संबंधित: http://stackoverflow.com/questions/267862/what-makes-lisp-macros-so- विशेष – jball
मुझे लगता है कि मैक्रोज़ के लिए सर्वोत्तम परिचय में से एक है [प्रैक्टिकल कॉमन लिस्प] (http: // gigamonkeys.com/book/practical-a-simple-database.html)। यह पहले अध्यायों में से एक है, इसलिए यह बहुत अधिक नहीं लगता है, और यह इतना लंबा नहीं है। पूरी किताब महान है, किसी के लिए अत्यधिक अनुशंसा की जाती है, "जेनेरिक" प्रोग्रामर या नहीं (सामान्य प्रोग्रामिंग पर अध्याय भी हैं!)। _forgot_ के लिए – spacemanaki