home processing download documents tutorial python tutorial gallery source about
 チュートリアル (back to the list of tutorials)

条件分岐

     Ifによる条件分岐

If文は処理の条件分岐を実現します。 与えられた条件式が真(true)である場合のみ、与えられた処理を実行します。 以下のスケッチでは、カウンタ変数(i)の値が5以下であるときのみ点を生成します。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i < 5 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

If文の条件節で用いられている演算子"<"は、左項の値が右項の値より小さい際に真(true)を返します。 ">"演算子は逆に、左項の値がより大きい際に真を返します。また、 "<="演算子は左項の値が右項の値と等しいかより小さい際に真となります。 ">="演算子は逆に、左項が等しいかより大きい際に真となります。

上記スケッチと逆の条件を設定するには、"<"の代わりに">="を用います。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i >= 5 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

If文の制御の流れを図で確認します。

  1. 条件節"i < 5"がカウンタ変数(i)が5を下回るか否かを評価します。
  2. 評価が真(true)である際、与えられた処理を進めます。そうでなければ、処理を無視して終了します。
  3. If文本体に与えられた処理{ ... }が実行されます。

     IfとElse

If文の条件節が偽(false)を返す際、Else節に与えられた処理が実行されます。 上記の例のようにElse節が明記されていない場合は何の処理も行われません。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i < 5 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
    else{
      new IPoint(i*10, j*10, -10).clr(0, j*0.1, i*0.1);
    }
  }
}

If-Else文の制御の流れを図で確認します。

  1. 条件節"i < 5"がカウンター値(i)が5を下回るか否かを評価します。
  2. 評価が真である場合、処理は手順3に進みます。逆に偽(false)である場合、処理は手順4に進みます。
  3. If節の処理{ ... }が実行されます。
  4. Else節の処理{ ... }が実行されます。

     IfとElse ifとElse

Else-if文を用いることで、三通り以上の条件分岐を表現できます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i < 5 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
    else if( i < 7 ){
      new IPoint(i*10, j*10, 10).clr(1, 1-j*0.1, 0);
    }
    else{
      new IPoint(i*10, j*10, -10).clr(0, j*0.1, i*0.1);
    }
  }
}

Else-if文を用いたIf文の制御の流れを図で確認します。

  1. 条件節"i < 5"がカウンター値(i)が5を下回るか否かを評価します。
  2. 評価が真である場合、処理は手順3に進みます。逆に偽(false)である場合、処理は手順4に進みます。
  3. If節の処理{ ... }が実行されます。
  4. 条件節"i < 7"がカウンター値(i)が7を下回るか否かを評価します。
  5. 評価が真である場合、処理は手順6に進みます。そうでなければ、手順7に進みます。
  6. Else-if節の処理{ ... }が実行されます。
  7. Else節の処理{ ... }が実行されます。

Else-if文は任意の数だけ用いることができます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i < 5 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
    else if( i < 7 ){
      new IPoint(i*10, j*10, 10).clr(1, 1-j*0.1, 0);
    }
    else if( i < 9 ){
      new IPoint(i*10, j*10, -20).clr(1, j*0.1, 1);
    }
    else{
      new IPoint(i*10, j*10, -10).clr(0, j*0.1, i*0.1);
    }
  }
}


     比較演算子

上記の演算子("<", ">", "<=", ">=")に加え、Processingは"=="演算子と"!="演算子を持ちます。これらは比較演算子と総称されます。 "=="演算子は左右項の値が等しい際に真を、"!="演算子は等しくない際に真を返します。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i == 5 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i != 5 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}


     &&(かつ)、||(または)、!(否定)

真偽は&&(かつ)、||(または)、!(否定)の演算子によって合成することができます。これらの演算子は論理演算子と総称されます。
&&演算子は左右項の真偽値を乗算によって合成します。 両方が真の際に真、そうでない場合に偽を返します。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i < 5 && j < 3 ){
      new IPoint(i*10, j*10, -20).clr(i*0.1, j*0.1, 1);
    }
    else{
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

||演算子は左右項の真偽値を加算によって合成します。 片方ないし両方が真の際に真、そうでない場合に偽を返します。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i < 5 || j < 3 ){
      new IPoint(i*10, j*10, -20).clr(i*0.1, j*0.1, 1);
    }
    else{
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

!演算子は真偽値を反転します。 真偽値が真の際は偽、偽の際は真を返します。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( !(i < 5 || j < 3) ){ // same with i>=5 && i>=3
      new IPoint(i*10, j*10, -20).clr(i*0.1, j*0.1, 1);
    }
    else{
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

括弧が計算順序を矯正していることに注意してください。


     %(余剰演算子)の使い方

%演算子は以下のように左項の値を右項の値で割る際の余りを返します。
3 % 2 = 1
4 % 2 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0

この性格は周期的な条件分岐に有用です。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i % 2 == 0 ){
      new IPoint(i*10, j*10, 20).clr(0, 1., 1.);
    }
    else{
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( i % 4 == 0 ){
      new IPoint(i*10, j*10, 20).clr(0, 1., 1.);
    }
    else if( i % 4 == 1 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
  }
}

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    if( ( i + j ) % 2 == 0 ){
      new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
    }
    // this condition is same with
    // if( i%2==0 && j%2==0 || i%2==1 && j%2==1 )
  }
}

特に、二重反復においてカウンタ変数が(i)と(j)であるとき、"(i + j) % 2 == 0"は斜めの格子形状を生成します。


(トピック一覧へ戻る)

HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java / Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT