@ PSkocik का जवाब ठीक है, लेकिन मैं अपने दो सेंट जोड़ देता हूं। यदि मुझे यह टिप्पणी के रूप में करना चाहिए, या उत्तर के रूप में; बाद वाले को चुनना, क्योंकि IMHO दूसरों को देखने लायक है, जबकि टिप्पणियां अक्सर अदृश्य होती हैं।
इतना ही नहीं मैं कभी-कभार इस्तेमाल करता हूं
if(0) {
//deliberately left empty
} else if( cond1 ) {
//deliberately left empty
} else if( cond2 ) {
//deliberately left empty
...
} else {
// no conditions matched
}
लेकिन मैं भी कभी-कभार करता हूं
if( 1
&& cond1
&& cond2
...
&& condN
) {
या
if( 0
|| cond1
|| cond2
...
|| condN
) {
जटिल परिस्थितियों के लिए। समान कारणों से - संपादित करने में आसान, # हाइफ़, आदि।
उस मामले के लिए, मैं पर्ल में करूंगा
@array = (
elem1,
elem2,
...
elem1,
) {
- सूची के अंत में अल्पविराम पर ध्यान दें। मैं भूल जाता हूं कि क्या कॉमा सी और सी ++ सूची में विभाजक या सीमांकक हैं। IMHO यह एक चीज है जिसे हमने सीखा है: [ क्या पर्ल में कॉलिंग करना एक बुरा व्यवहार है? अल्पविराम] एक अच्छी बात है। किसी भी नए संकेतन की तरह, इसकी आदत पड़ने में थोड़ा समय लगता है।
मैं तुलना करता हूं if(0)
कोड की लिस्प से
(cond (test1 action1)
(test2 action2)
...
(testn actionn))
जो, आप यह अनुमान लगाया, मैं के रूप में इंडेंट कर सकते हैं
(cond
(test1 action1)
(test2 action2)
...
(testn actionn)
)
मैंने कभी-कभी यह कल्पना करने की कोशिश की है कि इसके लिए एक अधिक मानव पठनीय वाक्यविन्यास कैसा दिख सकता है।
शायद
IF
:: cond1 THEN code1
:: cond2 THEN code2
...
:: condN THEN codeN
FI
द्वारा Dikstra के [प्रेरित https://en.wikipedia.org/wiki/Guarded_Command_Language#Selection:_if][Guarded Command Language] ।
लेकिन यह वाक्यविन्यास बताता है कि स्थितियों का मूल्यांकन समानांतर में किया जाता है, जबकि if...else-if
इसका का अनुक्रमिक और प्राथमिकता मूल्यांकन।
मैंने ऐसे कार्यक्रम करना शुरू कर दिया, जब अन्य कार्यक्रमों को बनाने वाले कार्यक्रमों को लिखना, जहां यह विशेष रूप से सुविधाजनक है।
जब हम इस पर होते हैं, जब इंटेल के पुराने iHDL का उपयोग करके RTL लिखते हैं, तो मेरे पास कोडित सामान होता है
IF 0 THEN /*nothing*/
**FORC i FROM 1 TO 10 DOC**
ELSE IF signal%i% THEN
// stuff to do if signal%i% is active
**ENDC**
ELSE
// nothing matched
ENDIF
जहां FORC..DOC..ENDC
मैक्रो प्रीप्रोसेसर लूप कंस्ट्रक्शन है, जो विस्तार करता है
IF 0 THEN /*nothing*/
ELSE IF signal1 THEN
// stuff to do if signal1 is active
ELSE IF signal2 THEN
// stuff to do if signal2 is active
...
ELSE IF signal100 THEN
// stuff to do if signal100 is active
ELSE
// nothing matched
ENDIF
यह एकल असाइनमेंट, गैर-अनिवार्य, कोड था, इसलिए राज्य चर सेट करने की अनुमति नहीं थी, यदि आपको कुछ सेट बिट जैसे चीजें करने की आवश्यकता होती है।
IF 0 THEN /*nothing*/
ELSE IF signal1 THEN
found := 1
ELSE IF signal2 THEN
found := 2
...
ELSE IF signal100 THEN
found := 100
ELSE
// nothing matched
ENDIF
यह सोचने के लिए आओ, यह पहला स्थान हो सकता है कि मुझे इस तरह के निर्माण का सामना करना पड़ा।
BTW, आपत्ति है कि कुछ अगर (0) शैली के लिए था - कि अन्य-अगर-शर्तें क्रमिक रूप से निर्भर हैं और मनमाने ढंग से पुन: व्यवस्थित नहीं किया जा सकता - आरटीएल में AND और OR और XOR तर्क पर लागू नहीं होते हैं - लेकिन लघु- पर लागू होते हैं सर्किट && और ||