Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > b38d2da330d1936e5ab1307c039c4941 > files > 509

octave-doc-3.6.4-3.mga4.noarch.rpm

<html lang="en">
<head>
<title>The switch Statement - GNU Octave</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="GNU Octave">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Statements.html#Statements" title="Statements">
<link rel="prev" href="The-if-Statement.html#The-if-Statement" title="The if Statement">
<link rel="next" href="The-while-Statement.html#The-while-Statement" title="The while Statement">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
</head>
<body>
<div class="node">
<a name="The-switch-Statement"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="The-while-Statement.html#The-while-Statement">The while Statement</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="The-if-Statement.html#The-if-Statement">The if Statement</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Statements.html#Statements">Statements</a>
<hr>
</div>

<h3 class="section">10.2 The switch Statement</h3>

<p><a name="index-g_t_0040code_007bswitch_007d-statement-694"></a><a name="index-g_t_0040code_007bcase_007d-statement-695"></a><a name="index-g_t_0040code_007botherwise_007d-statement-696"></a><a name="index-g_t_0040code_007bendswitch_007d-statement-697"></a>
It is very common to take different actions depending on the value of
one variable.  This is possible using the <code>if</code> statement in the
following way

<pre class="example">     if (X == 1)
       do_something ();
     elseif (X == 2)
       do_something_else ();
     else
       do_something_completely_different ();
     endif
</pre>
   <p class="noindent">This kind of code can however be very cumbersome to both write and
maintain.  To overcome this problem Octave supports the <code>switch</code>
statement.  Using this statement, the above example becomes

<pre class="example">     switch (X)
       case 1
         do_something ();
       case 2
         do_something_else ();
       otherwise
         do_something_completely_different ();
     endswitch
</pre>
   <p class="noindent">This code makes the repetitive structure of the problem more explicit,
making the code easier to read, and hence maintain.  Also, if the
variable <code>X</code> should change its name, only one line would need
changing compared to one line per case when <code>if</code> statements are
used.

   <p>The general form of the <code>switch</code> statement is

<pre class="example">     switch <var>expression</var>
       case <var>label</var>
         <var>command_list</var>
       case <var>label</var>
         <var>command_list</var>
       ...
     
       otherwise
         <var>command_list</var>
     endswitch
</pre>
   <p class="noindent">where <var>label</var> can be any expression.  However, duplicate
<var>label</var> values are not detected, and only the <var>command_list</var>
corresponding to the first match will be executed.  For the
<code>switch</code> statement to be meaningful at least one
<code>case </code><var>label</var> <var>command_list</var> clause must be present,
while the <code>otherwise </code><var>command_list</var> clause is optional.

   <p>If <var>label</var> is a cell array the corresponding <var>command_list</var>
is executed if <em>any</em> of the elements of the cell array match
<var>expression</var>.  As an example, the following program will print
&lsquo;<samp><span class="samp">Variable is either 6 or 7</span></samp>&rsquo;.

<pre class="example">     A = 7;
     switch A
       case { 6, 7 }
         printf ("variable is either 6 or 7\n");
       otherwise
         printf ("variable is neither 6 nor 7\n");
     endswitch
</pre>
   <p>As with all other specific <code>end</code> keywords, <code>endswitch</code> may be
replaced by <code>end</code>, but you can get better diagnostics if you use
the specific forms.

<!-- Strings can be matched -->
   <p>One advantage of using the <code>switch</code> statement compared to using
<code>if</code> statements is that the <var>label</var>s can be strings.  If an
<code>if</code> statement is used it is <em>not</em> possible to write

<pre class="example">     if (X == "a string") # This is NOT valid
</pre>
   <p class="noindent">since a character-to-character comparison between <code>X</code> and the
string will be made instead of evaluating if the strings are equal. 
This special-case is handled by the <code>switch</code> statement, and it
is possible to write programs that look like this

<pre class="example">     switch (X)
       case "a string"
         do_something
       ...
     endswitch
</pre>
   <ul class="menu">
<li><a accesskey="1" href="Notes-for-the-C-Programmer.html#Notes-for-the-C-Programmer">Notes for the C Programmer</a>
</ul>

   </body></html>