ich stark aus zwei Gründen exist
über die nargin
Option bevorzugen.
1. Nach viel Code von Menschen zu lesen, die noch auf ihren eigenen Code zurückblicken nie gelehrt wurden fühlte, ich nur für diese stärker, als exist
der Code lesbar macht. Zum Beispiel habe ich einmal eine Funktion wie diese gefunden. Für Ihre Bequemlichkeit habe ich die Variablen sinnvolle Namen:
[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
% ...
Dies ist dann von if nargin < n
für jede Variable anders als die ersten beiden folgte. Der einzige Grund, warum ich folgen konnte, was die nargin(n)
sein sollte, ohne die Kopfzeile zu zählen, ist, dass die if nargin < n
immer gefolgt wurde (nur manchmal ein paar Zeilen Code und) die Deklaration der fehlenden Eingabe mit dem Standardwert. Für größere Chucks Code in der if nargin < n
würde ich definitiv den Überblick verlieren.
2.exist
prüft nicht wirklich den kompletten Arbeitsbereich wenn von einer Funktion genannt. Sicher, der Vergleich zweier Zahlen ist weniger kostenintensiv als der Vergleich einiger Strings, aber wenn er am Anfang einer Funktion verwendet wird, um Standardwerte für die nicht gegebenen Parameter aufzufüllen, ist es in Ordnung. Betrachten Sie die folgende Funktion:
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
Und dann die Ausführung der folgenden Schritte aus:
A = magic(3);
B = magic(4);
testExist(A)
Ergebnisse in dieser Ausgabe:
'exist' in a function ignores the variables in the workspace, but checks the function space.
Dies scheint praktisch, aber ich frage mich, ob das mit einer Leistung kommt Elfmeter... – embert