एनओपी (कोड)

कंप्यूटर विज्ञान में, एनओपी, नो-ऑप, या एनओओपी (उच्चारण नो ऑप; बिना ऑपरेशन का संक्षिप्त रूप) एक मशीन कोड निर्देश और इसकी असेंबली भाषा निमोनिक, प्रोग्रामिंग भाषा स्टेटमेंट, या प्रोटोकॉल (कंप्यूटिंग) कमांड है जो कुछ भी नहीं करता है।

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

किसी एनओपी को मेमोरी तक नहीं पहुंचना चाहिए, क्योंकि इससे मेमोरी में खराबी या पेज में खराबी हो सकती है।

एनओपी का उपयोग आमतौर पर समय निर्धारण उद्देश्यों के लिए किया जाता है, डेटा संरचना संरेखण को मजबूर करने के लिए, खतरे (कंप्यूटर आर्किटेक्चर) को रोकने के लिए, एक शाखा विलंब स्लॉट पर कब्जा करने के लिए, एक मौजूदा निर्देश जैसे जंप को शून्य करने के लिए, एक निष्पादन निर्देश के लक्ष्य के रूप में, या प्रोग्राम डेवलपमेंट में बाद में सक्रिय निर्देशों द्वारा प्रतिस्थापित किए जाने वाले प्लेस-होल्डर के रूप में (या जब पुनर्संगठित करना समस्याग्रस्त या समय लेने वाला होगा तो हटाए गए निर्देशों को प्रतिस्थापित करना)। कुछ मामलों में, एनओपी के मामूली दुष्प्रभाव हो सकते हैं; उदाहरण के लिए, मोटोरोला 68000 श्रृंखला के प्रोसेसर पर, एनओपी ऑपकोड पाइपलाइन (कंप्यूटिंग) के सिंक्रनाइज़ेशन का कारण बनता है। कुछ सीपीयू आर्किटेक्चर के लिए एनओपी निर्देश नीचे सूचीबद्ध हैं:

हार्डवेयर डिज़ाइन के दृष्टिकोण से, बस के अनमैप्ड क्षेत्रों को अक्सर शून्य लौटाने के लिए डिज़ाइन किया जाता है; चूंकि एनओपी स्लाइड व्यवहार अक्सर वांछनीय होता है, यह इसे ऑल-जीरोज़ ऑपकोड के साथ कोडिंग करने में पूर्वाग्रह देता है।

कोड
एक फ़ंक्शन या प्रोग्रामिंग भाषा कथनों का अनुक्रम एक एनओपी या अशक्त कथन है यदि इसका कोई प्रभाव नहीं है। कुछ संदर्भों में कुछ भाषाओं की प्रोग्रामिंग भाषा सिंटैक्स द्वारा शून्य कथनों की आवश्यकता हो सकती है।

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

सी और डेरिवेटिव
सी में सबसे सरल एनओपी स्टेटमेंट शून्य स्टेटमेंट है, जो एक स्टेटमेंट की आवश्यकता वाले संदर्भ में सिर्फ एक अर्ध-कोलन है। ; एक खाली ब्लॉक (यौगिक विवरण) भी एक एनओपी है, और अधिक सुपाठ्य हो सकता है: {} कुछ मामलों में, जैसे किसी फ़ंक्शन का मुख्य भाग, एक ब्लॉक का उपयोग किया जाना चाहिए, लेकिन यह खाली हो सकता है। C में, कथन खाली नहीं हो सकते - सरल कथन a के साथ समाप्त होने चाहिए; (अर्धविराम) जबकि यौगिक कथन {} (ब्रेसिज़) में संलग्न होते हैं, जिन्हें स्वयं निम्नलिखित अर्धविराम की आवश्यकता नहीं होती है। इस प्रकार उन संदर्भों में जहां एक कथन व्याकरणिक रूप से आवश्यक है, ऐसे कुछ शून्य कथन का उपयोग किया जा सकता है।

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

