समस्या यह है कि उन्होंने सी/सी ++ वाक्यविन्यास का उपयोग नहीं किया। मुझे लगता है कि सी वाक्यविन्यास अधिक पठनीय है। उदाहरण यदि आप एक सूची एक्स 3 तत्व से शुरू लंबाई 2 के साथ सबस्ट्रिंग लेना चाहते हैं, आप लिखते हैं
X.subList(2,3).
जावा में, आप केवल एक सूची एक्स 3 तत्व के साथ एक sublist लेने के लिए चाहते हैं, आपको X.subList (2,3) लिखना होगा। यह वास्तव में बदसूरत है, ऐसा लगता है कि आप 2 तत्वों का एक उपन्यास ले रहे हैं। दूसरी ओर, X.subList (2,2) एक खाली सूची है - काफी उलझन में।
int startIndex = calculateStartIndex();
int endIndex = calculateEndIndex();
X.subList(startIndex, endIndex);
असल में, अगर (startIndex == endIndex) → खाली सूची।
आपका प्रश्न था: क्यों, तो मेरा जवाब यहां है। जावा में दोनों पैरामीटर समावेशी होने पर क्या होगा? यदि आपको दूसरी अनुक्रमणिका की गणना करने पर आपको खाली सूची लेने की आवश्यकता होती है तो आपको एक समस्या होगी। क्योंकि ज्यादातर मामलों में इंडेक्स की गणना की जाती है और हम कार्यों में सीधे संख्याएं नहीं लिखते हैं।
रिक्त सूची रखने के लिए, जब तक कि आप एक संयोजन का उपयोग न करें (उदाहरण: नकारात्मक या निचले अंत इंडेक्स रिक्त सूची के मामले में) - लेकिन ऐसी व्यवस्था कोडिंग में त्रुटियों को छुपा सकती है (दूसरा पैरामीटर कोई अंतर नहीं है -1 या -100!):
int startIndex = calculateStartIndex(); // return 0
int endIndex = calculateEndIndex(); // return 0
X.subList(startIndex, endIndex); // this would return the 1st element of the list; how to get an empty list? Convenction needed!
// use a negative number to get empty list? And what if endIndex is negative because of a bug?
मैं यह मामला, सी जीतता है; किसी भी मामले में अधिक पठनीय, यह एक दयालुता है कि उन्होंने इसे बदल दिया। लेकिन यह सिर्फ एक अतिरिक्त टिप्पणी है जिसे आप जोड़ सकते हैं।
+1 दूसरे कारण –
के लिए किया जाता है जो सी फ़ंक्शन इस तरह से करता है? –
यह सच नहीं है कि सी/सी ++ में सबस्ट्रेट जावा के रूप में काम करता है। सी में सबस्ट्रेट दूसरे पैरामीटर के रूप में एक लंबाई लेता है, इसलिए सबस्ट्रेट (3,2) का अर्थ है "सूचकांक 3 के साथ चार से शुरू होने वाले 2 अक्षर लें"। मुझे लगता है कि सी वाक्यविन्यास अधिक पठनीय है। – fresko