भाषाओं में एक तार्किक ऑपरेटर के रूप में निहितार्थ क्यों शामिल नहीं है?


60

यह एक अजीब सवाल हो सकता है, लेकिन कई भाषाओं (जावा, सी, सी ++, पायथन हास्केल में एक तार्किक ऑपरेटर के रूप में कोई निहितार्थ नहीं है - हालांकि पिछले एक के रूप में उपयोगकर्ता परिभाषित ऑपरेटरों को जोड़ने के लिए अपने तुच्छ हैं)? मुझे लिखने के लिए तार्किक निहितार्थ बहुत स्पष्ट है (विशेष रूप से मुखर या मुखर-जैसे भावों में) तब या साथ में नकारना:

encrypt(buf, key, mode, iv = null) {
    assert (mode != ECB --> iv != null);
    assert (mode == ECB || iv != null);
    assert (implies(mode != ECB, iv != null)); // User-defined function
}

28
क्योंकि इसे C में नहीं डाला गया था; अगर इसे डाला जाता है तो C ++, Java और C # होता।
m3th0dman

4
लेकिन सी में यह नहीं है, बदले में, क्योंकि यह विधानसभा भाषा का एक आम हिस्सा नहीं है। जबकि सभी निर्देश सेट मैं शामिल है और, या नहीं का पता है, मुझे पता है कि कोई भी शामिल नहीं है का तात्पर्य है - कोई संदेह नहीं है कि कोई मुझे कुछ अस्पष्ट निर्देश सेट के बारे में बताने के लिए होगा जो शीघ्र ही करता है ...
जैक एदले

4
शायद इसे बेमानी माना जाता था क्योंकि (1) यह "^", "v", "~" की तुलना में कम आदिम है, (2) "A => B" के बाद से यह बहुत कम टाइपिंग बचाता है, "~ A v B" के बराबर है ।
जियोर्जियो

4
तार्किक निर्माण से निपटने वाली भाषाओं में इसके होने की संभावना अधिक होती है। इनमें मुख्यतः है prolog

9
मुझे आश्चर्य है कि आपको लगता है कि assert# 1 # 2 की तुलना में स्पष्ट है। मैंने कुछ समय के लिए # 1 को देखा है और अभी भी यह नहीं देख सकता कि यह व्यवहार कैसे सहज माना जा सकता है। (विशेष रूप !=से तर्क को पलटते हुए)
क्रिस बर्ट-ब्राउन

जवाबों:


61

यह कभी कभी, कोई संदेह नहीं है उपयोगी हो सकता है। ऐसे ऑपरेटर के खिलाफ कई बिंदुओं का तर्क है:

  • वर्ण -और >मूल्यवान हैं, दोनों अलगाव और संयुक्त में। कई भाषाएं पहले से ही उन्हें अन्य चीजों के लिए उपयोग करती हैं। (और कई अपने सिंटैक्स के लिए यूनिकोड वर्ण सेट का उपयोग नहीं कर सकते हैं।)
  • प्रोग्रामर जैसे तर्क-बुद्धि वाले लोगों के लिए भी इंप्लिकेशन बहुत प्रति-सहज है। चार सत्य तालिका प्रविष्टियों में से तीन तथ्य trueकई लोगों को आश्चर्यचकित करते हैं।
  • अन्य सभी तार्किक ऑपरेटर सममित हैं, जो ->ऑर्थोगोनलिटी को अपवाद बना देगा ।
  • उसी समय, एक आसान समाधान है: ऑपरेटरों का उपयोग करें !और ||
  • इम्प्लांटेशन का उपयोग तार्किक and/ की तुलना में बहुत कम बार किया जाता है or

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


22
आपका पहला बिंदु केवल ऑपरेटर के लिए प्रतीक के रूप में '->' का उपयोग करने के खिलाफ तर्क देता है, वास्तव में ऑपरेटर के खिलाफ नहीं। दूसरे अच्छे अंक हैं।
एएसएचली

14
"एक ही समय में, एक आसान तरीका है: उपयोग! और !और ||, नहीं !और &&: A -> Bके बराबर है !A || Bजो के बराबर है !(A && !B)
जियोर्जियो

