2010-07-25 10 views
6

मैं हमेशा सार्वजनिक कार्यों के तर्कों की जांच करता हूं और कुछ गलत होने पर अपवाद फेंक देता हूं। (निजी सहायकों के लिए मैं दावे का उपयोग करता हूं)।स्वचालित अवैध अवैध अभिव्यक्ति संदेश?

इस तरह

:

if(a < 0 || a >= b) 
    throw new IllegalArgumentException("'a' must be greater or equal to 0 and 
     smaller than b "); 

लेकिन यह हमेशा मुझे गुस्सा दिलाती है ये त्रुटि संदेश लिखने के लिए। संदेश, मेरे लिए बेमानी लगता है के रूप में संदेश सिर्फ बयान

a < 0 || a >= b 

का निषेध है।

यह अक्सर होता है कि मैं परिवर्तनीय का नाम बदलकर (ग्रहण में) करता हूं और फिर संदेश परिवर्तनों को प्रतिबिंबित नहीं करता है। या मैं शर्तों को बदलता हूं और संदेशों को बदलना भूल जाता हूं।

यह बहुत अच्छा है कि अगर मैं कुछ ऐसा लिख ​​सकता होगा:

assertArgument(a >= 0 && a < b); 

इस तरह

"violated argument assertion: a >= 0 && a < b." 

एक संदेश के साथ एक IllegalArgumentException उठाना चाहिए सी में आप सी में वास्तव में एक मैक्रो लिख सकता है (जोर सिर्फ एक मैक्रो है)। क्या जावा में ऐसा कुछ करने का कोई आसान तरीका है?

धन्यवाद!

+0

आप निर्माण के दौरान जावा कोड उत्पन्न कर सकता है ... लेकिन दर्द इसके लायक नहीं है। आपकी समस्या घातक नहीं है - जब तक आप एक लाइन आईडी कर सकते हैं, तो आप ठीक रहेगा। कोड के माध्यम से जाने और असंगतताओं की जांच करने के लिए आप पाइथन लिपि भी लिख सकते हैं। –

+1

एक सहायक फ़ंक्शन 'चेकपैम (पैरा, पैरानामनाम' बनाने के बारे में कैसे? फिर, जब आप चर का नाम बदलते हैं, तब भी आप चेकपैम के सभी उदाहरणों को देखने के लिए एक त्वरित पायथन स्क्रिप्ट को जोड़ सकते हैं, और सुनिश्चित कर सकते हैं कि वे कोशेर हैं। शायद इस विचार पर कोई और विस्तार कर सकता है। –

+0

आप डीबग मोड में प्रतिबिंब का भी उपयोग कर सकते हैं। –

उत्तर

3

सी भाषा में आप ऐसा करने के लिए मैक्रोज़ का उपयोग नहीं कर सकते हैं, लेकिन सीपीपी (सी प्रीप्रोसेसर) में आप कर सकते हैं :-) यदि आप वास्तव में ऐसा करना चाहते हैं तो ऐसा कुछ भी नहीं है जो आपको अपने जावा स्रोत पर सीपीपी चलाने से रोकता है यह संकलित हो जाता है। इससे आपको सीपीपी स्टाइल मैक्रोज़ का उपयोग करने की सुविधा मिल जाएगी (आपको सीपी आउटपुट से #line से शुरू होने वाली लाइनों को पट्टी करने की आवश्यकता हो सकती है।)

अपवाद में सशर्त बनाने के लिए आईएमएचओ बहुत अधिक कार्यान्वयन विस्तार सहित है। यदि आपका अपवाद संदेश अनुबंध के संदर्भ में अनुबंध में उल्लंघन का वर्णन करता है (उदाहरण के लिए "कोई मूल वस्तु नहीं दी गई", "राशि ऋणात्मक नहीं हो सकती है") आपको स्थिति बदलने पर हर बार इसे बदलने की आवश्यकता नहीं है।

+0

आप प्रीप्रोसेसर के बारे में सही हैं, लेकिन मैं सी प्रोग्रामिंग के हिस्से के रूप में सी प्रीप्रोसेसर पर विचार करूंगा। प्रीप्रोसेसर स्टेटमेंट शायद सी भाषा का हिस्सा नहीं हैं, क्योंकि सी कंपाइलर उन्हें कभी नहीं देखता है, लेकिन वे सी प्रोग्राम लिखने में वास्तव में आवश्यक हैं। –

+0

और सुझाव के लिए धन्यवाद: एक प्रीप्रोसेसर का उपयोग या एक scipt को चलाने का (के रूप में हामिश Grubijan सुझाव) बदलने के लिए या कोड की जाँच करने के लिए अपने (वास्तव में इतना घातक नहीं) समस्या का समाधान कर सकता है। हालांकि मैं, एक सरल और निवासी जावा समाधान के अधिक सोचा के रूप में यह भी महत्वपूर्ण है कि अन्य लोगों को स्पष्ट रूप से समझ क्या हो रहा।फिर फिर मैं केवल जेनरेट कोड साझा कर सकता था ... शायद अनुबंध सहायता द्वारा डिज़ाइन किया जा सकता है? मुझे अब तक डीबीसी के साथ कोई अनुभव नहीं है। –

+0

यदि प्रीप्रोसेसरों की तलाश में हैं, तो आप एम 4 (http://www.gnu.org/software/m4/) में देखना चाहते हैं, डीबीसी मदद कर सकता है, लेकिन आप आम तौर पर उत्पादन में उपकरण कोड नहीं चलाएंगे। चूंकि आपकी आवश्यकता एक पर्ल या पायथन लिपि में से एक है जो आपके अपवाद तर्क को हल करती है शायद यह जाने का सबसे तेज़ तरीका है। – rsp