2012-01-10 13 views
10

मैं MATLAB एप्लिकेशन लिख रहा हूं जिसमें कई फ़ंक्शंस अलग-अलग फ़ाइलों पर फैले हुए हैं। मेरे पास एक लॉगर है, जो फ़ंक्शन पॉइंटर वाला एक स्ट्रक्चर है, और मैं उपयोगकर्ता को देखने के लिए जानकारी लॉग इन करने के लिए इसका उपयोग करता हूं (यानी, कौन सा फ़ंक्शन वर्तमान में निष्पादित कर रहा है, गणना परिणाम इत्यादि)। कारण मैं अपने लॉगर के लिए एक स्ट्रक्चर का उपयोग करता हूं और बस fprintf() नहीं है कि मैं इसे भविष्य में एक्सएमएल लॉगर, एचटीएमएल लॉगर इत्यादि के साथ आसानी से बदल सकता हूं।MATLAB के वैश्विक चर के लिए सर्वोत्तम विकल्प

चूंकि मेरा कोड एक-दूसरे को कॉल करने वाले कई कार्यों से बना है, इसलिए मैंने अपनी लॉगर संरचना को वैश्विक के रूप में घोषित किया है, इसलिए मुझे इसे अपने सभी कार्यों में पारित करने की आवश्यकता नहीं है। हालांकि, हर जगह मुझे लगता है कि मैं देखता हूं कि वैश्विक चर MATLAB में बुरे अवतार हैं और मेरे कार्यक्रम को काफी धीमा कर देंगे।

क्या इनपुट पैरामीटर के रूप में उन्हें आवश्यक रूप से गुजरने के बिना और गंभीर प्रदर्शन दंड से पीड़ित किए बिना फ़ाइलों में चर उपलब्ध कराने का कोई तरीका है?

+0

वैश्विक युद्ध "बुराई" नहीं हैं। यदि आप एक अनुभवी प्रोग्रामर नहीं हैं, जैसे कि अन्य वर्र्स इत्यादि को ओवरलोड करना, तो वे सिर्फ कई त्रुटियां बना सकते हैं। साथ ही, मुझे विश्वास नहीं है कि मैटलैब में ग्लोबल्स के लिए प्रदर्शन हिट है। यदि ग्लोबल्स का उपयोग करना आपके जीवन को "बेहद आसान" बनाता है, तो उनका उपयोग करें। बस इसे आदत बनाने की कोशिश न करें। – Jorge

+1

@ जॉर्ज किसी भी प्रोग्रामर, न सिर्फ अनुभवहीन लोगों को। लेकिन अन्यथा, हाँ। –

+0

@ जॉर्ज - विधियों के लिए ग्लोबल्स बनाम गुजरने वाले चर का उपयोग करने के लिए आपके मानदंड क्या हैं? – dzisner

उत्तर

9

आप फ़ाइल के अंदर लगातार कीवर्ड का उपयोग भी कर सकते हैं, और वहां लॉगजर आवंटित कर सकते हैं।
यह C12+ में स्थिर कीवर्ड के कुछ तरीकों से समान है। यह सिंगलटन पैटर्न का कार्यान्वयन भी है।

function CallLogger(st) 
    persistent logger; 
    if isempty(logger) 
     %Allocate new logger 
    end 
    logger.disp(st); 
end 

क्योंकि
1. कोई भी आपकी जानकारी के बिना आपके लकड़हारा नष्ट कर सकते हैं यह वैश्विक से बेहतर है।
2. कोई भी इस ऑब्जेक्ट के बारे में नहीं जानता है, क्योंकि यह फ़ंक्शन स्कोप तक सीमित है

वैसे, मैं इस बात से सहमत नहीं हूं कि वैश्विक प्रदर्शन का मुद्दा है। सॉफ्टवेयर इंजीनियरिंग के मामले में यह एक अच्छा अभ्यास नहीं है।

+0

हाय @ एंड्री, जिस तरह से मैं इसे देखता हूं, लगातार चर सी/सी ++ में "स्थैतिक" चर के बराबर होते हैं, इसलिए वे फ़ंक्शन स्कोप के अंदर मौजूद होते हैं, न कि फ़ंक्शंस में, सही? – dzisner

+0

धन्यवाद एंड्री, आपका जवाब बहुत अच्छा है। मैंने अच्छे अभ्यास और प्रदर्शन दोनों के लिए जितना संभव हो उतना ग्लोबल्स से दूर जाने का फैसला किया। धन्यवाद!! – dzisner

2

फ़ंक्शन में लगातार चर का आह्वान करने से बेहतर (उदाहरण के लिए, यदि आप सहेजते हैं और फिर अपने वर्कस्पेस को फिर से लोड करते हैं तो सहेजा नहीं जाएगा) फ़ंक्शन + स्ट्रक्चर से ऑब्जेक्ट में स्थानांतरित होना होगा: यानी, आपको देखना चाहिए MATLAB के ऑब्जेक्ट उन्मुख प्रोग्रामिंग।

+0

क्या आप एक नई कक्षा बनाने का जिक्र कर रहे हैं जो MATLAB हैंडल क्लास को प्राप्त करता है? – wherestheforce

+0

हां: बिल्कुल यह। – lsfinn

संबंधित मुद्दे