क्या कोई प्रोग्रामिंग भाषा बिना बयानों के भी काम कर सकती है?


9

जावास्क्रिप्ट में प्रोग्रामिंग के रूप में, मैंने उन सभी चीजों पर ध्यान दिया है जो बयानों और ब्लॉकों के साथ किया जा सकता है, अकेले अभिव्यक्तियों के साथ किया जा सकता है। क्या एक प्रोग्रामिंग भाषा केवल भावों के साथ ठीक काम कर सकती है? और, यदि हाँ, तो बयानों का उपयोग क्यों किया जाता है?


2
हां, रूबी और लिस्प की सभी बोलियों के रूप में कई सब-ए-एक्सप्रेशन भाषाएँ हैं।
अमरा

@sparkleshy मैं देखता हूं, बस एक अनुमान है: वे सभी जावास्क्रिप्ट के अल्पविराम के लिए एक ऑपरेटर एनालॉग हैं (यह दो बयानों को निष्पादित करता है और अंतिम का मान लौटाता है)? क्या यह आम तौर पर अनुक्रम में दो बयानों को निष्पादित करने का समाधान है? मैं एक एनालॉग के रूप में सीएल की भविष्यवाणी की गिनती कर रहा हूं, मुझे लगता है, भले ही यह> 2 अभिव्यक्तियों के लिए काम करता हो।
MaiaVictor

1
सब कुछ-एक-ए-एक्सप्रेशन एक साधारण स्टेटमेंट लैंग्वेज, स्टेटमेंट्स से अलग दिखने की जरूरत नहीं है ... वैल्यूज हैं। यदि आपने जावास्क्रिप्ट के स्टेटमेंट एक्सप्रेशन बनाए हैं, तो सभी मौजूदा कोड पूरी तरह से मान्य होंगे।
अमरा

1
कॉफीस्क्रिप्ट एक सब- -एक्सप्रेशन भाषा है, जो जावास्क्रिप्ट के लिए संकलित है।
Spoike

1
संबंधित (संभवतः एक डुप्लिकेट): क्या उपयोगी अभिव्यक्ति एक भाषा में असंभव होगी जहां एक अभिव्यक्ति एक बयान नहीं है? "क्यों इतने सारे व्याकरण हैं एक्सप और stmt के बीच अंतर जब जवाब में उल्लेख किया है, यह समझ में आता है।"
gnat

जवाबों:


14

ज़रूर। सबसे सरल तरीका यह है कि वर्तमान में एक बयान में हर निर्माण के लिए एक परिणाम मूल्य निर्दिष्ट किया जाए और इस तरह इसे एक अभिव्यक्ति में बदल दिया जाए। हालांकि यह उपयोगी या सार्थक जरूरी नहीं है। एकमात्र संभावित लाभ वैचारिक सादगी का एक सा है। हालाँकि, यदि आप तब अर्धविराम और लूप जैसी चीजों को हटाने के लिए आगे बढ़ते हैं (इसके बजाय अन्य ऑपरेटरों और कार्यों के माध्यम से चाइनिंग की आवश्यकता होती है), तो कार्यक्रमों के भारी उपयोग से बयान बदसूरत हो जाते हैं।

ऐसा करने का एक अधिक कट्टरपंथी लेकिन सार्थक तरीका यह है कि भाषा को ऐसे डिज़ाइन किया जाए कि लगभग हर चीज़ का एक सार्थक मूल्य हो, और इसे इस तरह से उपयोग करें कि आप लगभग हमेशा उस सार्थक मूल्य के लिए एक अभिव्यक्ति का उपयोग करें, अन्य प्रभावों के लिए नहीं। फ़ंक्शनल प्रोग्रामिंग लैंग्वेज ऐसा करती हैं (कुछ हद तक; उदाहरण के लिए, हास्केल में घोषणाएँ हैं, जो अभिव्यक्ति नहीं हैं)।

स्टेटमेंट का उपयोग किया जाता है क्योंकि अनिवार्य प्रतिमान में, कई सामान्य ऑपरेशन होते हैं, जिनका उपयोगी परिणाम मूल्य नहीं होता है, और क्योंकि अनुक्रमिक निर्देशों (गणना के बजाय) की धारणा उस प्रतिमान को काफी अच्छी तरह से फिट करती है। यदि आपके कार्यक्रम का एक बड़ा प्रतिशत नए मूल्यों की गणना करने के बजाय, राज्य को परिवर्तित कर रहा है, तो इसका मतलब यह नहीं है कि मूल्य के उत्पादन की आवश्यकता क्या है (एक लूप का परिणाम क्या है?)। इसके विपरीत, जब आपका पूरा प्रतिमान (FP) मानों की गणना के आसपास बनाया जाता है, तो आउटलेयर के पास जो परिणाम मान नहीं होता है वह एक अपवाद को वारंट नहीं करता है: इसके बजाय आप उन्हें एक संतरी परिणाम देते हैं जिसका मतलब यह नहीं है।


-1 यह वास्तव में सच नहीं है
amara

3
@sparkleshy क्या हिस्सा सच नहीं है, और कैसे?

1
पहला पैराग्राफ: आप इस विचार पर संदेह करते हैं कि बयानों में उपयोगी रिटर्न मान हैं (लेकिन कई करते हैं), एक बदसूरत चीज का प्रस्ताव करते हैं (क्यों?)। दूसरा पैराग्राफ: घोषणा करता है कि सभी कार्यात्मक प्रोग्रामिंग भाषाएं इस बदसूरत फ्रिंज अवधारणा का उपयोग करती हैं, जो हास्यास्पद है। तीसरा पैराग्राफ: गलत, हमारे पास {} ब्लॉक में पहले से ही, मूल्य को अनदेखा किया गया है और यह किसी भी समस्या का कारण नहीं है, गलत; आप उन्हें पहले से ही शून्य का अभाव दे रहे हैं, यह कैसे कम से कम सार्थक है? कुल मिलाकर: यह वास्तव में सच नहीं है
amara

