अभिव्यक्ति शारीरिक सदस्यों का उपयोग करना कब उचित है? [बन्द है]


24

C # 6 अभिव्यक्ति-शारीरिक सदस्यों का परिचय देता है, जो उन तरीकों और गुणों में सरलीकृत कोड की अनुमति देते हैं जो केवल एक अभिव्यक्ति का परिणाम लौटाते हैं:

public override string ToString()
{
     return string.Format("{0} {1}", _field1, _field2);
}

हो जाता है:

public override string ToString() =>
    string.Format("{0} {1}", _field1, _field2);

चूँकि अब हमारे पास दो बिल्कुल समतुल्य और मान्य सिंटैक्स हैं, इसलिए अंगूठे के कुछ नियम का उपयोग करने के लिए तय किया जाना चाहिए। नया विकल्प कब उपयुक्त है?


7
उम्म, जब सदस्य का शरीर एक अभिव्यक्ति है?
जोर्ग डब्ल्यू मित्तग

1
इस सवाल का जवाब होगा "जब अभिव्यक्ति शारीरिक सदस्यों का उपयोग करना संभव है"।
आसिक

7
पूरी तरह से संबंधित नहीं है, लेकिन आप उपयोग नहीं कर सकते public override string ToString() => $"{_field1} {_field2}";?
थोडेन

3
@JorgWMittag मैं "... कि साइड इफेक्ट्स नहीं है" जोड़ देंगे। कार्यात्मक शैली में एक विधि की घोषणा करना जब यह विशुद्ध रूप से कार्यात्मक नहीं है तो भ्रामक होगा।
जूल्स

जवाबों:


12

फ़ंक्शनल प्रोग्रामिंग लैंग्वेज में केवल एक्सप्रेशन होते हैं, इसलिए अधिकांश में शुरुआत से ही इस तरह की सुविधा होती है। आप इसका उपयोग तब करते हैं जब आपके पास अपेक्षाकृत कम, अक्सर दोहराया जाता है, अभिव्यक्ति जिसे एक और भी छोटे, बहुत अधिक सार्थक नाम से बदला जा सकता है।

एक सामान्य उदाहरण कहीं और उपयोग किए जाने वाले विधेय होंगे, जैसे:

public static bool isOdd(int num) => (num % 2) == 1;

यदि अभिव्यक्ति बहुत लंबी है, तो इसे अलग-अलग कार्यों में विभाजित करना बेहतर है या शायद मध्यवर्ती परिणामों के साथ एक फ़ंक्शन। यदि यह छोटा है, लेकिन आप एक अच्छे नाम के बारे में नहीं सोच सकते हैं, तो आप इस तरह के condition1या कुछ और भयानक नाम बनाने की बजाय अभिव्यक्ति की नकल करना बेहतर समझते हैं ।


21

से सी # / नेट लिटिल आश्चर्य:। अभिव्यक्ति शरीर सी # 6 में सदस्य :

तो, क्या आपको इसका उपयोग करना चाहिए? यह सब शैली के लिए नीचे आता है। मेरी हिम्मत इसे सरल अभिव्यक्तियों और बयानों तक सीमित करना होगी जो पहली नज़र में स्पष्ट रूप से समझा जा सकता है।

(जोर, मेरा; अद्यतन 1 देखें नीचे)

उपरोक्त लेख के सारांश से अधिक:

इसलिए C # 6 अब हमें केवल संपत्ति और अभिव्यक्ति के साथ विधि निकायों को निर्दिष्ट करने की क्षमता देता है। यह आपके कोड को अधिक संक्षिप्त बनाने के लिए बहुत सरल तरीकों के वाक्यविन्यास बोझ को कम करने में मदद कर सकता है।

हालांकि, सभी चीजों के साथ, अपने निर्णय का उपयोग करें कि क्या यह किसी भी स्थिति के लिए फिट बैठता है। जब एक अभिव्यक्ति बहुत लंबी या जटिल होती है, तो पूरे शरीर के सिंटैक्स का उपयोग करना अभी भी अधिक पठनीय हो सकता है।

और प्रदर्शन के बारे में एक और उद्धरण, क्योंकि प्रदर्शन समस्याएं भी तब खेल सकती हैं जब एक निश्चित भाषा सुविधा का उपयोग करना उचित हो:

