ページの作成:「== 概要 == 繰り返し処理は、決まった回数や条件を満たしている間は同じ処理を繰り返し行う場合に使用する。<br> ここでは、<c…」
 
 
(同じ利用者による、間の5版が非表示)
151行目: 151行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>
== while文 ==
==== while文の基礎 ====
while文は、指定した条件式が真の間、繰り返しを実行する。<br>
繰り返し回数が決まっていない場合に有効な構文である。<br>
<br>
書式は、以下の通りである。<br>
条件式は、if文と同様、比較演算子を使用して、x == 10、y > 15等と記述する。<br>
条件式が真である場合、ブロック内に記述された処理を実行する。<br>
そして、改めて条件式を評価して、真であれば再度ブロック内の処理を実行して、偽ならばwhile文を終了する。<br>
<syntaxhighlight lang="php">
while(条件式)
{
    実行する処理1;
    実行する処理2;
}
</syntaxhighlight>
<br>
また、実行する処理が1つのみの場合は、ブロックを省略して記述してもよい。<br>
<syntaxhighlight lang="php">
while(条件式)
    実行する処理;
</syntaxhighlight>
<br>
以下の例では、変数numが2になるまで変数numの値を出力している。
<syntaxhighlight lang="php">
$num = 0;
while(num < 2)
{
    print "num=".$num;
    $num += 1;
}
</syntaxhighlight>
<br>
また、while文の処理の中でさらに別のwhile文を記述することもできる。<br>
<br>
以下の例では、外側のwhile文が1回実行されるごとに内側のwhile文が3回実行される。<br>
2つの条件を変化させながら繰り返し処理を実行することは頻繁にある。<br>
<syntaxhighlight lang="php">
$i = 0;
while($i < 3)
{
    $j = 0;
    while($j < 3)
    {
      print '(i, j)=('.$i.','.$j.')';
      $j += 1;
    }
    $i += 1;
}
</syntaxhighlight>
<br>
== breakとcontinue ==
==== break ====
繰り返し処理の中で<code>break</code>を実行すると、繰り返し処理を終了させることができる。<br>
<code>break</code>は、繰り返し処理の他に<code>switch</code>文でも使用される。<br>
<br>
以下の例では、変数の値を1から100まで変化させて合計した値を表示している。<br>
合計した値が1000を越える場合は<code>break</code>を実行して、<code>while</code>文を終了している。<br>
このように、<code>break</code>を使用することで任意のタイミングで<code>for</code>文や<code>while</code>文を終了することが可能となる。<br>
<syntaxhighlight lang="php">
$count = 1;
$sum = 0;
while($count <= 100)
{
    $sum += $count;
    if($sum > 1000)
    {
      print '1000を越えたので count = '.$count.' で終了します';
      break;
    }
    $count += 1;
}
// breakが実行された時に処理が移る位置
print 'sum = '.$sum;
</syntaxhighlight>
<br>
また、ネストされた繰り返し処理において、<code>break</code>に数値を記述すると、抜ける繰り返し処理の階層を指定することができる。<br>
break <階層数>;
<br>
以下の例では、<code>break</code>が実行された時に、2階層分の繰り返し処理を抜けている。<br>
このように、<code>break</code>を使用することで、単純に繰り返し処理を抜けるだけではなく、何階層抜けるのかを指定することも可能である。<br>
<syntaxhighlight lang="php">
$i = 1;
while($i < 5)
{
    $j = 1;
    while($j < 5)
    {
      if($i * $j > 15)
      {
          break 2;
      }
      $j += 1;
    }
    $i += 1;
}
// breakが実行された時に処理が移る位置
</syntaxhighlight>
<br>
==== continue ====
繰り返し処理の中で<code>continue</code>を実行する時、繰り返し処理のブロック内でそれ以降の処理を実行せずに、次の条件式の評価を行う。<br>
<br>
以下の例では、変数の値を1から100まで変化させて合計した値を出力している。<br>
<code>while</code>文の処理の中で、加算しようとする値が2の倍数である場合は、加算を行わずに次の条件式の評価へ処理が移る。<br>
このように、<code>continue</code>を使用することにより、細かく繰り返し処理を制御することが可能となる。<br>
<syntaxhighlight lang="php">
$count = 0;
$sum = 0;
while($count < 100)
{
    $count += 1;
    if($count % 2 == 0)
    {
      continue;
    }
    $sum += $count;
}
print 'sum = '.$sum;
</syntaxhighlight>
<br>
また、ネストされた繰り返し処理において、<code>break</code>と同様に階層数を指定することで、何階層を抜けて条件式の評価に戻るのかを指定することができる。<br>
<syntaxhighlight lang="php">
continue <階層数>;
</syntaxhighlight>
<br>
以下の例では、<code>continue</code>が実行された時、2階層分の残りの繰り返し処理を飛ばして、外側(while文)の条件式の評価に処理が移る。<br>
<code>break</code>と同様、<code>continue</code>を使用することにより、繰り返し処理の制御をより細かく行うことができる。<br>
<syntaxhighlight lang="php">
$count1 = 0;
$sum = 0;
while($count1 < 10)
{
    $count1 += 1;
    $count2 = 0;
    while($count2 < 10)
    {
      $count2 += 1;
      if($count1 * $count2 > 30)
      {
          continue 2;
      }
      $sum += $count1 * $count2;
    }
}
print 'sum = '.$sum;
</syntaxhighlight>
<br><br>
== do-while文 ==
do-while文は、必ず1回は処理を行う場合に有効な構文である。<br>
<br>
書式は、以下の通りである。<br>
<syntaxhighlight lang="php">
do
{
    実行する処理1;
    実行する処理2;
} while(条件式);
</syntaxhighlight>
<br>
do-while文では、まず、ブロック内の処理が実行された後で条件式の評価が行われる。<br>
そのため、少なくとも1回は必ずブロック内の処理が実行される。<br>
条件式の評価が真であれば再度先頭に戻りブロック内の処理を実行して、偽ならばdo-while文を終了する。<br>
<br>
実行される処理が1つのみの場合は、ブロックを省略して記述してもよい。<br>
<syntaxhighlight lang="php">
do {
    実行する処理;
} while (条件式);
</syntaxhighlight>
<br>
以下の例では、変数numが2になるまで変数numの値を出力している。<br>
<syntaxhighlight lang="php">
$num = 0;
do
{
    print "num=".$num;
    $num += 1;
}while(num < 2);
</syntaxhighlight>
<br>
なお、<code>for</code>文や<code>while</code>文と同様、<code>break</code>や<code>continue</code>を使用することが可能である。<br>
<br>
<u>※注意</u><br>
<u>PHPのdo-while文では、末尾のセミコロンは文法的に必須であるが、セミコロンが無くても動作することがある。</u><br>
<u>これは、PHPのパーサーが寛容な設計である、あるいは、内部的に文の終わりを推測できる場合があるためである。</u><br>
<br>
<u>ただし、PHPではセミコロンを省略するのは推奨されない。</u><br>
<u>これは、コードの可読性が低下する、PHP言語仕様に準拠していない、IDEや静的解析ツールが警告を出す可能性があるためである。</u><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:Web]]
[[カテゴリ:Web]]