a-05 条件と分岐

2011年5月 9日

このエントリーをはてなブックマークに追加

if〜else〜 条件分岐命令

条件ごとに処理を行いたい場合に利用する。

if (条件式) {条件式が「真(true)」の場合に実行する内容をここに書く。「偽(false)」の場合は実行されない。}

「条件式がtrueになる場合」

07-1

int i = 1;
if (i > 0) background(255, 0, 0); //iに代入された「1は0よりも大きい」はtrueなので、「背景色を赤にする」を実行する

「条件式がfalseになる場合」

if

int i = 0;
if (i > 0) background(255, 0, 0); //iに代入された「0は0よりも大きい」はtrueではない(false)ので、「背景色を赤にする」は実行されない

※条件式に応じて複数の処理を実行する場合は、その処理を{ }でくくる。{ }の内容にはインデントを入れる。

int i = 0;
if (i > 0) {
  background(255, 0, 0);
  ellipse(50, 50, 50, 50);
}

条件式

== 左辺が右辺に等しい

「変数iが10に等しければtrue」

i == 10

※「i=10」は「iに10を代入」である。混同しやすいので注意。

!= 左辺が右辺に等しくない

「変数iが10に等しくなければtrue」

i! = 10

< 左辺が右辺より小さい

「変数iが10より小さければtrue」

i < 10

> 左辺が右辺より大きい

「変数iが10より大きければtrue」

i > 10

<= 左辺が右辺以下

「変数iが10以下ならばtrue」

i <= 10

>= 左辺が右辺以上

「変数iが10以上ならばtrue」

i >= 10

※<=, >=を逆に書く(=<, =>)とエラーになるので注意。

&& かつ

「変数iが0より大きく、かつ、変数iが10より小さければtrue」

i > 0 && i < 10

|| または

「変数iが0より小さい、または、変数iが10より大きいならばtrue」

i < 0 || i > 10

演習

「繰り返し、線を描く(ウィンドウの幅いっぱいに縦線を敷き詰める)」

for(int i = 0; i < width; i++){
  line(i, 0, i, height);
}

※このプログラムに条件分岐を加えていく → 「特定の条件を満たす場合にのみ、線を描く」

if-ex1 if-ex2 if-ex3 if-ex4 if-ex7 if-ex5 if-ex6

  • x座標が3のとき
  • x座標が3でないとき
  • x座標が33未満のとき
  • x座標が3または33のとき
  • x座標が3以上33以下のとき
  • x座標が3の倍数のとき
  • x座標が3の倍数かつ7の倍数でないとき

※ i%3は「iを3で割ったときの余り」を計算する。たとえば「5%3」は「2」であり、「9%3」は「0」となる。

if (条件式) {条件式がtrueの場合の実行内容} else {条件式がfalseの場合の実行内容}

「条件式の結果によって、異なる処理を実行する」

07-1 if-else

float ramdomNum = random(100); //0から100の間の値をランダムに生成
println(ramdomNum); //コンソールに値を表示
if (ramdomNum < 50) background(255, 0, 0); //50未満ならば、背景色を赤にする
else background(0, 255, 0); //そうでないなら、背景を緑にする

「画面左から縦線をびっしりと引くとき、ランダムな値に応じて線の色を設定する」

if-else-line

//画面左から縦線をびっしりと引く
for (int i = 0; i < width; i++) {
  float ramdomNum = random(100); //0から100の間の値をランダムに生成
  if (ramdomNum < 50) stroke(0); //50未満ならば、線の色を黒に設定
  else stroke(255); //そうでないとき、線の色を白に設定
  line(i, 0, i, height); //縦線を描く
}

「画面左から縦線をびっしりと引くとき、x座標が3の倍数(3で割って割り切れる)のときには黒い線を、3の倍数でないときには白い線を描く」

if-else-line

//画面左から縦線をびっしりと引く
for (int i = 0; i < width; i++) {
  //条件に従って色の設定をする
  if (i%3 == 0) stroke(0); //iが3で割り切れるとき、線の色を黒に設定
  else stroke(255); //そうでないとき、線の色を白に設定
  line(i, 0, i, height);
}

if (条件式A) {条件式Aがtrueの場合の実行内容} else if (条件式B) {条件式Bがtrueの場合の実行内容} else {条件式A,Bがfalseの場合の実行内容}

「画面左から縦線をびっしりと引くとき、x座標が3の倍数のときには赤い線を、3で割って1余るときには緑の線を、それら以外のときには青い線を描く」

if-elseif-else-line

//画面左から縦線をびっしりと引く
for (int i = 0; i < width; i++) {
  //条件に従って色の設定をする
  if (i%3 == 0) stroke(255, 0, 0); //iが3で割り切れるとき、線の色を赤に設定
  else if (i%3 == 1) stroke(0, 255, 0); //iを3で割って1余るとき、線の色を緑に設定
  else stroke(0, 0, 255); //そうでないとき、線の色を青に設定
  line(i, 0, i, height);
}

switch 〜 case 〜 default パターン振り分け

↑上のプログラムをswitch文で書きかえる

//画面左から縦線をびっしりと引く
for (int i = 0; i < width; i++) {
  switch (i%3) {
    case 0: //i%3の結果が0のとき以下を実行 
      stroke(255, 0, 0);
      break; // switch文を抜ける
    case 1: //i%3の結果が1のとき以下を実行 
      stroke(0, 255, 0);
      break;
    default: //どのケースにも当てはまらないとき以下を実行
      stroke(0, 0, 255);
      break;
  }
  line(i, 0, i, height);
}

まとめ

制御

条件

このエントリーをはてなブックマークに追加

Archives

以下の記事は、2011年度に筆者が大学での授業で利用していた補足資料です。現在、これらをベースに本ウェブサイトを再構築しています。完了するまで一時的に掲載します。


About

筆者: @mathatelle

ジェネラティブ・アート -Processingによる実践ガイド Processing: A Programming Handbook for Visual Designers and Artists Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction (Morgan Kaufmann Series in Computer Graphics and Geometric Modeling) Processingをはじめよう (Make: PROJECTS) Built with Processing[Ver. 1.x対応版] -デザイン/アートのためのプログラミング入門 Processing アニメーションプログラミング入門 デザイン言語 Processing入門 - 楽しく学ぶコンピュテーショナルデザイン Processingプログラミング入門―Javaベースのオープンソース統合開発環境 ProcessingでかんたんAndroidプログラミング FORM+CODE -デザイン/アート/建築における、かたちとコード Form+Code in Design, Art, and Architecture (Design Briefs) Generative Art: A Practical Guide Using Processing Generative Gestaltung ビジュアライジング・データ ―Processingによる情報視覚化手法 ARプログラミング—Processingでつくる拡張現実感のレシピ— Arduinoをはじめよう 第2版 (Make:PROJECTS) +GAINER―PHYSICAL COMPUTING WITH GAINER Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門 ビューティフルビジュアライゼーション ビジュアル・コンプレキシティ ―情報パターンのマッピング