22
"चार सत्य तालिका प्रविष्टियों में से तीन सच हैं जो कई लोगों को आश्चर्यचकित करती हैं।" वाट। मैं एक अन्य ऑपरेटर को उसी विशेषता के साथ जानता हूं जिसका उपयोग अक्सर किया जाता है ...
l0b0

9
@ l0b0, मैं एक प्रोग्रामर हूँ जिसने CS की पढ़ाई की है, लेकिन यह बहुत समय पहले की बात है। मैं भूल गया था कि "आर्गेज्म" दो ऑपरेंड्स के साथ एक औपचारिक ऑपरेशन है जो एक सत्य मूल्य देता है, इसलिए सबसे पहले मैं इस प्रश्न की प्रकृति पर उलझन में था। रोज़मर्रा के भाषण में, मैं केवल "इंप्रेशन" का उपयोग करता हूं जब पहले ऑपरेंड को पहले से ही सच जाना जाता है ("एक्स सच है, इसलिए वाई को सच होना चाहिए")। एक मिनट के बाद, मुझे याद आया कि औपचारिक "काम" का अर्थ क्या है, लेकिन यह तथ्य अभी भी बना हुआ है - यहां तक ​​कि किसी के लिए जिसने एक बार औपचारिक तर्क का अध्ययन किया था, वह इरादा मेरे लिए स्पष्ट नहीं था। और अगर मैंने कभी इसका अध्ययन नहीं किया होता, तो अंततः इसका कोई मतलब नहीं होता।
बेन ली

5
(ए) सी में -> एक ऑपरेटर के रूप में प्रयोग किया जाता है। उस बारे में कोई शिकायत नहीं करता। मैं वैसे भी = का उपयोग करेगा। (ख) किसके प्रति जवाबी-सहज? निहितार्थ की परिभाषा बस यही है, एक परिभाषा। (c) घटाव कम्यूटेटिव नहीं है। उस बारे में कोई शिकायत नहीं करता। (d) मुझे लगता है कि आपका मतलब है! और || पूर्वता के कारण (और) भी अक्सर आवश्यक होते हैं। उसी तर्क का उपयोग && या के खिलाफ किया जा सकता है || अपना चयन ले लो। (e) शायद ऐसा इसलिए है क्योंकि यह अधिकांश भाषाओं में नहीं है। कई उपयोग || संक्षेप में और (मुझे कम से कम) सहज रूप से निहितार्थ द्वारा प्रतिस्थापित किया जा सकता है।
थियोडोर नॉरवेल

54

मेरा मानना ​​है कि उत्तर गणितीय नींव में निहित है । आमतौर पर इम्प्लांटेशन माना जाता है और इसे व्युत्पन्न माना जाता है, प्राथमिक नहीं, बूलियन बीजगणित का संचालन। प्रोग्रामिंग भाषाएं इस सम्मेलन का पालन करती हैं।

यह जॉर्ज बोले की विचारधारा के कानूनों की जांच (1854) से अध्याय II का प्रस्ताव I है :

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

1। शाब्दिक प्रतीक, x, y, और c के रूप में, चीजों को हमारी अवधारणाओं के विषयों के रूप में दर्शाते हैं।

2। ऑपरेशन के संकेत, जैसे +, -, ×, मन के उन कार्यों के लिए खड़े होते हैं जिनके द्वारा चीजों की अवधारणाओं को संयोजित या हल किया जाता है ताकि समान तत्वों को शामिल करने वाली नई अवधारणाएं बन सकें।

3। पहचान का संकेत, =।

और लॉजिक के ये प्रतीक निश्चित कानूनों के अधीन हैं, आंशिक रूप से सहमत हैं और बीजगणित के विज्ञान में संबंधित प्रतीकों के नियमों से आंशिक रूप से भिन्न हैं।

Boole का चिन्ह + उसी "मन के संचालन" का प्रतिनिधित्व करता है जिसे हम आज बूलियन ´or´ और सेटों के मिलन के रूप में पहचानते हैं। इसी तरह संकेत - और × हमारे बूलियन नकार के अनुरूप हैं, एक सेट के पूरक हैं, बूलियन ´and´ और सेट के प्रतिच्छेदन।


+1 - ठोस जवाब। बूलियन बीजगणित और तर्क में सरलीकरण कि यह बहुत सारी प्रोग्रामिंग पद्धति को चलाने की अनुमति देता है। एक "तात्पर्य ..." का उपयोग करके संभावित रूप से "परवाह न करें" स्थितियों में हस्तक्षेप होगा।

