programming-languages - programming - हिस्ट्री ऑफ़ प्रोग्रामिंग लैंग्वेजेज




प्रोग्रामिंग भाषाओं का जिक्र करते समय "अभिव्यंजक" का क्या अर्थ है? (5)

'एक्सप्रेसिव' का मतलब है कि कोड लिखना आसान है जिसे समझना आसान है, संकलनकर्ता और मानव पाठक दोनों के लिए।

दो कारक जो अभिव्यक्ति के लिए बनाते हैं:

  • सहज ज्ञान युक्त पठनीय निर्माण
  • बॉयलरप्लेट कोड की कमी

कम अभिव्यंजक जावा eqivalent के साथ इस अभिव्यंजक ग्रूवी की तुलना करें:

3.times {
   println 'Hip hip hooray'
}

बनाम

for(int i=0; i<3; i++) {
    System.out.println("Hip hip hooray");
}

कभी-कभी आप स्पष्टता के लिए सटीक व्यापार करते हैं - ग्रूवी उदाहरण काम करता है क्योंकि यह ऐसे सामान को मानता है जो जावा आपको स्पष्ट रूप से निर्दिष्ट करने के लिए बनाता है।

इस शब्द को मैंने बहुत सुना जैसे "जावास्क्रिप्ट एक बहुत ही अभिव्यंजक भाषा है"। क्या इसका मतलब यह है कि बहुत सारे नियम नहीं हैं, या "अभिव्यंजक" का एक अधिक विशिष्ट अर्थ है?


मैं इसका मतलब यह निकालता हूं कि यह एक आसान-से-पढ़ने और रसीले तरीके से विचारों / एल्गोरिदम / कार्यों को व्यक्त करने में सक्षम है।

आमतौर पर मैं एक भाषा को जोड़-तोड़ वाली चीनी के साथ अभिव्यक्त करता हूं, हालांकि हमेशा ऐसा नहीं होता है। यह अभिव्यंजक होने के C # में उदाहरण होंगे:

  • foreach (स्पष्ट रूप से पुनरावृति लिखने के बजाय)
  • using कथन (स्पष्ट रूप से कोशिश / अंत में लिखने के बजाय)
  • क्वेरी अभिव्यक्ति (LINQ प्रश्न लिखने के लिए सरल सिंटैक्स)
  • विस्तार विधियाँ (मुख्य रूप से LINQ के लिए फिर से, विधि कॉल की अनुमति देना)
  • अनाम विधियां और लंबोदर भाव (आसान प्रतिनिधि और अभिव्यक्ति वृक्ष निर्माण की अनुमति)

एक अलग उदाहरण जेनरिक होगा: सी # से पहले जेनेरिक मिले, आप कोड में "केवल एक स्ट्रिंग युक्त एक ArrayList " के विचार को व्यक्त नहीं कर सकते थे। (आप इसे दस्तावेज़ कर सकते हैं, ज़ाहिर है, या अपने स्वयं के StringList प्रकार लिख सकते हैं, लेकिन यह बिल्कुल समान नहीं है।)


वह काफी मुश्किल है।

मेरे लिए, यह उस सहजता के साथ करना है जिस पर आप अपनी मंशा व्यक्त कर सकते हैं। यह अलग-अलग भाषाओं में अलग-अलग है, और यह भी बहुत कुछ इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं, इसलिए यह एक ऐसा क्षेत्र है जहाँ सामान्यीकरण सामान्य हैं। यह निश्चित रूप से व्यक्तिपरक और व्यक्तिगत भी है।

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

यदि आप फ़्लोटिंग-पॉइंट संख्या को प्रिंट करना चाहते हैं जिसमें बाइनरी पैटर्न 0xdeadbeef , तो उदाहरण के लिए, बश की तुलना में C में करना बहुत आसान है। फिर भी बैश, सी की तुलना में एक अति-उच्च-स्तरीय भाषा है। दूसरी ओर, यदि आप कोई प्रोग्राम चलाना चाहते हैं और उसके आउटपुट को टेक्स्ट फाइल में इकट्ठा करना चाहते हैं, तो यह इतना आसान है कि यह बैश में लगभग अदृश्य है, फिर भी सी में कोड के कम से कम पेज की आवश्यकता होगी (एक POSIX वातावरण मानकर)।


शायद यह साइट http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html आपकी सहायता कर सकती है

संक्षेप में वे कहते हैं : मेरे दिमाग में, एक भाषा निर्माण अभिव्यंजक है यदि यह आपको एक एपीआई लिखने (और उपयोग करने) में सक्षम बनाता है जिसे निर्माण के बिना लिखा (और उपयोग) नहीं किया जा सकता है। जावा प्रस्तावित भाषा विस्तार के लिए क्लोजर के संदर्भ में, नियंत्रण अमूर्त एपीआई एक तरह की चीज है जो प्रतिस्पर्धी प्रस्तावों द्वारा समर्थित नहीं लगती है।


नील ग्रेगर के पास इस विषय पर एक अच्छी उद्धरण के साथ एक ब्लॉग है ...

मेरे दिमाग में, एक भाषा निर्माण अभिव्यंजक है यदि यह आपको एक एपीआई लिखने (और उपयोग करने) में सक्षम बनाता है जिसे निर्माण के बिना नहीं लिखा जा सकता (और उपयोग किया जाता है)।

मैं कहूंगा कि इसका मतलब है कि आप कोड में अपने विचारों को अधिक स्वाभाविक रूप से व्यक्त कर सकते हैं।