संक्षिप्त IF
बयान
IF
बयान बल्कि महंगे हैं, और उन्हें नीचे गोल्फिंग बहुत बाइट बचा सकता है।
निम्नलिखित पर विचार करें ( एग्री द आउटग्राफर द्वारा उत्तर से अनुकूलित ):
IF RND<.5THEN
x=x-1
a(i)=1
ELSE
y=y-1
a(i)=0
ENDIF
पहली चीज जो हम कर सकते हैं वह ENDIF
है सिंगल-लाइन IF
स्टेटमेंट का उपयोग करके सेव करना :
IF RND<.5THEN x=x-1:a(i)=1ELSE y=y-1:a(i)=0
यह तब तक काम करता है जब तक आप इसे किसी और चीज की तरह एक ही लाइन पर रखने की कोशिश नहीं करते हैं। विशेष रूप से, यदि आपके पास नेस्टेड IF
स्टेटमेंट हैं, तो केवल अंतरतम एक-पंक्तिबद्ध हो सकता है।
लेकिन इस मामले में, हम IF
गणित का पूरी तरह से उपयोग कर सकते हैं । विचार करें कि हम वास्तव में क्या चाहते हैं:
- अगर
RND<.5
सच है ( -1
), हम चाहते हैं:
x
1 से कम करने के लिए
y
वही रहने के लिए
a(i)
1 बनने के लिए
- अन्यथा, अगर
RND<.5
गलत है ( 0
), हम चाहते हैं:
x
वही रहने के लिए
y
1 से कम करने के लिए
a(i)
बनने के लिए 0
अब अगर हम एक चर में (सशर्त का परिणाम बचाने के r=RND<.5
), हम के नए मूल्यों की गणना कर सकते हैं x
, y
और a(i)
:
- जब
r
है -1
, x=x-1
; जब r
है 0
, x=x+0
।
- जब
r
है -1
, y=y+0
; जब r
है 0
, y=y-1
।
- जब
r
है -1
, a(i)=1
; जब r
है 0
, a(i)=0
।
तो हमारा अंतिम कोड इस तरह दिखता है:
r=RND<.5
x=x+r
y=y-1-r
a(i)=-r
मूल संस्करण पर एक भारी 20 बाइट्स (40%) की बचत।
गणित दृष्टिकोण को आश्चर्यजनक रूप से अक्सर लागू किया जा सकता है, लेकिन जब दो मामलों के बीच तर्क में अंतर होता है (जैसे जब आपको एक मामले में कुछ इनपुट करने की आवश्यकता होती है, लेकिन दूसरे में नहीं), तो भी आपको उपयोग करने की आवश्यकता होगी IF
।