3
1. जो परिभाषा पर निर्भर करता है। यह परिभाषित करना संभव है या a || b = !(!a && !b)(मैं तर्क में व्युत्पन्न ऑपरेटर के रूप में मिला या)। 2. कारण यह किया जाता है आमतौर पर प्रेरण को आसान बनाने के लिए मुझे विश्वास होता है (हम जानते हैं कि व्युत्पन्न ऑपरेटर सिर्फ शॉर्ट-कट हैं इसलिए हमें उनके लिए अलग से मामला रखने की आवश्यकता नहीं है)। @ GlenH7: क्या "परवाह नहीं" की स्थिति है? a --> bके रूप में ही है !a || b
मिकीज पीचोटका

3
इसके अलावा - हमारे पास अन्य व्युत्पन्न ऑपरेटर जैसे xor ( !=) nxor ( ==) हैं ...
Maciej Piechotka

5
असल में, आप सब कुछ नंद !(a && b)या NOR से प्राप्त कर सकते हैं !(a || b)। उदाहरण के लिए, , NOT a == a NAND a, ।a AND b == NOT(a NAND b) a OR b == (NOT a) NAND (NOT b)लेकिन केवल एक नंद ऑपरेटर प्रदान करना आपको गूढ़ भाषाओं के दायरे में रखता है (जो आश्चर्यजनक रूप से अच्छी तरह से फिट बैठता है, उत्तर देने वाले का उपयोगकर्ता नाम ;-))।
स्टीफन माज्यूस्की

1
@Stefan: आप सब कुछ एक IMPL से प्राप्त कर सकते हैं।
मेसन व्हीलर

37

अद्यतन: यह सवाल नवंबर 2015 में मेरे ब्लॉग का विषय था । दिलचस्प सवाल के लिए धन्यवाद!


विजुअल बेसिक 6 (और VBScript) था Impऔर Eqvऑपरेटरों। कोई उनका उपयोग नहीं करता था। दोनों को VB.NET में हटा दिया गया था; मेरी जानकारी के लिए, किसी ने शिकायत नहीं की।

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

आपने सी जैसी भाषाओं का उल्लेख किया। मैं C या C ++ या Java से बात नहीं कर सकता लेकिन मैं C # से बात कर सकता हूं। सी # के लिए उपयोगकर्ता द्वारा सुझाई गई सुविधाओं की एक सूची है जो शाब्दिक रूप से आपकी बांह से लंबी है। मेरी जानकारी के लिए, किसी भी उपयोगकर्ता ने कभी भी ऐसे ऑपरेटर को C # टीम के लिए प्रस्तावित नहीं किया है, और मैं उस सूची में कई बार, कई बार जा चुका हूँ।

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


छोटा सा भूत GWBASIC दिनों के लिए एक ऑपरेटर के रूप में वापस जाता है। मुझे यह 1979 से याद है।
zarchasmpgmr

1
मैंने पढ़ा है कि IMPL कोड कॉन्ट्रैक्ट के लिए बहुत मददगार है। (जो वीबी के पास नहीं था।)
मेसन व्हीलर

3
VBScript प्रोग्रामर संभवतः इस तरह के एक ऑपरेटर का उपयोग करने के लिए सबसे कम समूह थे। मैं अभी कामना कर रहा हूं कि पावरशेल का एक अर्थ ऑपरेटर हो, ताकि मैं और अधिक आसानी से और कानूनी तौर पर कुछ [switch]फिल्टर मापदंडों को लागू कर सकूं ।
१२:४५ बजे रिश्वत

मुझे डीईसी बेसिक से छोटा सा भूत याद है। मुझे याद नहीं है EQV। जिस ऑपरेटर की मैं अक्सर कामना करता हूं, वह "और नहीं" होगा, जो इसे नकारने से पहले दाहिने हाथ के ऑपरेटर को बढ़ावा देगा। इस प्रकार, 0xABCD12345678ul ~& 0x00200000u0x12145678ul के बजाय 0xABCD12145678ul का उत्पादन होगा।
सुपरकैट

19

मैं केवल अनुमान लगा सकता हूं, लेकिन एक कारण यह हो सकता है कि ऐसे वर्कआर्ड हैं जो काफी सरल और पठनीय हैं। आइए अपने उदाहरण पर विचार करें:

