मैंने एक फ़ंक्शन लिखा है जो उपयोगकर्ता से इनपुट के लिए पूछता है जब तक कि उपयोगकर्ता एक सकारात्मक पूर्णांक (एक प्राकृतिक संख्या) में प्रवेश नहीं करता है। किसी ने कहा कि मुझे अपने फ़ंक्शन में अपवादों को नहीं फेंकना और पकड़ना चाहिए और मेरे फ़ंक्शन के कॉलर को उन्हें संभालने देना चाहिए।
मुझे आश्चर्य है कि अन्य डेवलपर्स इस बारे में क्या सोचते हैं। मैं भी फंक्शन में अपवादों का गलत इस्तेमाल कर रहा हूं। यहाँ जावा में कोड है:
private static int sideInput()
{
int side = 0;
String input;
Scanner scanner = new Scanner(System.in);
do {
System.out.print("Side length: ");
input = scanner.nextLine();
try {
side = Integer.parseInt(input);
if (side <= 0) {
// probably a misuse of exceptions
throw new NumberFormatException();
}
}
catch (NumberFormatException numFormExc) {
System.out.println("Invalid input. Enter a natural number.");
}
} while (side <= 0);
return side;
}
मुझे दो चीजों में दिलचस्पी है:
- क्या मुझे कॉलर को अपवादों के बारे में चिंता करने देना चाहिए? फ़ंक्शन का मुद्दा यह है कि यह उपयोगकर्ता को तब तक नंगा करता है जब तक कि उपयोगकर्ता एक प्राकृतिक संख्या में प्रवेश नहीं करता है। क्या फ़ंक्शन का बिंदु खराब है? मैं यूआई के बारे में बात नहीं कर रहा हूं (उपयोगकर्ता उचित इनपुट के बिना लूप से बाहर निकलने में सक्षम नहीं है), लेकिन अपवादित हैंडल के साथ लूप किए गए इनपुट के बारे में।
- क्या आप कहेंगे कि इस कथन (इस मामले में) अपवादों का दुरुपयोग है? मैं आसानी से संख्या की वैधता की जाँच के लिए एक ध्वज बना सकता था और उस ध्वज के आधार पर चेतावनी संदेश का उत्पादन कर सकता था। लेकिन इससे कोड में अधिक लाइनें जुड़ जाएंगी और मुझे लगता है कि यह पूरी तरह से पठनीय है।
बात यह है कि मैं अक्सर एक अलग इनपुट फ़ंक्शन लिखता हूं। यदि उपयोगकर्ता को कई बार इनपुट करना पड़ता है, तो मैं इनपुट के लिए एक अलग फ़ंक्शन बनाता हूं जो सभी फॉर्मेटिंग अपवादों और सीमाओं को संभालता है।