導入
文章にすると長くなって全体を理解しにくい状況でも、
また、
前回と今回で構造化プログラミングで学習し身につけておきたい大事な要素、
展開
流れ図を活用しよう
かつて、
流れ図
ここでお伝えしたいことは、
関数やメソッドといった一画面に収まる程度のコードについて、
[作業] 前回第6回に掲載したsketchSum1ToN.
の流れ図を描きましょう。
メソッドにまとめよう
似たコードが何度か登場するならば、
DRY原則 : Don't Repeat Yourself.
はるか昔、
さて、
Ex_03_14.pde
// Example 03-14 from "Getting Started with Processing"
// by Reas & Fry. O'Reilly / Make 2010
size(480, 120);
smooth();
background(0); // Black
fill(204); // Light gray
ellipse(132, 82, 200, 200); // Light gray circle
fill(153); // Medium gray
ellipse(228, -16, 200, 200); // Medium gray circle
fill(102); // Dark gray
ellipse(268, 118, 200, 200); // Dark gray circle
順次実行構造のシンプルなsketchです。このコードは次のような手順を繰り返しています。
- 塗りつぶしのグレースケール値を指定する
- ellipseを描く
これをメソッドを使って書き直してみましょう。書き直したsketchのファイル名はEx_
とします。
Processingでメソッドを使うためには、
一度だけ実行するコードならsetup
メソッドが適しています。
Ex_03_14WithMethod.pde
void setup(){
size(480, 120);
smooth();
background(0); // Black
fill(204); // Light gray
ellipse(132, 82, 200, 200); // Light gray circle
fill(153); // Medium gray
ellipse(228, -16, 200, 200); // Medium gray circle
fill(102); // Dark gray
ellipse(268, 118, 200, 200); // Dark gray circle
}
マウスやキーボードの操作に応じて画像を刻々と描き替えたいならば、draw
メソッドが適しています。それはまた別のときに説明します。
さて、fill
メソッドとellipse
メソッドのセットをひとつのメソッドにまとめます。メソッドを呼び出す際に与えたい変化は引数で与えます。ここでは次の情報を引数として与えます。
- 塗りつぶしの濃さであるグレースケール値
(float) - 楕円中心の(x,y)座標値
(float) - 楕円を囲む矩形の幅と高さ
(float)
以上の引数を受け取って楕円を描くメソッドをdrawGrayEllipse
とします。
Ex_03_14WithMethod.pde
void setup(){
size(480, 120);
smooth();
background(0); // Black
drawGrayEllipse(204,132, 82, 200, 200); // Light gray circle
drawGrayEllipse(153,228, -16, 200, 200); // Medium gray circle
drawGrayEllipse(102,268, 118, 200, 200); // Dark gray circle
}
void drawGrayEllipse(
float gScale, // 真っ白を0,真っ黒を255とする。
float xCenter, // 楕円の中心x座標
float yCenter, // 楕円の中心y座標
float eWidth, // 楕円の横幅
float eHeight){// 楕円の高さ
fill(gScale);
ellipse(xCenter,yCenter,eWidth,eHeight);
}
実行結果は次のとおりです。
Ex_03_14WithMethod.pde
の実行結果
今回の場合はsketchの行数が増えましたが、
[作業] この節の手順を実際に追体験してください。Processingを起動して入力し実行しましょう。Processingに付属のその他の順次実行構造のsketchについてもメソッド化してみてください。
C言語では同等のことを
演習
演習1(難易度:easy)
サンプルsketch Ex_
をメソッドを使って書き直しましょう。色付きの円を描くメソッドをdrawColorEllipse
、Ex_
としてください。
Ex_03_16.pde
// Example 03-16 from "Getting Started with Processing"
// by Reas & Fry. O'Reilly / Make 2010
size(480, 120);
noStroke();
smooth();
background(0, 26, 51); // Dark blue color
fill(255, 0, 0); // Red color
ellipse(132, 82, 200, 200); // Red circle
fill(0, 255, 0); // Green color
ellipse(228, -16, 200, 200); // Green circle
fill(0, 0, 255); // Blue color
ellipse(268, 118, 200, 200); // Blue circle
演習2(難易度:middle)
次の流れ図をコードにしましょう。ファイル名はExercise07_
にしてください。

まとめ
- 流れ図の活用をお勧めしました。
- メソッドの活用をお勧めしました。
学習の確認
それぞれの項目で、
- 流れ図の大切さが理解できましたか?
- 理解できた。流れ図をコーディングに生かす決心をした。
- 理解できた。しかし、
必要を感じない。 - 理解できない。
- メソッドの大切さが理解できましたか?
- 理解できた。
- 理解はできるが必要を感じない。
- 理解できない。
参考文献
- 『Java言語で学ぶリファクタリング入門』
(結城浩 著、 SBクリエイティブ) 「第5章 メソッドの抽出」 を読んでみてください。
演習解答
Ex_
03_ 16WithMethod. pde Exercise07_
02. pde - ずいぶんあっさりしたものです。