if (mode != ECB) assert (iv != null);

assert (mode != ECB --> iv != null);  // <-- that's only one character shorter

यदि आपको एक अभिव्यक्ति की आवश्यकता है, तो अधिकांश भाषाओं में उपलब्ध इनलाइन-आई ऑपरेटर (जिसे टर्नरी ऑपरेटर कहा जाता है) का उपयोग किया जा सकता है। दी, यह उतना सुरुचिपूर्ण नहीं है A --> B, लेकिन उपयोग के मामलों की संख्या किसी अन्य ऑपरेटर को जोड़ने (और बनाए रखने) को सही नहीं ठहरा सकती है:

assert (mode != ECB ? iv != null : true);

2
मुखर रूप से - अच्छा कारण है। पहले एक (कई कार्यान्वयन में) संदेश "जोरदार विफलता: iv! = Null" का उत्पादन करेगा, जबकि दूसरा "जोरदार विफलता: मोड! = ECB -> iv! = Null"।
मैकीज पीचोटका

2
+1, मैं प्रश्न पर यही बात पूछने वाला था (क्योंकि मैं "निहितार्थ" से बहुत परिचित नहीं हूं, यह कभी दिन-प्रतिदिन नहीं आता है)। ifबयान तक, अब तक के बारे में हर किसी के लिए स्पष्ट है।
इजाकाता १ata

12

एफिल में इम्प्लांटेशन होता है

यह वास्तव में और भी अधिक है। इसमें कई अर्ध-सख्त ऑपरेटरों के साथ-साथ सख्त भी हैं।

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

यह पता चला है कि एक बार जब आपके पास ऐसे बूलियन ऑपरेटरों के साथ एक भाषा होती है और आप जानते हैं कि उनके साथ कैसे डिजाइन करें और उनका उपयोग करें, तो आप उनका उपयोग करते हैं।

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

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

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

अभी - वहाँ बहुत सिद्धांत है कि ऑब्जेक्ट ओरिएंटेड के रूप में, लेकिन ओओ-थ्रू-ए-ग्लास-डार्कली-ऑफ- [पिक-योर-लैंग्वेज] है। कोई भी ओओ पर अधिकांश "सिद्धांत" किताबें नहीं पढ़ सकता है क्योंकि वे व्याख्या करना चाहते हैं कि सिद्धांत किसी भाषा के लेंस के माध्यम से क्या है। पूरी तरह से गलत और गलत। यह गणित-आधारित-मेरे-कैलकुलेटर या मेरे स्लाइड नियम को पढ़ाने जैसा होगा। NO - एक वास्तविकता को अपने बारे में सिखाने की अनुमति देता है और फिर एक वर्णन का उपयोग करता है कि कोई क्या देखता है - जिसे "विज्ञान" कहा जाता है। ओओ-आधारित-भाषा-एक्स नामक इस अन्य मैश को इतना तिरछा किया जाता है जितना कि वास्तविकता का प्रतिनिधित्व करना मुश्किल है।

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

वहां से, आपको लगना शुरू हो जाएगा कि कैसे निहितार्थ और "तात्पर्य" न केवल उपयोगी है, बल्कि सुरुचिपूर्ण और बहुत अच्छा है!

एक महान हो!


7

पायथन में एक तरह से छिपा हुआ रूप में एक निहितार्थ ऑपरेटर होता है।

बूलियन मूल्यों को स्वीकार करने के लिए कम-से-या-बराबर ऑपरेटर ओवरलोडेड है। नतीजतन, कोई इसे एक निहितार्थ ऑपरेटर के रूप में उपयोग कर सकता है।

उदाहरण द्वारा प्रमाण (पायथन कोड):

print (False <= False) # This will print True.
print (False <= True)  # This will print True.
print (True <= False)  # This will print False.
print (True <= True)   # This will print True.

निहितार्थ ऑपरेटर की सत्य तालिका को याद करें:

LEFT RIGHT RESULT
F    F     T
F    T     T
T    F     F
T    T     T

2
यह भयानक है, लेकिन दुर्भाग्य से इसमें गलत कठोरता गुण हैं: यदि है तो f() implies g()मूल्यांकन नहीं करना चाहिए , लेकिन इस मामले में मूल्यांकन करता है । g()f()False<=g()
जॉन पुरडी