उपरोक्त कोड फ़ंक्शन getchar को तब तक कॉल करना जारी रखता है जब तक कि यह एक \n (न्यूलाइन) वर्ण नहीं लौटाता है, अनिवार्य रूप से मानक इनपुट के वर्तमान रीडिंग स्थान को अगली पंक्ति की शुरुआत में तेजी से अग्रेषित करता है।

फोरट्रान
फोरट्रान में,  स्टेटमेंट का उपयोग कुछ संदर्भों में किया जाता है जैसे कि डीओ लूप में अंतिम स्टेटमेंट, हालांकि इसका उपयोग कहीं भी किया जा सकता है, और इसमें कोई कार्यक्षमता नहीं होती है।

जावास्क्रिप्ट
जावास्क्रिप्ट भाषा में कोई अंतर्निहित एनओपी कथन नहीं है। कई कार्यान्वयन संभव हैं: विकल्प, उन स्थितियों में जहां किसी फ़ंक्शन की आवश्यकता होती है, ये हैं:
 * उपयोग  खाली बयान या   एनओपी (कोड)#सी_एंड_डेरिवेटिव्स उदाहरणों की तरह ही खाली ब्लॉक स्टेटमेंट;
 * उपयोग  या   अभिव्यक्ति को एक पूर्ण कथन के रूप में (एक अभिव्यक्ति कथन) जब पिछली विधियों को सिंटैक्स द्वारा अनुमति नहीं दी जाती है।
 * उपयोग  अंतर्निहित फ़ंक्शन, जो किसी भी तर्क को स्वीकार करता है और रिटर्न देता है  ;
 * तृतीय-पक्ष लाइब्रेरी में उपलब्ध एनओपी फ़ंक्शन का उपयोग करें—नीचे देखें;
 * एक कस्टम एनओपी फ़ंक्शन को परिभाषित करें, जैसा कि निम्नलिखित उदाहरण में है (ES6 एरो फ़ंक्शन सिंटैक्स का उपयोग करके):

एंगुलरजेएस
AngularJS फ्रेमवर्क angular.noop फ़ंक्शन प्रदान करता है जो कोई ऑपरेशन नहीं करता है।

jQuery
jQuery लाइब्रेरी एक फ़ंक्शन प्रदान करती है, जो कुछ नहीं करता.

लोदाश
लॉडैश लाइब्रेरी एक फ़ंक्शन प्रदान करती है, जो अपरिभाषित लौटाता है और कुछ नहीं करता।

पास्कल
सी के साथ, ; स्वयं द्वारा प्रयुक्त को पास्कल (प्रोग्रामिंग भाषा) में एक अशक्त कथन के रूप में उपयोग किया जा सकता है। वास्तव में, भाषा की विशिष्टता के कारण, BEGIN/END ब्लॉक में, END कथन से पहले अर्धविराम वैकल्पिक होता है, इस प्रकार वहां प्रयुक्त अर्धविराम अनावश्यक होता है।

इसके अलावा, एक ब्लॉक जिसमें शामिल है  कोई कार्रवाई न होने का संकेत देने के लिए प्लेसहोल्डर के रूप में उपयोग किया जा सकता है, भले ही इसे किसी अन्य BEGIN/END ब्लॉक के अंदर रखा गया हो।

