tôi rất thích exist
qua tùy chọn nargin
vì hai lý do.
1. Sau khi đọc rất nhiều mã từ những người chưa bao giờ được dạy để nhìn lại mã riêng của họ, tôi đã chỉ cảm thấy mạnh hơn cho điều này, như exist
làm cho đoạn code có thể đọc được. Ví dụ, tôi gặp phải một khi một chức năng như thế này. Để thuận tiện cho bạn, tôi đã đặt cho các biến hợp lý tên:
[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
% ...
Sau đó, sau đó là if nargin < n
cho mỗi biến khác với hai biến số đầu tiên. Lý do duy nhất tôi có thể làm theo những gì các nargin(n)
nên được mà không đếm đầu vào tiêu đề, là if nargin < n
luôn được theo sau bởi (chỉ đôi khi một vài dòng mã và) khai báo đầu vào bị thiếu với giá trị mặc định. Đối với mâm mã lớn hơn trong if nargin < n
, tôi chắc chắn sẽ mất dấu vết.
2.exist
không thực sự kiểm tra không gian làm việc hoàn chỉnh nếu gọi từ một hàm. Chắc chắn, so sánh hai con số là ít tốn kém như so sánh một vài chuỗi, nhưng nếu được sử dụng ở đầu của một hàm để điền vào các giá trị mặc định cho các tham số không được đưa ra, nó là tốt. Hãy xem xét các chức năng sau:
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
Và sau đó thực hiện như sau:
A = magic(3);
B = magic(4);
testExist(A)
kết quả ở đầu ra này:
'exist' in a function ignores the variables in the workspace, but checks the function space.
Điều này có vẻ tiện dụng, nhưng tôi tự hỏi, nếu mà đi kèm với một màn trình diễn hình phạt ... – embert