第15回 – メソッドを作ろう 1


今回からメソッドについて見ていきたいと思います。

メソッドとは、平たく言えば「命令を集めたもの」です。
今まで何度も使ってきた円を描くためのellipse()や、塗りつぶすためのfill()なども実はメソッドです。
それらはprocessingが予め用意してくれているので自分で作る必要がなかった、というだけです。
しかし、複雑な処理や膨大な量のプログラムを書いていくと、それらを自作した方が便利な機会というのは山程あります。

例えば、
「青い円を描いて、その中に白い四角形を描いて、さらに直径ぴったりの小さい赤い円を描く。」
という処理が、1つのプログラムの中に何回も出てくるとしましょう。(例えば、です)

普通にやろうとすると、毎回こんな風に書く必要があります。

void setup() {
  size(800, 800);
  rectMode(CENTER);
}

void draw() {
  background(255);
  fill(0, 255, 0);
  ellipse(300, 300, 200, 200);
  fill(255, 255, 255);
  rect(300, 300, 100, 100);
  fill(255, 0, 0);
  ellipse(300, 300, 100, 100);
}

sketch_160830c

指定しなければならない数字が多くて既にちょっと面倒ですが、これを5回くらい、特に規則性のない位置に描かなくてはならない、となったらどうでしょう?
前回ご紹介した配列とloopで描く、という方法もありますが、その場合配列を一体いくつ作らないといけないのでしょうか?

…と、ここで自作メソッドの登場です。

メソッドを作る

メソッドには「返り値(かえりち)のあるもの」「引数(ひきすう)のあるもの」「両方あるもの」「両方ないもの」の4種類がありますが、そう難しく考える必要はありません。
まず第一回目の今回は「引数も返り値もないもの」だけを扱っていきます
processingにおいて、そのようなメソッドを作るには、以下のようにします。

void drawShapes(){
  
  //処理の内容
  
}

まず、一番最初の voidの部分が、「戻り値がないよ」という意味を表しています。
そして、その次の drawShapes()の部分が、このメソッドの名前です。
()の部分が、このメソッドに引数が無いことを表しています。(ちょっとわかりにくいですが、引数があるメソッドを次回学習するので、その時「引数がない」の意味が解ると思います)

で、処理の内容を書きます。

void drawShapes() {
  fill(0, 255, 0);
  ellipse(300, 300, 200, 200);
  fill(255, 255, 255);
  rect(300, 300, 100, 100);
  fill(255, 0, 0);
  ellipse(300, 300, 100, 100);
}

↑これは、さっきdrawの中に入っていた一連の処理をそのままコピペしただけです。
さて、これで自作メソッドの完成です。

全文は以下のようになります。

void setup() {

  size(800, 800);
  rectMode(CENTER);
}


void draw() {
  background(255);
  drawShapes();
}


void drawShapes() {

  fill(0, 255, 0);
  ellipse(300, 300, 200, 200);
  fill(255, 255, 255);
  rect(300, 300, 100, 100);
  fill(255, 0, 0);
  ellipse(300, 300, 100, 100);
}

呼び出す時にはname()のように、メソッド名の後に()をつければOKです。
今回の場合は drawShapes()とdrawの中に書いてあげれば呼び出すことが出来ます。

draw()やsetup()も、実は自作のメソッドの一種だったのですね。もっとも、この2つはちょっと特殊なので同じようには考えられませんが。

しかし、これではメソッドとして便利かと言われればとてもそうは思えません。
場所やサイズを自由に変更出来なければ意味がないですよね…?

次回はメソッドに引数を与えることによって、呼び出した命令の数字を後から簡単に変更出来るようにします。
では。