2
@sparkleshy - किसी भी कथन में उपयोगी रिटर्न मान नहीं हैं, इसीलिए वे कथन हैं । उनके पास उपयोगी दुष्प्रभाव हो सकते हैं (जैसे असाइनमेंट), लेकिन यह एक ही बात नहीं है। यह वास्तव में एक फ्रिंज अवधारणा नहीं है। यह अच्छी तरह से ज्ञात है कि अगर पूरी तरह से व्यावहारिक नहीं है तो इसे एनटीएच डिग्री तक ले जाया जाता है। और उस प्रहरी मूल्य शून्य या शून्य नहीं है, यह इकाई है जो दोनों से सूक्ष्म रूप से भिन्न है। इस के लिए बनाने के लिए डेलान के लिए +1।
तेलस्तीन

4
@sparkleshy (1) आप कथन के साथ अभिव्यक्ति (जो कि कथन का एकमात्र घटक हो सकता है) हो सकते हैं (जो अभिव्यक्ति नहीं हैं और जिसका कोई परिणाम नहीं है)। (२) क्या? कोई भी एफपी अधिवक्ता इसकी पुष्टि करेगा (और तर्क देता है कि यह एक अच्छी बात है)। या यह केवल "सभी" हिस्सा है जिस पर आपको आपत्ति है? (3) {} ब्लॉक हैं जो मैं बात कर रहा हूं ("अनुक्रमिक निर्देशों की धारणा")। और मैं कहां कहता हूं कि किसी भी समस्या का कारण बनता है? के बीच voidऔर null/ या अंतर यह unitहै कि उत्तरार्द्ध मान हैं और इसे पास किया जा सकता है, जबकि इसमें voidविशेष यह है कि उस प्रकार का कोई मूल्य नहीं है।

5

इस बात पर निर्भर करता है कि आप "कथन" और "अभिव्यक्ति" को कैसे परिभाषित करते हैं।

एक बहुत सख्त परिभाषा "चीजों के साइड इफेक्ट्स, और शायद एक वापसी मूल्य" के रूप में बयानों के बीच अंतर करेगी और अभिव्यक्ति "उन चीजों के रूप में जिनके पास रिटर्न मान हैं, लेकिन साइड इफेक्ट्स नहीं हो सकते"। इस तरह की परिभाषा के साथ, कोई भी सार्थक कार्यक्रम कम से कम एक बयान के बिना नहीं लिखा जा सकता है (जिसे एक अभिव्यक्ति का मूल्यांकन करना होगा और इसकी वापसी मूल्य का उत्पादन करना होगा) - शुद्ध अभिव्यक्ति अकेले कार्यक्रम के बाहर की दुनिया के साथ बातचीत नहीं कर सकती है। अकेले एक भाषा अभी भी पूरी तरह से शुद्ध हो सकती है (यानी, कोई कथन नहीं है), अगर अशुद्ध भाग को भाषा से बाहर और सहायक पारिस्थितिकी तंत्र में ले जाया जाता है (जो कि हास्केल करता है, हालांकि भाषा की परिभाषाएं और अभिव्यक्ति भी हैं) ।

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

कई भाषाएं अभी भी इस वाक्यविन्यास अंतर को बनाती हैं, क्योंकि यह तकनीकी कारणों से नहीं, बल्कि पठनीयता के लिए उपयोगी है। कुछ को एक अभिव्यक्ति संकेत देता है कि आप इसके वापसी मूल्य में रुचि रखते हैं, कम इसके दुष्प्रभाव; इसे बयान करना पाठक को बताता है कि आप इसे साइड इफेक्ट का कारण बनाना चाहते हैं, और वापसी मूल्य दिलचस्प हो सकता है या नहीं।


पठनीयता के बारे में टिप्पणी के लिए +1 ... अंत में, मनुष्य यह समझने की जरूरत है ...
mattnz

1

ATL और Xtend स्टेटमेंट-कम वेल वर्किंग प्रोग्रामिंग लैंग्वेज हैं। कई कार्यात्मक भाषाएं स्टेटमेंट-लेस भी होती हैं। तो, हाँ एक प्रोग्रामिंग भाषा बयानों के बिना ठीक काम कर सकती है। मुझे लगता है कि बयान कई भाषाओं में अनिवार्य प्रोग्रामिंग से राहत देते हैं। वे अभी भी उपयोग किए जाते हैं क्योंकि वे व्यापक रूप से ज्ञात हैं और कुछ मामलों के लिए वे कोड को अधिक पठनीय बनाते हैं।


1

हाँ।

कार्यात्मक भाषाएँ (और एकल असाइनमेंट भाषाएँ) सब कुछ एक अभिव्यक्ति है। उदाहरण हास्कल (और SISAL) हैं। जहां दोनों यदि कथन और लूप के लिए मान लौटाते हैं।

भाषाओं के अन्य वर्ग हैं: मन को आसान बनाने वाली घोषणात्मक भाषाएं हैं (मुझे यकीन है कि कई अन्य हैं जो बयानों पर निर्भर नहीं हैं)। इन भाषाओं को भी अभिव्यक्ति की आवश्यकता नहीं है (उसी अर्थ में जैसा कि आप आमतौर पर सोचते हैं)। आप घोषणा करते हैं कि क्या सच है और आप कई परिणाम वापस पा सकते हैं। यहाँ आसान है prolog


हास्केल में घोषणाएं हैं, वे अभिव्यक्ति नहीं हैं।
Janus Troelsen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.