Processingで使えないJavaの機能

Processingは基本的にコーディングではJava言語を使用します。ですが、Processingでは使えないJavaの機能もあります。

はじめに

Processingはメディアアート制作を目的としたツールで、プログラミングしてビジュアルデザインしたものを表現できるようになっています。

ですので使用するプログラミング言語のベースはJavaですが、Javaを簡略化してよりグラッフィク機能に特化した使い方ができるように作られています。

一方で簡単にプログラムしたものを実行して視覚的表現が得られるので、初心者がプログラミング学習をするツールとしても最適です。

ですがJavaを学習するつもりでProcessingを使っていると、少し違和感がある部分も出てきてしまいます。

ここでは、Javaの学習でProcessingを使うときに遭遇する本来のJavaの機能とProcessingでは使えないJavaの機能の主なものを紹介します。

staticキーワード

Javaはプログラムで記述したフィールド(変数)にstaticキーワードを指定して静的フィールドにすることができます。

例)
static int num;

上記の場合はnumを静的フィールドに指定しています。

こうすることで以下の効果が発生します。

  • インスタンスを生成せずとも宣言することでインスタンスが作られる
  • static宣言したフィールドを持つクラスは別に複数インスタンスを生成しても全て同じものを参照することになる

以下のようにクラスに宣言されているものとして見てみましょう。

public class Main {
 static int num;
}

この場合numフィールドはMainクラスのインスタンスを生成せずとも実体があるため、newによるインスタンス生成がなくてもアクセスできます。

表記)
Main.num

そしてMainクラスのインスタンスを複数生成しても全て同じものを参照します。

public class Work {
 public static void main (String[] args) {
  Main m1 = new Main();
  Main m2 = new Main();
  m1.num = 1;
  m2.num = 2;
  System.out.println(m1.num); // 2を表示
 }
}

このstaticをProcessingで使うとエラーとなり使えません。

ラムダ式

Javaのラムダ式はクラスの宣言やインスタンス化を簡潔にした記述式です。

メソッドを変数と同様に扱った記述式とも説明されています。

どのようなメリットがあるかというと、複数行使って書いていたソースコードをより短く簡潔に記述することができます。

ラムダ式を説明している書籍などによっては、読みやすくプログラムを理解しやすくした記述と書かれているものもあります。

しかし、この記述に慣れていないと古い記述方法のほうがわかりやすいと思われることもあるかもしれません。

JavaではStream APIを利用するときはほぼラムダ式が使われると思います。

書式)
(引数1, 引数2, ... ) -> { 処理; }

以下の処理は配列に3つの文字列を格納してコンソールに表示しています。

import java.util.ArrayList;
import java.util.List;

public class Main {
 public static void main(String[] args) {
  List items = new ArrayList();
  items.add("独楽");
  items.add("お手玉");
  items.add("竹とんぼ");
  // 表示1
  for (int i = 0; i < items.size(); i++) {
   System.out.println(items.get(i));
  }

  // 表示2
  for (String item : items) {
   System.out.println(item);
  }

  // 表示3
  items.forEach((item) -> {System.out.println(item);});
 }
}

表示1,表示2,表示3とも配列の文字列を全てコンソールに表示します。

表示1は古くからの書き方になります。

表示2は拡張for文を使った書き方です。

表示3がラムダ式となります。

表示3のラムダ式はもう少し省略して記述することができます。

items.forEach(item -> System.out.println(item));

引数が1つだったり処理が単行のときはカッコが省略できます。

引数に型宣言がないのは、Javaのラムダ式は型を類推するので記述の必要がありません。

このラムダ式記述方法がProcessingではエラーとなります。

最後に

ProcessingをJavaの学習目的で使用するときは、Java特有の技術的な事柄を学習するというよりは、Javaでプログラミング初歩の基本的な文法や考え方を学習するのがメインになると思います。