खोज…


टिप्पणियों

यह विषय सर्वोत्तम प्रथाओं को प्रदर्शित करता है जो समुदाय ने समय के साथ सीखा है।

लाइनों को छोटा रखें

लंबे कथन को जारी रखने के लिए निरंतरता वर्ण (दीर्घवृत्त) ... का उपयोग करें।

उदाहरण:

MyFunc( parameter1,parameter2,parameter3,parameter4, parameter5, parameter6,parameter7, parameter8, parameter9)

द्वारा प्रतिस्थापित किया जा सकता है:

MyFunc( parameter1, ...
        parameter2, ...
        parameter3, ...
        parameter4, ...
        parameter5, ...
        parameter6, ...
        parameter7, ...
        parameter8, ...
        parameter9)

इंडेंट कोड ठीक से

उचित इंडेंटेशन न केवल सौंदर्यवादी रूप देता है, बल्कि कोड की पठनीयता को भी बढ़ाता है।

उदाहरण के लिए, निम्नलिखित कोड पर विचार करें:

%no need to understand the code, just give it a look
n = 2;
bf = false;
while n>1
for ii = 1:n
for jj = 1:n
if ii+jj>30
bf = true;
break
end
end
if bf
break 
end
end
if bf
break 
end
n = n + 1;
end

जैसा कि आप देख सकते हैं, आपको यह देखने के लिए कौन सा लूप और if कथन कहाँ समाप्त हो रहे हैं, यह देखने के लिए आपको एक सावधानी बरतने की ज़रूरत है।
स्मार्ट इंडेंटेशन के साथ, आपको यह लुक मिलेगा:

n = 2;
bf = false;
while n>1
    for ii = 1:n
        for jj = 1:n
            if ii+jj>30
                bf = true;
                break
            end
        end
        if bf
            break
        end
    end
    if bf
        break
    end
    n = n + 1;
end

यह स्पष्ट रूप से छोरों की शुरुआत और समाप्ति को इंगित करता है / if कथन है।

आप द्वारा स्मार्ट इंडेंटेशन कर सकते हैं:
अपने सभी कोड का चयन करना ( Ctrl + A )
और फिर Ctrl + I या क्लिक करके दबाएं SmartIndentIcon एडिट बार से। संपादक

मुखर का उपयोग करें

मतलाब कुछ बहुत ही तुच्छ गलतियों को चुपचाप जाने की अनुमति देता है, जिसके कारण रन में बहुत बाद में एक त्रुटि हो सकती है - डिबगिंग को कठिन बना देता है। यदि आप अपने चर के बारे में कुछ ग्रहण करते हैं, तो इसे मान्य करें

function out1 = get_cell_value_at_index(scalar1,cell2)
assert(isscalar(scalar1),'1st input must be a scalar')
assert(iscell(cell2),'2nd input must be a cell array')

assert(numel(cell2) >= scalar1),'2nd input must have more elements than the value of the 1st input')
assert(~isempty(cell2{scalar1}),'2nd input at location is empty')

out1 = cell2{scalar1};

छोरों से बचें

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

उदाहरण

लिखो मत

for t=0:0.1:2*pi
    R(end+1)=cos(t);
end

परंतु

t=0:0.1:2*pi;
R=cos(t)

लिखो मत

for i=1:n
    for j=1:m
        c(i,j)=a(i)+2*b(j);
    end
end

लेकिन कुछ इसी तरह

