Programming |
Program Control
This section covers the following topics:
Using break, continue, and return
It's easy to confuse the break
, continue
, and return
functions as they are similar in some ways. Make sure you use these functions appropriately.
Function |
Where to Use It |
Description |
break |
for or while loops |
Exits the loop in which it appears. In nested loops, control passes to the next outer loop. |
continue |
for or while loops |
Skips any remaining statements in the current loop. Control passes to next iteration of the same loop. |
return |
Anywhere |
Immediately exits the function in which it appears. Control passes to the caller of the function. |
Using switch Versus if
It is possible, but usually not advantageous, to implement switch
-case
statements using if
-elseif
instead. See pros and cons in the table.
switch-case Statements |
if-elseif Statements |
Easier to read. |
Can be difficult to read. |
Can compare strings of different lengths. |
You need strcmp to compare strings of different lengths. |
Test for equality only. |
Test for equality or inequality. |
MATLAB case Evaluates Strings
A useful difference between switch
-case
statements in MATLAB and C is that you can specify string values in MATLAB case
statements, which you cannot do in C.
Multiple Conditions in a case Statement
You can test against more than one condition with switch
. The first case below tests for either a linear
or bilinear
method by using a cell array in the case statement.
switch(method) case {'linear', 'bilinear'} disp('Method is linear or bilinear') case (<and so on>) end
Implicit Break in switch-case
In C, if you don't end each case
with a break
statement, code execution falls through to the following case
. In MATLAB, case
statements do not fall through; only one case
may execute. Using break
within a case
statement is not only unnecessary, it is also invalid and generates a warning.
In this example, if result
is 52
, only the first disp
statement executes, even though the second is also a valid match:
Variable Scope in a switch
Since MATLAB executes only one case
of any switch
statement, variables defined within one case
are not known in the other cases
of that switch
statement. The same holds true for if
-elseif
statements.
In these examples, you get an error when choice
equals 2
, because x
is undefined.
-- SWITCH-CASE -- -- IF-ELSEIF --
switch choice
case 1 if choice == 1
x = -pi:0.01:pi; x = -pi:0.01:pi;
case 2 elseif choice == 2
plot(x, sin(x)); plot(x, sin(x));
end end
Catching Errors with try-catch
When you have statements in your code that could possibly generate unwanted results, put those statements into a try
-catch
block that will catch any errors and handle them appropriately.
The example below shows a try
-catch
block within a function that multiplies two matrices. If a statement in the try
segment of the block fails, control passes to the catch
segment. In this case, the catch
statements check the error message that was issued (returned by lasterr
) and respond appropriately.
try X = A * B catch errmsg = lasterr; if(strfind(errmsg, 'Inner matrix dimensions')) disp('** Wrong dimensions for matrix multiply') end
For more information: See Checking for Errors with try-catch in the MATLAB Programming documentation.
Nested try-catch Blocks
You can also nest try
-catch
blocks, as shown here. You can use this to attempt to recover from an error caught in the first try
section:
try statement1 % Try to execute statement1 catch try statement2 % Attempt to recover from error catch disp 'Operation failed' % Handle the error end end
Forcing an Early Return from a Function
To force an early return from a function, place a return
statement in the function at the point where you want to exit. For example,
MATLAB Path | Save and Load |
© 1994-2005 The MathWorks, Inc.