Processing使って、プログラミングを基礎から解説します。
解説内容は、プログラミングの基礎になる以下についてです。
- 文字列の表示
- メソッドの作成
- ループ処理
- 配列の取り扱い
- 線形検索を実装
Processingの使い道については次の記事の「Processingとは」で説明していますので、気になる方は目を通してみてください。
Processingの書き方
Processingではsetup()とdraw()というメソッドがあらかじめ用意されています。
Processing特有の書き方になりますが、setup()で初期設定を行い、draw()で描画処理を行います。
draw()はプログラムが実行されている間、何度も繰返し実行されます。
繰返しを行いたくなければ、setup()の中にnoLoop();と記載します。
文字列の表示:Hello World!
どのプログラミング言語の学習でも最初に学ぶHello World!の表示です。
String strで文字列を定義し、printlnメソッドで文字列を表示します。
void setup(){
noLoop();
}
void draw(){
String str = "Hello World !";
println(str);
}
実行結果です。

ちゃんとHello World!と表示されました。
メソッドの作り方
パターン1:文字列
次はメソッドを作ってみましょう。
2つの文字列を受け取り、その2つをくっつけて1つの文字列にするメソッドを作ります。
以下のように、先ほど書いたHello Worldのコードを編集します。
「Hello」と「 World!」をメソッド内でくっつけ、「Hello World!」と表示します。
void setup(){
noLoop();
}
void draw(){
String str = "Hello";
String str2 = " World !";
println(join(str, str2));
}
String join(String str, String str2){
String msg = str + str2;
return msg;
}
実行結果です。

別々だった「Hello」と「 World!」が1つの「Hello World!」となりました。
パターン2:数字
パターン1ではわざわざメソッドを作るメリットがないので、「なんでメソッドを作るの?」と感じた方も多いかもしれません。
メソッドを作るメリットがあるのは次のような場合です。
void setup(){
noLoop();
}
void draw(){
int a = 1;
int b = 2;
int c = 3;
int ans1 = calc(a,b);
int ans2 = calc(b,c);
int ans3 = calc(c,a);
println(ans1);
println(ans2);
println(ans3);
}
int calc(int a, int b){
return 2*a + 3*b;
}
実行結果です。

もしメソッドを作っていないと、以下のように書かなければなりません。
int ans1 = 2*a + 3b;
int ans2 = 2*b + 3c;
int ans3 = 2*c + 3a;
そもそも繰り返し書くのが面倒ですし、もしこのような書き方をしていると以下のようにどこか書き間違えてもおかしくありません。
int ans1 = 2*a + 3b;
int ans2 = 2*b + 2c;
int ans3 = 2*c + 3a;
まとまった処理をメソッドにしてしまうことで、そのメソッドを1度テストすればそれ以降はそのメソッドを信頼できるようになります。
テストした後に新しくメソッドを使用する箇所を増やしても、その追加した処理は信頼できます。
プログラミングをする上で、「この処理は確実に正しく動いている」と信頼できるのはとても大事なことです。
もしバグがある場合、正しいと判断できる箇所は調査対象から除外もしくは後回しにできるからです。
ですからメソッドにまとめる習慣をつけることが大事です。
ループと配列を使って線形検索
最後にループと配列を使って線形検索をしてみましょう。
線形検索とはデータを検索するアルゴリズムの一つです。
配列などに格納されたデータを先頭から末尾まで順番に検索していき、目的のデータを見つけるまで検索を続ける手法です。
よく使われるので覚えておきましょう。
何のことかよく分からないかと思いますが、百聞は一見に如かずなのでコードを見てみましょう。
void setup(){
noLoop();
}
void draw(){
int[] data = {1,3,8,7,9,5,7,0};
int target = 5;
if(find(data, target)!=-1){
println("Success");
}else{
println("Not found");
}
}
int find(int[] data, int target){
int pos=-1;
for(int i = 0;i<data.length;i++){
if(data[i]==target){
pos=i;
println("Found:"+pos);
return pos;
}
}
return pos;
}
実行結果です。

6行目でint型の配列を作っています。
配列というのは複数の値を保持できるのですが、今回はint型なので数字が入ります。
この配列の中から5を探します。
探す処理はfindメソッドで行います。
5が見つかった場合は、配列の何番目に5があったかどうかを表示します。
今回は6番目に5がありますが結果は「Found:5」となっています。
6番目なのになぜ5となるかというと、パソコンは数字を1からではなく0から数えるためです。
findメソッドの中で行っている検索方法を線形探索といいます。
方法としてはforでループを作り、配列の要素をdata[i]として先頭から末尾までをチェックしています。
iの値は0から始まって、ループするごとに1ずつ大きくなります。
結果として配列の要素の数だけループするとdata[i]で全ての要素を表現できます。
戻り値は見つかった要素の番号を返します。
見つからない場合は-1です。
この戻り値を呼び出し側の8行目でチェックし、-1以外の値の場合は「Success」と表示しています。
最後に & 関連書籍
今回は以上で終わりです。
分かりにくいところや「もっとこうしてほしい」などのご意見がありましたら、ツイッターから連絡いただけると幸いです。
質問に関してもお気軽にお問い合わせください。
他の記事ではスマホアプリの開発やインスタグラムをスクレイピングする方法なども紹介しています。
興味があれば見てみてください。
以下は関連書籍です。
コメント