c=repmat(a.',1,m)+2*repmat(b,n,1)

अधिक जानकारी के लिए, वैश्वीकरण देखें

अस्थायी फ़ाइल के लिए अद्वितीय नाम बनाएँ

किसी स्क्रिप्ट या फ़ंक्शन को कोड करते समय, यह मामला हो सकता है कि एक या एक से अधिक अस्थायी फ़ाइल की आवश्यकता होती है, उदाहरण के लिए, कुछ डेटा संग्रहीत करें।

आदेश किसी मौजूदा फ़ाइल को अधिलेखित करने से बचने के लिए या एक MATLAB समारोह परछाई में tempname समारोह प्रणाली अस्थायी फ़ोल्डर में एक अस्थायी फ़ाइल के लिए एक अनूठा नाम उत्पन्न करने के लिए इस्तेमाल किया जा सकता।

my_temp_file=tempname

एक्सटेंशन के बिना फ़ाइल नाम उत्पन्न होता है; इसे tempname द्वारा उत्पन्न नाम के वांछित विस्तार को जोड़कर जोड़ा जा सकता है

my_temp_file_with_ext=[tempname '.txt']

अस्थायी अस्थायी प्रणाली के लोकोपटन को टेम्पर्ड फंक्शन को शांत करके पुनः प्राप्त किया जा सकता है।

यदि, फ़ंक्शन / स्क्रिप्ट के निष्पादन के दौरान, अस्थायी फ़ाइल की आवश्यकता नहीं है, तो इसे फ़ंक्शन डिलीट का उपयोग करके हटाया जा सकता है

चूँकि delete से पुष्टि नहीं होती, इसलिए recycle फ़ोल्डर में डिलीट की जाने वाली फ़ाइल को स्थानांतरित करने के विकल्प on सेट करना उपयोगी हो सकता है।

यह इस तरह से रीसायकल फ़ंक्शन का उपयोग करके किया जा सकता है:

recycle('on')

निम्नलिखित उदाहरण में, फ़ंक्शन tempname , delete और recycle का एक संभावित उपयोग प्रस्तावित है।

%
% Create some example data
%
theta=0:.1:2*pi;
x=cos(theta);
y=sin(theta);
%
% Generate the temporary filename
%
my_temp_file=[tempname '.mat'];
%
% Split the filename (path, name, extension) and display them in a message box
[tmp_file_path,tmp_file_name, tmp_file_ext]=fileparts(my_temp_file)
uiwait(msgbox(sprintf('Path= %s\nName= %s\nExt= %s', ...
              tmp_file_path,tmp_file_name,tmp_file_ext),'TEMPORARY FILE'))
%
% Save the varaibles in a temporary file
%
save(my_temp_file,'x','y','theta')
%
% Load the varaibles from the temporary file
%
load(my_temp_file)
%
% Set the reclycle option on
%
recycle('on')
%
% Delete the temporary file
%
delete(my_temp_file)

चेतावनी

अस्थायी फ़ाइलनाम java.util.UUID.randomUUID विधि ( randomUUID ) का उपयोग करके उत्पन्न होता है।

यदि MATLAB को JVM के बिना चलाया जाता है, तो अस्थायी फ़ाइल नाम का उपयोग करके उत्पन्न किया जाता है
CPU काउंटर और समय के आधार पर matlab.internal.timing.timing । इस मामले में अस्थायी फ़ाइलनाम अद्वितीय होने की गारंटी नहीं है।

वैधीकरण का उपयोग करें

फ़ंक्शन वैलिडेटटाइंट का उपयोग विनिर्देशों के एक सेट के खिलाफ एक सरणी को मान्य करने के लिए किया जा सकता है

इसका उपयोग किसी फ़ंक्शन को प्रदान किए गए इनपुट को मान्य करने के लिए किया जा सकता है।

निम्नलिखित उदाहरण में, फ़ंक्शन test_validateattributes को तीन इनपुट की आवश्यकता होती है

function test_validateattributes(input_1,input_2,input_3)

इनपुट विनिर्देश हैं:

  • array_1:

    • वर्ग: डबल
    • आकार: [३,२]
    • मान: तत्व NaN नहीं होना चाहिए
  • char_array:

    • वर्ग: चार
    • मूल्य: स्ट्रिंग खाली नहीं होनी चाहिए
  • array_3

    • क्लास: डबल
    • आकार: [५ १]
    • मान: तत्व वास्तविक होने चाहिए

तीन इनपुट को मान्य करने के लिए, फंक्शन validateattributes को निम्नलिखित सिंटैक्स के साथ बुलाया जा सकता है:

validateattributes(A,classes,attributes,funcName,varName,argIndex)

कहाँ पे:

  • A , ऐय्याशी करने के लिए सरणी है
  • classes : है type सरणी के (जैसे single , double , logical )
  • attributes : इनपुट सरणी से मेल खाने वाले attributes हैं (उदाहरण के लिए [3,2], size सरणी के [3,2], size को निर्दिष्ट करने के लिए आकार, यह निर्दिष्ट करने के लिए कि nonnan सरणी में NaN मान नहीं होंगे)
  • funcName : उस फ़ंक्शन का नाम है जिसमें सत्यापन होता है। इस तर्क का उपयोग त्रुटि संदेश (यदि कोई हो) की पीढ़ी में किया जाता है
  • varName : सत्यापन के तहत सरणी का नाम है। इस तर्क का उपयोग त्रुटि संदेश (यदि कोई हो) की पीढ़ी में किया जाता है
  • argIndex : इनपुट की सूची में thepurt सरणी की स्थिति है। इस तर्क का उपयोग त्रुटि संदेश (यदि कोई हो) की पीढ़ी में किया जाता है

यदि एक या एक से अधिक इनपुट विनिर्देश से मेल नहीं खाते हैं, तो एक त्रुटि संदेश उत्पन्न होता है।

एक से अधिक अमान्य इनपुट के मामले में, पहली बेमेल पाए जाने पर सत्यापन बंद हो जाता है।

यह function test_validateattributes है जिसमें इनपुट सत्यापन को लागू किया गया है।

चूंकि फ़ंक्शन को तीन इनपुट की आवश्यकता होती है, इसलिए प्रदान किए गए इनपुट की संख्या पर पहला चेक fnction nargin का उपयोग करके किया जाता है।

function test_validateattributes(array_1,char_array_1,array_3)
%
% Check for the number of expected input: if the number of input is less
% than the require, the function exits with an error message
%
if(nargin ~= 3)
   error('Error: TEST_VALIDATEATTRIBUTES requires 3 input, found %d',nargin)
end
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition of the expected characteristics of the first input %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% INPUT #1 name (only used in the generation of the error message)
%
input_1_name='array_1';
%
% INPUT #1 position (only used in the generation of the error message)
%
input_1_position=1;
%
% Expected CLASS of the first input MUST BE "double"
%
input_1_class={'double'};
%
% Expected ATTRIBUTES of the first input
%   SIZE: MUST BE [3,2]
%
input_1_size_attribute='size';
input_1_size=[3,2];
%
%   VALUE CHECK: the element MUST BE NOT NaN
%
input_1_value_type='nonnan';
%
% Build the INPUT 1 attributes
%
input_1_attributes={input_1_size_attribute,input_1_size, ...
                    input_1_value_type};
%
% CHECK THE VALIDITY OF THE FIRST INPUT
%
validateattributes(array_1, ...
                   input_1_class,input_1_attributes,'', ...
                   input_1_name,input_1_position);

%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition of the expected characteristics of the second input %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% INPUT #1 name (only used in the generation of the error message)
%
input_2_name='char_array_1';
%
% INPUT #2 position (only used in the generation of the error message)
%
input_2_position=2;
%
% Expected CLASS of the first input MUST BE "string"
%
input_2_class={'char'};
%
%   VALUE CHECK: the element must be not NaN
%
input_2_size_attribute='nonempty';
%
% Build the INPUT 2 attributes
%
input_2_attributes={input_2_size_attribute};
%
% CHECK THE VALIDITY OF THE SECOND INPUT
%
validateattributes(char_array_1, ...
                   input_2_class,input_2_attributes,'', ...
                   input_2_name,input_2_position);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition of the expected characteristics of the third input %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% INPUT #3 name (only used in the generation of the error message)
%
input_3_name='array_3';
%
% INPUT #3 position (only used in the generation of the error message)
%
input_3_position=3;
%
% Expected CLASS of the first input MUST BE "double"
%
input_3_class={'double'};
%
% Expected ATTRIBUTES of the first input
%   SIZE: must be [5]
input_3_size_attribute='size';
input_3_size=[5 1];
%   VALUE CHECK: the elements must be real
input_3_value_type='real';
%
% Build the INPUT 3 attributes
%
input_3_attributes={input_3_size_attribute,input_3_size, ...
                    input_3_value_type};
%
% CHECK THE VALIDITY OF THE FIRST INPUT
%
validateattributes(array_3, ...
                   input_3_class,input_3_attributes,'', ...
                   input_3_name,input_3_position);

disp('All the three input are OK')

सत्यापन प्रक्रिया के कार्यान्वयन का परीक्षण करने के लिए निम्न स्क्रिप्ट का उपयोग किया जा सकता है।

यह आवश्यक तीन इनपुट उत्पन्न करता है और, अनियमित रूप से, यह उन्हें वैध नहीं बनाता है।

%
% Generate the first input
%
n_rows=randi([2 3],1);
n_cols=2;
input_1=randi([20 30],n_rows,n_cols);
%
% Generate the second input
%
if(rand > 0.5)
   input_2='This is a string';
else
   input_2='';
end
%
% Generate the third input
%
input_3=acos(rand(5,1)*1.2);
%
% Call the test_validateattributes function with the above generated input
%
input_1
input_2
input_3
%
test_validateattributes(input_1,input_2,input_3)

ये गलत इनपुट के एक उदाहरण हैं, जो validateattributes फ़ंक्शन द्वारा पता लगाया गया है:

गलत इनपुट

input_1 =

    23    22
    26    28

input_2 =

     ''

input_3 =

   0.0000 + 0.4455i
   1.2420 + 0.0000i
   0.4063 + 0.0000i
   1.3424 + 0.0000i
   1.2186 + 0.0000i

Error using test_validateattributes (line 44)
Expected input number 1, array_1, to be of size 3x2 when it is actually
size 2x2.

गलत इनपुट

input_1 =

    22    24
    21    25
    26    27

input_2 =

This is a string

input_3 =

   1.1371 + 0.0000i
   0.6528 + 0.0000i
   1.0479 + 0.0000i
   0.0000 + 0.1435i
   0.0316 + 0.0000i

Error using test_validateattributes (line 109)
Expected input number 3, array_3, to be real.

मान्य इनपुट

input_1 =

    20    25
    25    28
    24    23

input_2 =

This is a string

input_3 =

    0.9696
    1.5279
    1.3581
    0.5234
    0.9665

All the three input are OK

ब्लॉक कमेंट संचालक

कोड का वर्णन करने वाली टिप्पणियों को जोड़ना एक अच्छा अभ्यास है। बाद में वापस आने पर यह दूसरों के लिए और यहां तक कि कोडर के लिए मददगार होता है। % चिह्न का उपयोग करके या शॉर्टकी Ctrl+R का उपयोग करके एक एकल पंक्ति पर टिप्पणी की जा सकती है। पहले से टिप्पणी की गई लाइन को अनइंस्टॉल करने के लिए % चिन्ह को हटा दें या शॉर्टकी Crtl+T उपयोग करें।

कोड के एक ब्लॉक पर टिप्पणी करते हुए प्रत्येक पंक्ति की शुरुआत में एक % प्रतीक जोड़कर किया जा सकता है, MATLAB के नए संस्करण (2015 ए के बाद) आप ब्लॉक टिप्पणी ऑपरेटर %{ code %} । यह ऑपरेटर कोड की पठनीयता को बढ़ाता है। इसका उपयोग कोड टिप्पणी और फ़ंक्शन सहायता प्रलेखन दोनों के लिए किया जा सकता है। कोड की पठनीयता बढ़ाने के लिए ब्लॉक को फोल्ड और अनफोल्ड किया जा सकता है।

यहाँ छवि विवरण दर्ज करें

जैसा कि यह देखा जा सकता है %{ और %} ऑपरेटरों को लाइनों पर अकेले दिखाई देना चाहिए। इन पंक्तियों पर कोई अन्य पाठ शामिल न करें।

function y = myFunction(x)
%{
myFunction  Binary Singleton Expansion Function
y = myFunction(x) applies the element-by-element binary operation
specified by the function handle FUNC to arrays A and B, with implicit
expansion enabled.
%}

%%  Compute z(x, y) = x.*sin(y) on a grid:
% x = 1:10;
y = x.';

%{
z = zeros(numel(x),numel(y));
for ii=1:numel(x)
    for jj=1:numel(y)
        z(ii,jj) = x(ii)*sin(y(jj));
    end
end
%}

z = bsxfun(@(x, y) x.*sin(y), x, y);
y = y + z;

end


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow