2010-08-16 16 views
6

यहां एक उदाहरण है जिसे मैंने लिखा है if-else शाखाओं और गार्ड अभिव्यक्तियों का उपयोग करता है। दूसरे पर एक और उचित कब है? मुख्य कारण यह है कि मैं यह जानना चाहता हूं क्योंकि भाषाओं में आम तौर पर चीजों को करने का एक मूर्ख तरीका होता है।गार्ड अभिव्यक्ति उचित कब हैं?

test1 a b = 
    if mod b 3 ≡ 0 then a + b 
    else if mod b 5 ≡ 0 then a + b 
    else a 

test2 a b 
    | mod b 3 ≡ 0 = a + b 
    | mod b 5 ≡ 0 = a + b 
    | otherwise = a 

उत्तर

11

उदाहरण जो आप देते हैं वह एक अच्छा प्रदर्शन है कि गार्ड बेहतर कैसे होते हैं।

गार्ड के साथ, आपके पास स्थितियों और परिणामों की एक बहुत ही सरल और पठनीय सूची है - गणितज्ञ द्वारा फ़ंक्शन को कैसे लिखा जाएगा इसके बहुत करीब है।

if साथ

, दूसरे हाथ पर, आप एक थोड़ा जटिल (अनिवार्य रूप से O (n) पढ़ने कठिनाई) नेस्टेड अभिव्यक्ति की अनियमित अंतराल पर में फेंक दिया खोजशब्दों के साथ संरचना है।

साधारण मामलों के लिए, यह मूल रूप से if और गार्ड के बीच टॉस-अप है - if कुछ बहुत ही सरल मामलों में और भी पठनीय हो सकता है क्योंकि एक पंक्ति पर लिखना आसान है। अधिक जटिल तर्क के लिए, हालांकि, गार्ड एक ही विचार व्यक्त करने का एक बेहतर तरीका है।

+0

+1, सही होने के अलावा, "ओ (एन²) पढ़ने में कठिनाई" – delnan

+0

@ डेलनान - शायद वे सोच रहे थे * "ओ (एन²) सिग्नल शोर अनुपात" * के साथ शर्तों की संख्या होने के साथ। – ChaosPandion

6

मैंने हमेशा सोचा कि यह वरीयता का मामला था। निजी तौर पर, मैं दूसरा पसंद करता हूं, मुझे लगता है कि अगर इल्स-रक्षक गार्ड की तुलना में अधिक अनिवार्य अनुभव देते हैं, और मुझे गार्ड को पढ़ने में आसान लगता है।

+2

मैं वास्तव में गार्ड पढ़ने के तरीके की तरह करता हूं। – ChaosPandion

संबंधित मुद्दे