C++17 ने मौजूदा if स्टेटमेंट के सिंटैक्स को विस्तारित किया है। अब if स्टेटमेंट के भीतर प्रारंभिक शर्त प्रदान करना संभव है। इस नए सिंटैक्स को "इनिशियलाइज़र के साथ if स्टेटमेंट" कहा जाता है। यह संवर्धन सामान्य कोड पैटर्न को सरल बनाता है और उपयोगकर्ताओं को स्कोप को सख्त रखने में मदद करता है। जो बदले में स्कोप के बाहर वेरिएबल लीक होने से बचाता है।
उदाहरण
मान लीजिए हम जांचना चाहते हैं कि दी गई संख्या सम है या विषम। C++17 से पहले हमारा कोड ऐसा दिखता था -
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
srand(time(NULL));
int random_num = rand();
if (random_num % 2 == 0) {
cout << random_num << " is an even number\n";
} else {
cout << random_num << " is an odd number\n";
}
return 0;
}
आउटपुट
जब आप उपरोक्त कोड को संकलित और निष्पादित करते हैं तो यह ऐसा आउटपुट उत्पन्न करेगा -
1555814729 is an odd number
उपरोक्त उदाहरण में, हम देख सकते हैं कि वेरिएबल "random_num" if-else स्कोप के बाहर लीक हो जाता है। हम नए "इनिशियलाइज़र के साथ if स्टेटमेंट" सिंटैक्स से इसे आसानी से बचा सकते हैं।
नीचे "इनिशियलाइज़र के साथ if स्टेटमेंट" का सिंटैक्स है -
if (init; condition) {
// Do stuff when Boolean condition is true
} else {
// Do stuff when Boolean condition is false
}
उदाहरण
अब आइए इसी कोड को इस नए इनिशियलाइज़र के साथ if स्टेटमेंट का उपयोग करके लिखते हैं -
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
srand(time(NULL));
// C++17 इनिशियलाइज़र के साथ if स्टेटमेंट
if (int random_num = rand(); random_num % 2 == 0) {
cout << random_num << " is an even number\n";
} else {
cout << random_num << " is an odd number\n";
}
return 0;
}
उपरोक्त उदाहरण में, वेरिएबल "random_num" का स्कोप if-else ब्लॉक तक सीमित है। इसलिए यह वेरिएबल इस ब्लॉक के बाहर एक्सेस नहीं किया जा सकेगा। आश्चर्यजनक रूप से यह वास्तविक आउटपुट को प्रभावित किए बिना वेरिएबल के स्कोप को सख्त रखता है।
आउटपुट
जब आप उपरोक्त कोड को संकलित और निष्पादित करते हैं तो यह ऐसा आउटपुट उत्पन्न करेगा -
943513352 is an even number
नोट - चूंकि हम हर बार रैंडम संख्या उत्पन्न कर रहे हैं, इसलिए एक ही मशीन पर प्रत्येक रन के लिए आउटपुट अलग-अलग होगा।