- 1 1. परिचय
- 2 2. सर्त अपरेटर (?:) भनेको के हो
- 3 3. शर्त अपरेटरको प्राथमिकता र संयोजन नियम
- 4 4. सर्त अपरेटरको मूल्यांकन क्रम
- 5 5. शर्त अपरेटरको प्रयोग उदाहरण
- 6 6. शर्त अपरेटरका फाइदा र बेफाइदा
- 7 7. सामान्य त्रुटिहरू र ध्यान दिनुपर्ने बुँदाहरू
- 8 8. FAQ(बारम्बार सोधिने प्रश्नहरू)
- 9 9. सारांश
1. परिचय
C भाषा मा “शर्त अपरेटर(?:)” कोडलाई संक्षिप्त रूपमा लेख्नको लागि उपयोगी उपाय हो। यो अपरेटर प्रयोग गरेर, परम्परागत if वाक्यलाई एकै लाइनमा बदल्न सकिन्छ। तर, शर्त अपरेटरको विशेषता र प्रयोग विधिलाई सही रूपमा नबुझेमा, गलतफहमी वा त्रुटि हुन सक्छ।
यस लेखमा, शर्त अपरेटरको आधारभूत वाक्यरचना र प्रयोग, if वाक्यसँगको भिन्नता, ध्यान दिनुपर्ने बुँदाहरू आदि क्रमशः व्याख्या गरिनेछ। शुरुआतीदेखि मध्यवर्ती स्तरका पाठकहरूलाई लक्षित गरी, C भाषा मा शर्त अपरेटरलाई प्रभावकारी रूपमा प्रयोग गर्न आवश्यक ज्ञान प्रदान गरिनेछ।
2. सर्त अपरेटर (?:) भनेको के हो
सर्त अपरेटरको मूल संरचना
सर्त अपरेटरलाई तलको ढाँचामा लेखिन्छ।
shart ? abivyakti1 : abivyakti2;
- सर्त अभिव्यक्ति: सत्य/असत्य मूल्यांकन गर्ने अभिव्यक्ति
- अभिव्यक्ति1: सर्त अभिव्यक्ति ‘सत्य’ भएमा चल्ने अभिव्यक्ति
- अभिव्यक्ति2: सर्त अभिव्यक्ति ‘असत्य’ भएमा चल्ने अभिव्यक्ति
यस संरचनाले if कथन जस्तै प्रक्रिया छोटकरीमा व्यक्त गर्न सकिन्छ।
उदाहरण: मूल प्रयोग विधि
तल सर्त अपरेटर प्रयोग गरेको उदाहरण देखाइन्छ।
#include <stdio.h>
int main() {
int a = 10, b = 20;
int max = (a > b) ? a : b;
printf("सबैभन्दा ठूलो मान: %d
", max);
return 0;
}
यो प्रोग्राममा, a > b
सत्य भएमा max
मा a
असाइन हुन्छ, असत्य भएमा b
असाइन हुन्छ।
if कथनसँगको भिन्नता
सर्त अपरेटर र if कथनको मुख्य भिन्नता कोडको छोटोपनामा छ। if कथन तलको जस्तै लेखिन्छ:
if (a > b) {
max = a;
} else {
max = b;
}
अर्कोतर्फ, सर्त अपरेटर प्रयोग गर्दा एकै लाइनमा व्यक्त गर्न सकिन्छ। तर, जटिल सर्त अभिव्यक्तिहरूको ह्यान्डल गर्दा पढ्न सजिलो नहुन सक्छ, त्यसमा ध्यान दिनु आवश्यक छ।
3. शर्त अपरेटरको प्राथमिकता र संयोजन नियम
प्राथमिकता बारेमा
C भाषा मा, धेरै अपरेटरहरू छन्, र प्रत्येकलाई प्राथमिकता दिइएको छ। शर्त अपरेटरको प्राथमिकता कम हुन्छ, र असाइनमेंट अपरेटरको ठीक माथि स्थित हुन्छ। त्यसैले, शर्त अपरेटर प्रयोग गर्दा, कोष्ठकहरू प्रयोग गरेर स्पष्ट रूपमा प्राथमिकता निर्दिष्ट गर्नु सिफारिस गरिन्छ।
ाथमिकतामा ध्यान दिएको उदाहरण
int result = a > b ? a + 10 : b - 10 * 2; // अनपेक्षित परिणामको सम्भावना छ
उपरोक्त कोडमा, शर्त अभिव्यक्तिबाहेकका भागहरूकोता अस्पष्ट भएको कारण, तलको जस्तै स्पष्ट रूपमा कोष्ठक प्रयोग गर्दा सुरक्षित हुन्छ।
int result = (a > b) ? (a + 10) : (b - 10 * 2);
संयोजन नियम
शर्त अपरेटरले “दायाँ संयोजन” (right-associativity) राख्छ। अर्थात, यदि धेरै शर्त अपरेटरहरू समावेश छन् भने, दायाँबाट बायाँतिर मूल्यांकन गरिन्छ।
दायाँ संयोजनको उदाहरण
int result = a > b ? b > c ? c : b : a;
यो कोडलाई तलको जस्तै व्याख्या गरिन्छ:
int result = (a > b) ? ((b > c) ? c : b) : a;
4. सर्त अपरेटरको मूल्यांकन क्रम
छोटो सर्किट मूल्यांकन र सर्त अपरेटर
सर्त अपरेटरले, सर्त अभिव्यक्तिको मूल्यांकन परिणाम अनुसार「सूत्र१」वा「सूत्र२」मध्ये कुनै एकलाई मात्र मूल्यांकन गर्छ। यस विशेषतालाई「छोटो सर्किट मूल्यांकन (short-circuit evaluation)」भनिन्छ।
छोटो सर्किट मूल्यांकनको उदाहरण
#include <stdio.h>
int main() {
int a = 10, b = 0;
int result = (b != 0) ? (a / b) : 0; // b 0 हुँदा मूल्याङ्कन गरिँदैन
printf("परिणाम: %d
", result);
return 0;
}
यस उदाहरणमा, यदि b != 0 «झूठो» हो भने, a / b मूल्यांकन गरिँदैन, प्रक्रिया सुरक्षित रूपमा अगाडि बढ्छ।
साइड इफेक्ट भएको अभिव्यक्ति प्रयोग गर्दा ध्यान दिनुपर्ने बुँदा
सर्त अपरेटरभित्र साइड इफेक्ट सहितको अभिव्यक्ति (इन्क्रिमेन्ट वा फलन कल आदि) लाई प्रयोग गर्दा, मूल्यांकन क्रममा ध्यान दिनु आवश्यक छ। किनभने, सर्त अभिव्यक्तिको «साँचो» को अवस्थामा र «झूठो» को अवस्थामा विभिन्न अभिव्यक्तिहरू मूल्यांकन गरिन्छ।
साइड इफेक्ट भएको उदाहरण
#include <stdio.h>
int increment(int *value) {
(*value)++;
return *value;
}
int main() {
int x = 5;
int y = (x > 0) ? increment(&x) : x - 1;
printf("x: %d, y: %d
", x, y); // x को वृद्धि भएको छ कि छैन जाँच गर्नुहोस्
return 0;
}
यस उदाहरणमा, सर्त अभिव्यक्तिको परिणाम अनुसार, increment फलनलाई कल गर्ने कि नगर्ने निर्णय हुन्छ। कोडको उद्देश्य स्पष्ट बनाउन, आवश्यक परेमा टिप्पणी थप्न सिफारिस गरिन्छ।
5. शर्त अपरेटरको प्रयोग उदाहरण
मूलभूत प्रयोग उदाहरण
शर्त अपरेटरको सबैभन्दा सरल प्रयोग विधि देखाउँछ।
#include <stdio.h>
int main() {
int a = 5, b = 10;
int min = (a < b) ? a : b; // छोटो मान प्राप्त गर्नुहोस्
printf("न्यूनतम मान: %d
", min);
return 0;
}
यो प्रोग्रामले, a
र b
मध्ये सानो मान प्राप्त गरी आउटपुट गर्दछ।
जटिल शर्त अभिव्यक्तिमा प्रयोग उदाहरण
शर्त अभिव्यक्तिमा बहु शर्तहरू संयोजन गरेर, अझ लचिलो प्रक्रिया सम्भव हुन्छ।
#include <stdio.h>
int main() {
int score = 85;
char *grade = (score >= 90) ? "A" :
(score >= 80) ? "B" :
(score >= 70) ? "C" : "F";
printf("अंक: %s
", grade);
return 0;
}
यो कोडले स्कोर अनुसार उपयुक्त ग्रेड निर्धारण गर्दछ। नेस्टेड शर्त अपरेटर प्रयोग गरिएको छ, तर अत्यधिक प्रयोग गर्दा पढ्न सजिलो नहुन सक्छ, त्यसैले संक्षिप्त राख्न ध्यान दिनु आवश्यक छ।
नेस्टेड शर्त अपरेटरको उदाहरण
शर्त अपरेटरलाई नेस्ट गरेर जटिल शर्तहरूलाई ह्यान्डल गर्न सकिन्छ।
#include <stdio.h>
int main() {
int a = 10, b = 20, c = 30;
int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
printf("अधिकतम मान: %d
", max);
return 0;
}
यो प्रोग्रामले तीनवटा संख्याहरू मध्ये अधिकतम मान गणना गर्दछ। तर, पढ्न सजिलो नहुन सक्छ, त्यसैले जटिल तर्कमा if कथन प्रयोग गर्ने विचार गर्नुपर्छ।
6. शर्त अपरेटरका फाइदा र बेफाइदा
फाइदा
कोडलाई संक्षिप्त रूपमा लेख्न सकिन्छ
शर्त अपरेटर प्रयोग गर्दा, if वाक्यलाई एकै लाइनमा समेट्न सकिन्छ। विशेष गरी सरल शर्त विभाजन लेख्दा उपयोगी हुन्छ।
उदाहरण:
#include <stdio.h>
int main() {
int a = 5, b = 10;
int min = (a < b) ? a : b; // if कथनको तुलनामा अधिक संक्षिप्त
printf("न्यूनतम मान: %d
", min);
return 0;
}
समावेशी अभिव्यक्तिको रूपमा प्रयोग गर्न सकिन्छ
शर्त अपरेटरलाई अभिव्यक्तिको रूपमा ह्यान्डल गर्न सकिन्छ, त्यसैले फलन कल वा अन्य अपरेसनको भागको रूपमा प्रयोग गर्न सकिन्छ।
उदाहरण:
int result = (condition) ? function1() : function2();
पठनीयता कायम राख्दै छोटो गर्न सकिने केसहरू
यदि शर्त सरल छ भने, कोडको लम्बाइ घटाएर, पठनीयता नघटाइ लेख्न सकिन्छ।
बेफाइदा
पठनीयता घट्नु
शर्त जटिल भएमा, शर्त अपरेटर प्रयोग गर्दा उल्टो रूपमा पठनीयता घट्न सक्छ। विशेष गरी नेस्टेड शर्त अपरेटरहरू अन्य विकासकर्ताहरूका लागि बुझ्न कठिन हुन्छ।
उदाहरण:
int result = (a > b) ? ((b > c) ? b : c) : ((a > c) ? a : c); // सम्झन गाह्रो
यस्ता अवस्थामा, if वाक्य प्रयोग गर्नु उपयुक्त हुन्छ।
डिबग गर्न कठिन केसहरू
डिबगर प्रयोग गर्दा, शर्त अपरेटरको अभिव्यक्तिको विश्लेषण if वाक्यभन्दा कठिन हुन सक्छ। विशेष गरी साइड इफेक्ट भएको अभिव्यक्ति प्रयोग गरिएमा सावधान रहनु आवश्यक छ।
प्रकार असमानताबाट हुने त्रुटिको जोखिम
शर्त अपरेटरले विभिन्न प्रकारको मान फर्काउन खोज्दा, प्रकार असमानता उत्पन्न हुन सक्छ।
उदाहरण:
#include <stdio.h>
int main() {
int a = 10;
char *message = (a > 0) ? "सही" : 0; // त्रुटि सम्भावना छ
printf("परिणाम: %s
", message);
return 0;
}
यो कोडमा, पोइन्टर प्रकार र इन्टिजर प्रकार मिश्रित भएकोले, अनपेक्षित व्यवहार उत्पन्न हुन सक्छ।
शर्त अपरेटरको उपयुक्त प्रयोग उदाहरण
शर्त अपरेटरलाई उपयुक्त रूपमा प्रयोग गर्दा, कोडको पठनीयता र कार्यक्षमता दुबै सन्तुलन गर्न सकिन्छ। तलका मार्गनिर्देशहरू पालना गर्नु राम्रो हुन्छ:
- सरल शर्त विभाजनमा मात्र सीमित गरी प्रयोग गर्नु।
- जटिल शर्त अभिव्यक्तिमा if वाक्य प्रयोग गर्नु।
- प्रकारको सुसंगततामा ध्यान दिनु।

7. सामान्य त्रुटिहरू र ध्यान दिनुपर्ने बुँदाहरू
प्रकार असमानताबाट उत्पन्न त्रुटि
सर्त अपरेटरको ‘अभिव्यक्ति १’ र ‘अभिव्यक्ति २’ समान प्रकारका हुनुपर्छन्। फरक प्रकार प्रयोग गर्दा, कम्पाइल त्रुटि वा अपरिभाषित व्यवहार उत्पन्न हुन सक्छ।
उदाहरण:
#include <stdio.h>
int main() {
int a = 10;
double result = (a > 5) ? 1 : 1.5; // पूर्णांक र फ्लोटिङ् अंकहरू मिश्रित छन्
printf("परिणाम: %f
", result);
return 0;
}
सुधार उदाहरण
double result = (a > 5) ? 1.0 : 1.5; // संगत प्रकार प्रयोग गर्नुहोस्
जटिल सर्त अभिव्यक्तिमा भ्रम
सर्त अपरेटरभित्र बहु सर्तहरू प्रयोग गर्दा, कोष्ठकको अभाव वा मूल्यांकन क्रमको भ्रमले बगहरू उत्पन्न हुन सजिलो हुन्छ।
उदाहरण:
int result = a > b ? b > c ? c : b : a; // अस्पष्ट र बुझ्न गाह्रो
सुधार उदाहरण
int result = (a > b) ? ((b > c) ? c : b) : a; // स्पष्ट पेरेंथेसिस थप्नुहोस्
अन्य अपरेटरहरूसँगको संयोजनबाट उत्पन्न समस्या
सर्त अपरेटरलाई अन्य अपरेटरहरू(उदाहरणका लागि असाइनमेन्ट अपरेटर वा लजिकल अपरेटर)सँग संयोजन गर्दा, प्राथमिकता क्रममा ध्यान दिनु आवश्यक छ।
उदाहरण:
int result;
result = a > b ? a, b : c; // कमा अपरेटरले अनपेक्षित व्यवहार
सुधार उदाहरण
result = (a > b) ? a : b; // उद्देश्य स्पष्ट पार्नुहोस्
8. FAQ(बारम्बार सोधिने प्रश्नहरू)
शर्त अपरेटर र if कथनको प्रदर्शनमा के फरक छ?
उत्तर
शर्त अपरेटर र if कथनको प्रदर्शनमा सामान्यतया धेरै फरक छैन। दुबैलाई कम्पाइलरले प्रभावकारी रूपमा अनुकूलन गर्ने कारण, प्रक्रिया गति मा ठूलो अन्तर उत्पन्न हुँदैन। तर, शर्त अपरेटरलाई एकै लाइनमा लेख्न सकिन्छ, जसले कोडको संक्षिप्ततामा फाइदा दिन्छ। अर्कोतर्फ, जटिल शर्त अभिव्यक्तिहरूलाई ह्यान्डल गर्दा if कथनले पढ्न सजिलोपन उच्च बनाउँछ।
शर्त अपरेटरलाई नेस्ट गरेर प्रयोग गर्न ठीक छ?
उत्तर
प्राविधिक रूपमा शर्त अपरेटरलाई नेस्ट गर्न सम्भव छ। तर, पढ्न सजिलोपन उल्लेखनीय रूपमा घट्ने कारण, नेस्ट गरिएको शर्त अभिव्यक्ति धेरै जटिल भएमा यसलाई टाढा राख्नु राम्रो हुन्छ। सट्टामा if कथन प्रयोग गरेर कोडलाई अझ बुझ्न सजिलो बनाउन सकिन्छ।
खराब उदाहरण:
int result = (a > b) ? ((b > c) ? c : b) : ((a > c) ? a : c);
राम्रो उदाहरण:
if (a > b) {
if (b > c) {
result = c;
} else {
result = b;
}
} else {
result = (a > c) ? a : c;
}
शर्त अपरेटरको प्रयोग सिफारिस गरिन्छ?
उत्तर
शर्त अपरेटर संक्षिप्त कोड लेख्न उपयुक्त छ, तर सबै परिस्थितिमा यसको प्रयोग सिफारिस गरिँदैन। तलका अवस्थामा प्रयोग गर्नु उपयुक्त हुन्छ:
- शर्त सरल भएको अवस्थामा
- पढ्न सजिलोपन नघट्ने अवस्थामा
- एकै लाइनमा प्रक्रिया लेख्न चाहेको अवस्थामा
जटिल शर्तहरू वा पढ्न सजिलोपन महत्त्वपूर्ण कोडमा, if कथन प्रयोग गर्नु राम्रो हुन्छ।
शर्त अपरेटर र शॉर्ट-सर्किट मूल्याङ्कनको फरक के हो?
उत्तर
शॉर्ट-सर्किट मूल्याङ्कन भनेको तर्कीय अपरेटर (&&
वा ||
) मा, बायाँ पक्षको अभिव्यक्तिले परिणाम निश्चित भएमा दायाँ पक्षको अभिव्यक्तिलाई मूल्याङ्कन नगर्ने विशेषता हो। अर्कोतर्फ, शर्त अपरेटरले “यदि शर्त अभिव्यक्ति सत्य भएमा अभिव्यक्ति 1 लाई मूल्याङ्कन गर्छ, नत्र अभिव्यक्ति 2 लाई मूल्याङ्कन गर्छ” भन्ने कार्य गर्दछ।
शॉर्ट-सर्किट मूल्याङ्कनको उदाहरण:
int a = 10, b = 0;
if (b != 0 && a / b > 0) { // जब b 0 हुन्छ, a / b मूल्याङ्कन गरिँदैन
printf("गणना सफल
");
}
शर्त अपरेटरको उदाहरण:
int result = (b != 0) ? (a / b) : 0; // शर्त अनुसार उपयुक्त रूपमा मूल्याङ्कन गर्नुहोस्
शॉर्ट-सर्किट मूल्याङ्कन मुख्यतया तर्कीय अपरेटरमा लागू हुन्छ, र शर्त अपरेटरसँग यसको प्रयोग फरक हुन्छ।
9. सारांश
शर्तीय अपरेटर(?:) C भाषा मा संक्षिप्त र प्रभावकारी रूपमा शर्तीय शाखा लेख्नको लागि उपयोगी उपकरण हो। यस लेखमा, शर्तीय अपरेटरको मूल संरचना, प्रयोग विधि, र ध्यान दिनुपर्ने बुँदाहरूलाई विस्तृत रूपमा व्याख्या गरिएको छ।
मुख्य बुँदाहरूको पुनरावलोकन
- शर्तीय अपरेटरको मूल संरचना र प्रयोग विधि
शर्तीय अपरेटरलाई,शर्त अभिव्यक्ति ? अभिव्यक्ति1 : अभिव्यक्ति2;
को रूपमा लेखिन्छ, र शर्त अभिव्यक्तिको मूल्यांकन परिणाम अनुसार विभिन्न मान फिर्ता गर्दछ। - if कथनसँगको भिन्नता
संक्षिप्त रूपमा लेख्न सकिने शर्तीय अपरेटर सरल शर्तीय शाखा लागि उपयुक्त छ, तर जटिल अवस्थामा if कथन प्रयोग गर्दा पढ्न सजिलो हुन्छ। - छोटो-सर्किट मूल्यांकन र साइड इफेक्टको ध्यान दिनुपर्ने बुँदा
शर्तीय अपरेटरमा, मूल्यांकन हुने कुरा शर्त अभिव्यक्तिको परिणाम अनुसार अभिव्यक्ति1 वा अभिव्यक्ति2 मध्ये एक मात्र हो। साइड इफेक्ट भएको अभिव्यक्ति प्रयोग गर्दा अनपेक्षित व्यवहार रोक्न ध्यान आवश्यक छ। - फाइदा र बेफाइदा
शर्तीय अपरेटरले कोडलाई संक्षिप्त बनाउने फाइदा भएता पनि, जटिल शर्त अभिव्यक्तिहरूमा पढ्न सजिलोपन र डिबग गर्न सजिलोपनमा असर पर्न सक्छ। - सामान्य गलत प्रयोग
प्रकारको असमानता वा जटिल नेस्टिङले भ्रम वा बगको कारण बनाउँछ। सुरक्षित र बुझ्न सजिलो कोड लेख्नको लागि उपयुक्त व्याकरणको समझ आवश्यक छ।
अन्तमा
शर्तीय अपरेटरलाई उपयुक्त रूपमा प्रयोग गर्दा कोडको संक्षिप्तता र कार्यक्षमता बढाउने शक्तिशाली उपकरण हो। तर, सबै परिस्थितिमा प्रयोग गर्नु आवश्यक छैन, कहिलेकाहीँ if कथन वा अन्य नियन्त्रण संरचनाहरू चयन गर्नु उपयुक्त हुन्छ। यस लेखमार्फत, शर्तीय अपरेटरलाई सही रूपमा प्रयोग गर्न आवश्यक आधारभूत ज्ञान र व्यावहारिक उदाहरणहरू सिक्नुभएको आशा गर्छु।
सी भाषालाई अझ गहिरो रूपमा सिक्न चाहनेहरू शर्तीय अपरेटर बाहेकका विषयहरूमा पनि चुनौती लिनुहोस्, र अझ शक्तिशाली प्रोग्रामिङ कौशल हासिल गर्नुहोस्!