मैं दृढ़ता से दो कारणों के लिए nargin
विकल्प पर exist
पसंद करते हैं।
1. लोग हैं, जो अपने स्वयं के कोड पर वापस नज़र डालने सिखाया कभी नहीं थे से कोड का एक बहुत पढ़ने के बाद, मैं सिर्फ इस बात के लिए मजबूत महसूस किया है, के रूप में exist
कोड पठनीय बनाता है। उदाहरण के लिए, मुझे इस तरह एक समारोह का सामना करना पड़ा।
[model, accuracy] = epicModelingFunction (dataMatrix, responseVector, indicatorForCategoricalVariables, optionsForInternalFunctions, typeOfDistanceCalculation, notationForMissingValues, isClassificationAndNotRegression, scalingMethod, shouldPlotAllIntermediateStuff)
% EPICMODELINGFUNCTION is actually a horrible function to read and not epic at all
% ...
यह तो की तुलना में पहले दो हर चर अन्य के लिए if nargin < n
के बाद किया गया: आपकी सुविधा के लिए मैं चर समझदार नाम दिया था। एकमात्र कारण मैं nargin(n)
का पालन कर सकता हूं जो हेडर इनपुट की गणना किए बिना होना चाहिए, यह है कि if nargin < n
हमेशा डिफ़ॉल्ट मान के साथ लापता इनपुट की घोषणा (केवल कभी-कभी कोड की कुछ पंक्तियां) और उसके बाद किया जाता था। if nargin < n
में कोड के बड़े चक्स के लिए, मैं निश्चित रूप से ट्रैक खो देता हूं।
2.exist
वास्तव में पूरा कार्यक्षेत्र जाँच नहीं करता है, तो एक समारोह से कहा जाता है। निश्चित रूप से, कुछ तारों की तुलना में दो संख्याओं की तुलना करना कम महंगा है, लेकिन यदि किसी दिए गए पैरामीटर के लिए डिफ़ॉल्ट मानों को भरने के लिए फ़ंक्शन की शुरुआत में उपयोग किया जाता है, तो यह ठीक है। निम्नलिखित समारोह पर विचार करें:
function testExist(C)
if exist('B', 'var')
disp('''exist'' in a function checks the workspace.')
elseif exist('C', 'var')
disp('''exist'' in a function ignores the variables in the workspace, but checks the function space.')
else
disp('''exist'' is broken or no parameter was given.')
end
end
और फिर निम्नलिखित को निष्पादित: इस उत्पादन में
A = magic(3);
B = magic(4);
testExist(A)
परिणाम:
'exist' in a function ignores the variables in the workspace, but checks the function space.
यह आसान लगता है, लेकिन मुझे आश्चर्य है कि, कि अगर एक प्रदर्शन के साथ आता है दंड... – embert