पायथन
पायथन (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा में एक पायथन (प्रोग्रामिंग भाषा)#स्टेटमेंट्स और नियंत्रण प्रवाह| है ऐसा कथन जिसे निष्पादित करने पर कोई प्रभाव नहीं पड़ता है और इस प्रकार यह एनओपी के रूप में कार्य करता है। इसका उपयोग मुख्य रूप से पायथन के ऑफ-साइड नियम | इंडेंटेशन-सेंसिटिव सिंटैक्स के कारण सही सिंटैक्स सुनिश्चित करने के लिए किया जाता है; उदाहरण के लिए किसी  कक्षा (कंप्यूटर प्रोग्रामिंग)  की परिभाषा के लिए सिंटैक्स के लिए क्लास लॉजिक के साथ एक इंडेंटेड ब्लॉक की आवश्यकता होती है, जिसे इस प्रकार व्यक्त किया जाना चाहिए   जब यह खाली होना चाहिए.

शेल स्क्रिप्टिंग (बैश, zsh, आदि)
' ' [कोलन] कमांड एक शेल बिल्टिन है जिसका एनओपी (कुछ न करने वाला ऑपरेशन) के समान प्रभाव होता है। यह तकनीकी रूप से एनओपी नहीं है, क्योंकि यह विशेष पैरामीटर $? को बदल देता है। (अंतिम कमांड की निकास स्थिति) से 0. इसे 'सही' में निर्मित शेल का पर्याय माना जा सकता है, और इसकी निकास स्थिति सत्य (0) है।

TeX मैक्रो भाषा (ConTeXt, LaTeX, आदि)
TeX टाइपोग्राफ़िकल सिस्टम की मैक्रो भाषा में है  आज्ञा। यह अपने आप में कुछ नहीं करता है, लेकिन इसका उपयोग तत्काल पूर्ववर्ती कमांड को किसी भी बाद के टोकन को पार्स करने से रोकने के लिए किया जा सकता है।

एनओपी प्रोटोकॉल कमांड
टेलनेट जैसे कई प्रोटोकॉल (कंप्यूटिंग) में एक एनओपी कमांड शामिल होता है जिसे क्लाइंट किसी अन्य कार्रवाई का अनुरोध किए बिना सर्वर से प्रतिक्रिया का अनुरोध करने के लिए जारी कर सकता है। इस तरह के कमांड का उपयोग कीपलाइव या सर्वर रिस्पॉन्सिव होने के लिए किया जा सकता है। एक NOOP कमांड निम्नलिखित प्रोटोकॉल का हिस्सा है (यह एक आंशिक सूची है):
 * टेलनेट
 * फाइल ट्रांसफर प्रोटोकॉल
 * सरल डाक स्थानांतरण प्रोटोकॉल
 * एक्स विंडो कोर प्रोटोकॉल
 * डाकघर प्रोटोकॉल
 * नेटवर्क समाचार स्थानांतरण प्रोटोकॉल
 * फिंगर प्रोटोकॉल
 * इंटरनेट संदेश एक्सेस प्रोटोकॉल
 * बिटटोरेंट (प्रोटोकॉल)

ध्यान दें कि सूचीबद्ध अन्य प्रोटोकॉल के विपरीत, IMAP4 NOOP कमांड का एक विशिष्ट उद्देश्य है - यह सर्वर को क्लाइंट को कोई भी लंबित अधिसूचना भेजने की अनुमति देता है।

जबकि अधिकांश टेलनेट या एफ़टीपी सर्वर एनओओपी कमांड का जवाब ओके या +ओके के साथ देते हैं, कुछ प्रोग्रामर ने क्लाइंट के लिए विचित्र प्रतिक्रियाएं जोड़ दी हैं। उदाहरण के लिए,  MINIX का डेमॉन NOOP को संदेश के साथ प्रतिक्रिया देता है: FTP सर्वर रिटर्न कोड NOOP की सूची आपके लिए भी!

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

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

यह भी देखें

 * कंप्यूटर आर्किटेक्चर
 * एचएलटी (x86 निर्देश) - सीपीयू को रोक देता है
 * हॉल्ट एंड कैच फायर (कंप्यूटिंग) - सीपीयू को भी रोक देता है
 * पहचान फ़ंक्शन - एनओपी के समतुल्य कार्यात्मक प्रोग्रामिंग
 * xyzzy (कंप्यूटिंग) - एक कमांड जो कभी-कभी NOP के स्थान पर उपयोग किया जाता है
 * IEFBR14 - मेनफ्रेम टॉटोलॉजी
 * भराव पाठ
 * टिप्पणी (कंप्यूटर प्रोग्रामिंग) - आम तौर पर प्रोग्रामर के लिए एनोटेशन जिन्हें कंपाइलरों और दुभाषियों द्वारा अनदेखा किया जाता है