2
@ जॉन पंडी - सख्ती से बोलें, शॉर्ट-सर्किट मूल्यांकन बाइनरी ऑपरेटरों की एक वैकल्पिक विशेषता है। तो तकनीकी रूप से, यह निहितार्थ-ऑपरेटर का पूरी तरह से वैध कार्यान्वयन है। यह कहा जा रहा है, मुझे वास्तव में संदेह है कि गुइडो वैन रोसुम ने भी इसका एक निहितार्थ-संचालक होने का इरादा किया था। यह सिर्फ बूलियन्स की तुलना करने का एक चुटकुला है।
मैकेंज़ी

यकीन है, मैं कह रहा था कि यह एक दिलचस्प अवलोकन है, लेकिन ऐसा कुछ नहीं जिसे आपको वास्तविक कार्यक्रमों में उपयोग करना चाहिए क्योंकि यह शॉर्ट-सर्कुलेटिंग नहीं है और यह किसी को आश्चर्यचकित कर सकता है यदि वे did_all_possible_stuff = x.do_required_stuff() and (x.supports_optional_stuff() <= x.do_optional_stuff())काम करने की उम्मीद करते हैं।
जॉन पूर्डी

2
यह C और C ++ में भी काम करता है।
बेन वोइगट

5

एफिल में एक "इंप्लीज़" ऑपरेटर होता है और यह प्री-राइटिंग और पोस्टकंडिशन के लिए बहुत अच्छा होता है। यह कोड को अधिक पठनीय बनाता है, दुर्भाग्य से यह कभी भी सी के लिए एक मौलिक तनाव नहीं था जैसे कि भाषा और बहुत कम लोगों ने एफिल का इस्तेमाल किया था इसलिए ऑपरेटर के रूप में "तात्पर्य" की सुंदरता अच्छी तरह से ज्ञात नहीं है।


2

मेरे लिए, प्रारंभिक स्थिति के गलत होने पर आशय के साथ बड़ी समस्या आती है; उदाहरण के लिए: "यदि सूरज हरा है, तो मैं एक फल वाला बल्ला हूं।" सच!

औपचारिक तर्क में यह "मान" को असाइन करने का काम करता है जब निहितार्थ की शर्त पूरी नहीं होती है। लेकिन प्रोग्रामिंग में, यह काउंटर-सहज और आश्चर्यजनक परिणाम पैदा कर सकता है।

मुझे वास्तव में लगता है कि उदाहरण @ हिनजी ऊपर देता है:

if (sun.color() == "green") then assert(me.species() == "fruitbat")

समझने में बहुत आसान है, और तर्क को गलत समझने के कारण त्रुटियों की संभावना कम है।

परीक्षण के संदर्भ में, मैं अभी उस क्षण को रोकूंगा जब मेरी धारणा झूठी हो गई थी:

assert(sun.color() == "green")
assert(me.species() == "fruitbat")

इसलिए, @Eric Lippert की बात के रूप में, एक प्रोग्रामर के रूप में मुझे नहीं पता कि मैं कब एक इम्पीज ऑपरेटर का उपयोग करूँगा। "झूठा सच है" व्यवहार गणितीय, औपचारिक तर्क के संदर्भ में उपयोगी लगता है, लेकिन कार्यक्रम तर्क में अप्रत्याशित परिणाम ला सकता है।

...

किसी ने भी आम का उल्लेख नहीं किया है "?" ऑपरेटर, जहां "A! B: true" वही है, जिसका अर्थ "प्रतिरूप" है। लेकिन जबकि औपचारिक तर्क "अन्य" स्थिति के लिए सही है, "?" डेवलपर को स्पष्ट रूप से असाइन करने देता है।

औपचारिक तर्क में, "सत्य" का उपयोग करना काम करता है, लेकिन प्रोग्रामिंग में, यदि स्थिति झूठी है, तो बेहतर उत्तर "नल" या "शून्य" या "छोड़ें", या यहां तक ​​कि शायद झूठ जैसा है।

मुझे लगता है कि किसी को यह मामला बनाना होगा कि "तात्पर्य" "," या "यदि" कथन, या सिर्फ नियमित कार्यक्रम प्रवाह से अधिक उपयोगी ऑपरेटर है।


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