अब, आप पूछ सकते हैं कि क्या रनटाइम के दौरान इसका कोई प्रदर्शन निहितार्थ है? दरअसल, इसका जवाब नहीं है । यह सिंटैक्टिकल चीनी है जो पूरे शरीर को लिखने के रूप में एक ही आईएल में फैलता है। यह एक प्रतिनिधि नहीं बनाता है, यह केवल एक अभिव्यक्ति में परिणाम देने वाले सरल निकायों को सरल बनाने के लिए लैम्ब्डा अभिव्यक्ति सिंटैक्स उधार ले रहा है।

(जोर, लेखक)

अद्यतन 1: @ JörgWMittag ने कहा

इसका कोई अर्थ नहीं निकलता। "इसे सरल भाव और कथन तक सीमित करें"? है ना? यह 'बयानों के साथ भी काम करता है, केवल भावों के साथ!

ऐसा लगता है कि मूल लेखक को गलत वर्तनी हो सकती है। नई और बेहतर C # 6.0 से स्पष्ट करने के लिए :

एक्सप्रेशन बॉडीड फ़ंक्शंस C # 6.0 में एक और सिंटैक्स सरलीकरण है। ये बिना किसी विवरण निकाय के कार्य हैं। इसके बजाय, आप उन्हें फ़ंक्शन घोषणा के बाद एक अभिव्यक्ति के साथ लागू करते हैं।

स्पष्ट होने के लिए, यह एक विधि या संपत्ति को एक अभिव्यक्ति नहीं बनाता है । यह कोड की लाइनों (और घुंघराले ब्रेसिज़ की संख्या) को कम करने के लिए अभिव्यक्ति सिंटैक्स का उपयोग करता है ।

मेरी मूल सिफारिश अभी भी खड़ी है: इसका उपयोग तब करें जब यह आपके कोड को स्पष्ट और समझने में आसान बनाता है, केवल इसलिए नहीं कि आप इसका उपयोग कर सकते हैं।


2
इसका कोई अर्थ नहीं निकलता। "इसे सरल भाव और कथन तक सीमित करें "? है ना? यह ' बयानों के साथ भी काम करता है, केवल भावों के साथ! मुझे यह भी विश्वास नहीं है कि अव्यवस्था (दो कोष्ठक और एक कीवर्ड) को जोड़ने सेreturn कभी भी अधिक पठनीयता हो सकती है। आखिरकार, जटिल अभिव्यक्ति अभी भी वही जटिल अभिव्यक्ति है, जो सिंटैक्टिक अव्यवस्था में दफन है।
जोर्ग डब्ल्यू मित्तग

3
मैंने जो अभिव्यक्ति पढ़ी है उससे शारीरिक सदस्य वास्तव में अभिव्यक्ति नहीं हैं। वे वाक्यात्मक चीनी हैं। जब तक ब्लॉग पोस्ट के बाद से सी # युक्ति नहीं बदली जाती है, यह शून्य रिटर्न प्रकारों के साथ समर्थन विधियों को करता है।
ग्रेग बरगार्ड

1
मैं गलत हो सकता हूं, लेकिन मेरा मानना ​​है कि एक्सप्रेशन स्टेटमेंट्स में साइड इफेक्ट्स बंद हो जाते हैं। तो मेरे लिए, अभिव्यक्ति कथनों का लाभ यह है कि आप पाठक को बता रहे हैं कि यह "अभिव्यक्ति" शुद्ध है और इसके कोई छिपे हुए दुष्प्रभाव नहीं हैं, जिन्हें आपको, पाठक को देखने की जरूरत है।
जॉन

1
@ जॉन "अस्वीकृत" पूरी तरह से गलत है। आप सभी शिलान्यास कर सकते हैं जैसे कि एक्शन बनाना, एक्शन डिक्लेरेशन के अंदर मेंबर वेरिएबल्स को सेट करना और फिर एक्शन को इनवाइट करना। इसलिए, दुष्प्रभाव स्पष्ट रूप से अस्वीकृत नहीं हैं। मैं निश्चित रूप से उन्हें हतोत्साहित करूंगा, वे अभिव्यक्ति वाक्य रचना की बात को याद करते हैं।
माफिया

@Mafii। धन्यवाद। मैंने तब से सीखा है कि आप "अभिव्यक्ति कथन" कर सकते हैं, जिसे "आधुनिक" के रूप में वर्णित किया गया था। मेरे लिए, हालांकि, बहुत विचार सिर्फ भ्रामक है।
जॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.