यदि आप कोई भाषा सीख रहे हैं, तो आपने संभवतः "वाक्यविन्यास" शब्द सुना होगा और हर समय इससे निपटते होंगे। (कमबख्त सिंटैक्स त्रुटि).
यह कुछ रात पहले की बात है जब मैं मन ही मन सोच रहा था, मैंने कभी भी प्रोग्रामिंग प्रतिमानों और तकनीकों का गंभीरता से पालन नहीं किया था, और आज मैंने उन छोटे-छोटे विषयों से सीखना शुरू कर दिया है जो मैं हमेशा सुनता हूं (भले ही मुझे पहले से ही याद हो)। मैंने यह रिपॉजिटरी बनाई है. मैंने जो सीखने का मार्ग अपनाया वह विशिष्ट है (LEARNING_LIST.md फ़ाइल में)। चलिए, प्राकृतिक भाषाओं के विपरीत, जिसके साथ हम अपने विचारों और भावनाओं को संप्रेषित करते हैं, प्रोग्रामिंग भाषाओं को पुरुषों और महिलाओं द्वारा शुरू में कंप्यूटर के साथ संचार करने के उद्देश्य से परिभाषित कृत्रिम भाषाओं के रूप में देखा जा सकता है, लेकिन महत्वपूर्ण रूप से, लोगों के बीच एल्गोरिदम संचार करने के लिए भी। .
उदाहरण के लिए, भाषा परिभाषाओं में तीन घटक होते हैं:
सिंटैक्स: एक प्रोग्रामिंग भाषा का सिंटैक्स नियमों का सेट है जो प्रतीकों के संयोजन को परिभाषित करता है जिन्हें उस भाषा में सही ढंग से संरचित प्रोग्राम माना जाता है। किसी भाषा का वाक्य-विन्यास उसके सतही स्वरूप को परिभाषित करता है। टेक्स्ट-आधारित प्रोग्रामिंग भाषाएं वर्णों के अनुक्रम पर आधारित होती हैं। किसी पाठ्य भाषा का शाब्दिक व्याकरण निर्दिष्ट करता है कि कैसे वर्णों को टोकन में विभाजित किया जाना चाहिए। सिंटेक्स उन तरीकों को संदर्भित करता है जिनसे भाषा में अच्छी तरह से गठित वाक्य (या प्रोग्राम) बनाने के लिए प्रतीकों को जोड़ा जा सकता है। सिंटैक्स किसी भाषा के घटकों के बीच औपचारिक संबंधों को परिभाषित करता है, जिससे भाषा में कानूनी तार बनाने वाली विभिन्न अभिव्यक्तियों का संरचनात्मक विवरण प्रदान किया जाता है। सिंटैक्स किसी भाषा में केवल प्रतीकों के रूप और संरचना से संबंधित है, उनके अर्थ पर कोई विचार किए बिना, सिंटैक्स वह अवधारणा है जो केवल इस बात से संबंधित है कि वाक्य भाषा के व्याकरण के लिए मान्य है या नहीं।
शब्दार्थ: शब्दार्थ इस बारे में है कि वाक्य का कोई वैध अर्थ है या नहीं। शब्दार्थ किसी भाषा में वाक्यात्मक रूप से मान्य स्ट्रिंग्स के अर्थ को प्रकट करता है। प्राकृतिक भाषाओं के लिए, इसका मतलब हमारे अनुभवों की वस्तुओं, विचारों और भावनाओं के साथ वाक्यों और वाक्यांशों को सहसंबंधित करना है। प्रोग्रामिंग भाषाओं के लिए, शब्दार्थ उस व्यवहार का वर्णन करता है जो कंप्यूटर किसी भाषा में प्रोग्राम निष्पादित करते समय अपनाता है। हम किसी प्रोग्राम के इनपुट और आउटपुट के बीच संबंध का वर्णन करके या किसी वास्तविक या अमूर्त मशीन पर प्रोग्राम कैसे निष्पादित होगा, इसकी चरण-दर-चरण व्याख्या करके इस व्यवहार का खुलासा कर सकते हैं। अर्थ के अध्ययन के लिए शब्दार्थ विज्ञान सामान्य शब्द है। कंप्यूटर विज्ञान में, प्रोग्रामिंग भाषा शब्दार्थ का विषय कार्यक्रमों को सटीक गणितीय अर्थ देना चाहता है।
प्राकृतिक भाषाओं में, एक वाक्य व्याकरणिक रूप से सही हो सकता है लेकिन अर्थहीन हो सकता है। उदाहरण के लिए, वाक्य:
"आदमी ने दुकान से अनंत खरीदा।"
यह व्याकरणिक रूप से सही है लेकिन वास्तविक दुनिया में इसका कोई मतलब नहीं है। इसी तरह, प्रोग्रामिंग भाषाओं में, एक कथन वाक्यात्मक रूप से सही हो सकता है लेकिन शब्दार्थ की दृष्टि से गलत हो सकता है क्योंकि यह भाषा के नियमों या उसके इच्छित अर्थ का उल्लंघन करता है।
प्रोग्रामिंग के निम्न-स्तरीय शब्दार्थ में, हम इस बात से चिंतित हैं कि क्या सही वाक्यविन्यास वाला कथन भाषा की प्रकार प्रणाली या अन्य नियमों के अनुसार भी समझ में आता है। भले ही वाक्यविन्यास वैध हो, ऑपरेशन का अर्थपूर्ण अर्थ अमान्य हो सकता है। जावा जैसी स्थिर रूप से टाइप की गई भाषाओं में टाइप सिस्टम रनटाइम से पहले इन नियमों को लागू करने में मदद करता है, लेकिन जावास्क्रिप्ट जैसी गतिशील रूप से टाइप की गई भाषाएं हमेशा रनटाइम तक इन नियमों को लागू नहीं करती हैं।
जावास्क्रिप्ट में, जो कि शिथिल रूप से टाइप किया गया है, आपके पास वह सुरक्षा नहीं हो सकती है जो एक सख्त प्रकार की प्रणाली के साथ आती है, और भाषा कुछ ऐसे परिचालनों की अनुमति देगी जो अर्थपूर्ण रूप से अर्थपूर्ण नहीं हैं। निम्नलिखित जावास्क्रिप्ट कोड पर विचार करें:
let name = "Alice"; name = 42; // No error, but semantically this doesn't make sense.
यहाँ, वाक्यविन्यास पूरी तरह से मान्य है, और जावास्क्रिप्ट असाइनमेंट की अनुमति देता है, लेकिन शब्दार्थ की दृष्टि से यह अजीब है। आप एक वेरिएबल को एक संख्या (42) निर्दिष्ट करने का प्रयास कर रहे हैं जिसका उद्देश्य संभवतः एक स्ट्रिंग (नाम) रखना है। आपको यह गलती करने से रोकने के लिए जावास्क्रिप्ट में कोई टाइप-चेकिंग नहीं है, लेकिन यह एक निम्न-स्तरीय सिमेंटिक त्रुटि है क्योंकि यह डेवलपर के इरादे से असंगत है।
अगर हम इस पर अमल करें. इसे क्रियान्वित किया जाता है. बिना किसी त्रुटि के!
टाइपस्क्रिप्ट या जावा जैसी सख्त भाषाओं में, यह संकलन के दौरान तुरंत एक प्रकार की त्रुटि को ट्रिगर करेगा।
टाइपस्क्रिप्ट, जावास्क्रिप्ट का एक सुपरसेट, इन निम्न-स्तरीय अर्थ संबंधी समस्याओं को रोकने के लिए टाइप-चेकिंग की शुरुआत करता है:
let name: string = "Alice"; name = 42; // Error: Type 'number' is not assignable to type 'string'.
टाइपस्क्रिप्ट में, कंपाइलर सिमेंटिक त्रुटि का पता लगाता है क्योंकि 42 एक संख्या है और इसे स्ट्रिंग के रूप में घोषित वेरिएबल को नहीं सौंपा जा सकता है। प्रकारों का यह प्रवर्तन डेवलपर को अनपेक्षित गलतियों से बचाता है।
जावास्क्रिप्ट में, इन निम्न-स्तरीय अर्थ संबंधी समस्याओं से बचने के लिए, डेवलपर्स अक्सर रनटाइम चेक का उपयोग करते हैं:
let name = "Alice"; if (typeof name !== "string") { throw new Error("Expected a string!"); }
हालांकि जावास्क्रिप्ट प्रकारों को लागू नहीं करता है, मैन्युअल जांच जोड़ने से उन त्रुटियों से बचने में मदद मिल सकती है जहां गलत प्रकार प्रोग्राम में समस्याएं पैदा करते हैं।
उच्च स्तर पर, शब्दार्थ का संबंध इस बात से है कि आपका कार्यक्रम क्या हासिल करना चाहता है। यह सिर्फ इस बारे में नहीं है कि क्या प्रोग्राम में वैध सिंटैक्स है या क्या प्रकार सही ढंग से संरेखित हैं - यह इस बारे में है कि क्या प्रोग्राम डेवलपर के इच्छित तरीके से व्यवहार करता है, या उस समस्या को हल करता है जिसके लिए इसे संबोधित किया गया था।
उदाहरण के लिए, मान लें कि आप एक सरल स्टॉक ट्रेडिंग सिस्टम बना रहे हैं। आपके कोड का उच्च-स्तरीय शब्दार्थ यह सुनिश्चित करने के बारे में है कि सिस्टम सही व्यावसायिक तर्क के साथ, सही तरीके से स्टॉक का व्यापार करता है। भले ही कोड प्रकार की त्रुटियाँ या सिंटैक्स त्रुटियाँ उत्पन्न नहीं करता है, फिर भी यह इच्छित कार्यक्षमता को पूरा करने में विफल हो सकता है।
आइए सरलीकृत स्टॉक ट्रेडिंग परिदृश्य का उपयोग करते हुए उच्च-स्तरीय शब्दार्थ का एक जावास्क्रिप्ट उदाहरण देखें:
let openTrade = { symbol: "EURUSD", direction: "buy", profit: 100 }; function closeTrade(trade) { if (trade.profit >= 50) { console.log(`Closing trade for ${trade.symbol} with profit of ${trade.profit}`); } else { console.log(`Trade for ${trade.symbol} is not ready to close.`); } } // Check if a trade is open for EURUSD and close it if the profit target is reached. closeTrade(openTrade);
सिंटैक्स सही है, और प्रोग्राम त्रुटियों के बिना चलता है। हालाँकि, कल्पना करें कि अब हम उच्च स्तर पर एक गलती पेश करते हैं, जैसे गलती से एक ही प्रतीक के लिए दो ट्रेड दर्ज करना, जो सिस्टम के व्यावसायिक नियमों का उल्लंघन करता है।
let openTrades = [ { symbol: "EURUSD", direction: "buy", profit: 100 }, { symbol: "EURUSD", direction: "sell", profit: 20 } ]; // Check all trades and close any that hit their profit target. openTrades.forEach(trade => closeTrade(trade));
यहां, दोनों ट्रेडों को स्वतंत्र रूप से संसाधित किया जाता है, लेकिन सिस्टम एक ही प्रतीक पर दो ट्रेडों के साथ समाप्त होता है, एक खरीद दिशा में और एक बिक्री दिशा में। यह उच्च-स्तरीय व्यापार नियम को तोड़ता है कि हमें किसी भी समय प्रति प्रतीक केवल एक खुला व्यापार करना चाहिए।
हालांकि कोड सिंटैक्स या प्रकार की त्रुटियों के बिना निष्पादित होता है, यह उच्च स्तर पर शब्दार्थ की दृष्टि से गलत है। सिस्टम तर्क को यह सुनिश्चित करना चाहिए था कि एक समय में प्रति प्रतीक केवल एक ही व्यापार सक्रिय हो सकता है। इस त्रुटि के कारण वास्तविक दुनिया की व्यापार प्रणाली में वित्तीय हानि जैसे अनपेक्षित परिणाम होने की संभावना है।
इस उच्च-स्तरीय सिमेंटिक समस्या को ठीक करने के लिए, आपको यह सुनिश्चित करने के लिए तर्क को समायोजित करने की आवश्यकता होगी कि किसी विशेष प्रतीक के लिए केवल एक व्यापार खुला है:
let openTrades = [ { symbol: "EURUSD", direction: "buy", profit: 100 } ]; function openNewTrade(newTrade) { // Ensure no other trades are open for the same symbol. const existingTrade = openTrades.find(trade => trade.symbol === newTrade.symbol); if (!existingTrade) { openTrades.push(newTrade); console.log(`Opened new trade for ${newTrade.symbol}`); } else { console.log(`Cannot open a new trade for ${newTrade.symbol}, trade already exists.`); } } openNewTrade({ symbol: "EURUSD", direction: "sell", profit: 0 });
यहाँ, तर्क यह सुनिश्चित करता है कि यदि उसी प्रतीक के लिए पहले से ही एक सक्रिय व्यापार है तो एक नया व्यापार नहीं खोला जा सकता है। यह एक उच्च-स्तरीय सिमेंटिक फिक्स है क्योंकि यह सिंटैक्स या प्रकार की समस्या के बजाय मुख्य व्यावसायिक तर्क को संबोधित करता है जिसका प्रोग्राम को पालन करना है।
यह प्रत्येक के बारे में बस बुनियादी जानकारी थी। अधिक जानकारी के लिए, आप ये आइटम पढ़ सकते हैं:
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3