◆PROCESSING 逆引きリファレンス
カテゴリー:プログラミング
【解説】
多くのプログラミング言語では、様々なデータや数値を変数に格納します。
変数に「どんな値でも格納できる」という言語もありますが、PROCESSINGでは変数に格納できるデータの種類(範囲)を決めています。
「整数だけを扱う」変数とか「文字列だけを扱う」変数といった感じですね。この「あつかう事ができる値の種類」の事を、変数の「型」と言います。
少し専門的な話をすると、PROCESSINGで利用する型にはComposite(コンポジット)型とPrimitive(プリミティブ)型があります。
Primitive(プリミティブ)とは直訳すると「基本の」とか「原始的な」という意味です。整数とか浮動小数点など、最も基本となるデータ型になります。
Composite(コンポジット)とは直訳すると「合成」という意味です。PROCESSINGでは、沢山のデータをひとまとめにして扱うことが出来る便利な型(オブジェクト)を指します。
難しく思える方は・・・例えば「プリン」を1つだけ管理する小さな箱がPrimitive(プリミティブ)で、プリンを1ダースも2ダースもまとめて管理できる大きな箱がComposite(コンポジット)と考えてください(笑)。
以下に少し詳しく説明しますね。
●Primitive(プリミティブ)型
・int : イント または インテジャー
整数を扱う型です。32bit値を扱う事が可能です。具体的には -2147483648 から+2147483647 までの値をあつかえます。ざっくりと±21億まで扱えると思っていればOKです。意識して使わない限り、PROCESSINGでは整数はintとして扱われます。約±21億を扱うことが可能ですので、普通の整数ならintで十分です。預金通帳の残高がintでは足りないという方は、ぜひご一報ください(笑)。
・long : ロング
整数を扱う型です。intとの違いは、扱える値の範囲が大きい事です。64bit値を扱う事が可能です。具体的には -9223372036854775808 から + 9223372036854775807 までの値をあつかえます。大きすぎて数えられませんが・・・約±900京(けい)です。一十百千万億兆のうえの位・・・京(けい)です。世界人口でさえ十分に収まります。
・float : フロート
浮動小数点を扱う型です。32bitの浮動小数点を扱います。浮動小数点を説明するのは難しいのですが、ざっくりと 3.14のような小数点以下の値をもつものと思って頂ければOKです。具体的には 1.175494 × 10-38 ~ 3.402823 × 1038の値を扱うことが可能です。ただし精度は6~7桁しかありません。
・double : ダブル
浮動小数点を扱う型です。64bitの浮動小数点を扱います。int型に対するlong型のように、より大きな値を扱うことが可能です。2.225074 × 10-308 ~ 1.797693 × 10308までの値を扱うことが可能です。float型よりも計算速度が落ちますが、高い精度で計算が可能です。精度は15~16桁です。
・byte : バイト
整数を扱う型です。intよりも小さな範囲の値を扱います。8bit値を扱う事が可能です。具体的には -128 から+127 までの値をあつかいます。普通の整数を扱うならint型で十分です。byte型は主に通信関係のプログラムを作成する場合などに使いますが・・・マイナーな存在ですので、普段はあまり利用しません(笑)。
・char : チャー または キャラ または キャラクタ
整数を扱う型です。intよりも小さな範囲の値を扱います。16bit値を扱う事が可能です。他の言語だとcharは8bitの値を扱うものもありますが、PROCESSINGでは16bitです。charは、いろいろな値(身長、体重、年齢、長さ、重さなど)を扱うというよりは、文字を扱う目的で利用されます。具体的にはUTF16の1文字=2byte=16bitを扱うことが可能です(※)。大雑把にいえばPROCESSINGで1文字だけを扱うなら char、複数の文字列を扱うなら String、めんどくさければ1文字だろうが文字列だろうが Stringとおぼえてください(笑)。
(※)調べていただくとわかりますが、UTF16が扱う文字コードは正確には2byteとは限りません。別の言い方をすると、3byte以上で表現されるUTF16文字はPROCESSINGでは利用できないという事なんですね。ちなみにUNIコードって何さ?という方は「ウナのIT資格1問1答」さんの記事が参考になります。
・boolean : ブール、ブーリアン
真偽値ともいいます。true(真)かfalse(偽)のどちらかを扱います。他の言語ではtrue=1、false=1以外 とする言語もありますが、PROCESSINGのboolean型ではtrueかfalseしか扱うことができません。主にフラグ(何かの処理を実行したか否かを示す情報)や、そもそも状態が2つしかないもの(男と女など・・・あ、オカマはbooleanでは表現不可能ですねw)といった情報を扱うのに便利です。
・short : ショート
公式リファレンスには掲載されていません。PROCESSINGはJavaの流れを汲む言語ですので、short型を扱えるようです(少なくともVer3.0α版以下ではエラーにはなりませんでした)。整数を扱う型です。intよりも小さな範囲の値を扱います。16bit値を扱う事が可能です。具体的には-32768 から +32767までの値をあつかえます。charとの違いは、文字ではなくて、いろいろな値(身長、体重、年齢、長さ、重さなど)を扱う目的で使うことです。・・・が普通はintで十分ですので、これもマイナーな型ですね。
・color : カラー
PROCESSING独自の型です。32bit値を扱う事が可能です。具体的には -2147483648 から+2147483647 までの値をあつかえます。ただし、intのようにいろいろな値(身長、体重、年齢、長さ、重さなど)を扱うのではなく、RGB、ARGB、HSBなどの色情報を扱うことを目的とした型です。color型で色以外の値を扱うプログラムはオススメできません・・・。ARGBを扱う場合、先頭の2byteがA(透明度)、次の2byteがR(赤濃度)、その次の2byteがG(緑濃度)、最後の2byteがB(青濃度)を表します。
●Composite(コンポジット)型
コンポジット型にはいろいろな種類がありますので、ここでは代表的なものだけ紹介したいと思います。説明が小難しく感じる方は、なにはともあれ String型 だけ覚えてもらえれば、まずは十分です(笑)。
コンポジット型の変数は、基本的には配列変数の1種です。配列変数にくらべ、要素の追加・削除・並び替えなどを便利に行うメソッドが用意されています。ですので、プログラミングに慣れてくると利用する機会が増えてくると思います。
ちなみに、メ ソッドとはオブジェクトが備えている機能の事です。例えば「車」がオブジェクトなら、スピードを出すアクセルや、車を止めるブレーキといった「車を操作するための便利な機 能」がメソッドです。
・ArrayList : アレイリスト
オブジェクト(またはコンポジット型変数)を複数管理可能です。<>で囲ったオブジェクトやコンポジット型変数を、配列変数のようにまとめて扱うことが可能です。<>で扱う型を指定しない場合、基本的にはどんな型の変数でも、いっしょくたんに放り込む「なんでも入れちゃえバケツ」を作ることも出来ます・・・が、いろいろ問題もあるので<>で型を指定しない使い方はあまり推奨できません。
・StringList : ストリングリスト
ArrayListの仲間です。ArrayListでString型を専門に扱う型です。ArrayList<String>とほとんど同じ意味になります。アレイリストでStringを扱うのに比べて高速で、便利なメソッドが用意されていますので、ArrayList<String>を使うのではなく StringList を使う事が推奨されています。
・String : ストリング
文字列を扱う型で、intとおなじくらい良く使います。基本的には1文字しか扱えないchar型の配列変数のようなものです。String型では2147483647文字(400字詰原稿用紙530万枚ぶん!)まで扱うことが可能です(そんな長い文字列は見たくもありませんがw)。char型の配列変数に比べて、文字列をあつかう便利なメソッドや特徴を持っています。初心者の方なら「PROCESSINGで文字を扱うなら、普通はStringを使う」とおぼえて頂ければ、まずは十分でしょう。
【注意】
一般的に float 型は計算速度が求められる場合以外は、あまり使われません。通常はfloat 型ではなく double型を使います。ただしPROCESSINGでは、用意されている標準命令が float 型を引数に持っている事もあり、意外と使われるようです。
同じく整数を扱うなら、普通は int 型を使います。longやshortは特別な場合以外は、あまり使われません。
char型とString型はプログラムの目的に応じて使い分けますが、めんどくさければ 文字を扱うなら全部String型でも、大きな問題はないでしょう。
また浮動小数点を扱う計算では誤差が生じやすい事に注意が必要です。コンピュータなのだから「どんな計算も全て正確の筈だ!」と思ってはいけません(汗)。
たとえばfloat型の精度は6~7桁しかありません。double型でも15~16桁までです。高い精度が要求される科学技術計算や、銀行などで少数点を含むお金の計算をする場合は(PROCESSINGで、そのようなプログラムを作るかどうかは別ですが)注意が必要です。
うっかりプログラミングすると、月に向かって打ち上げたロケットが火星に到着する事になります(汗)。
【関連記事】
●配列変数を利用するには(基礎編)
●配列変数を利用するには(応用編)
●配列変数を利用するには(ArrayList編)
●配列変数を利用するには(StringList編)
●Primitive(プリミティブ)型を使う例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int i; boolean b; color c; double d; i = 2147483647 ; b = false; c = 0xAA996600 ; d = 1234.000123 ; println( "int=" + i ); println( "boolean=" + b ); println( "color=" + hex(c) ); println( "double=" + d ); |
代表的なPrimitive型の変数を宣言し、それぞれに値を代入して表示しています。
double型に注目してください。設定した値と表示された値が異なっていますよね。このように浮動小数点は不正確に(近似値で)処理されます。
●Composite(コンポジット)型を使う例-1:
1 2 3 4 5 6 7 8 |
//宣言 ArrayList<String> al; al = new ArrayList<String>(); //インスタンス作成 al.add( "たけし" ); //登録 al.add( "しずか" ); //登録 al.add( "のびた" ); //登録 println( al.get(1) ); |
ArrayList型の変数alを宣言しています。宣言時に<>で<String>と指定していますので、このArrayList型変数 al は、String型のデータだけが扱えます。
インスタンスを作成し、メンバー(文字列)を追加しています。最後に、追加したメンバーの1つを取得して表示しています。
追加したメンバーは以下の順番で格納されていますので、1番目は「しずか」になります。
0 : たけし
1 : しずか
2 : のびた
●Composite(コンポジット)型を使う例-2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
ArrayList al; //とりあえず任意のクラスを定義 class hoge{ hoge(){ } } void setup(){ al = new ArrayList(); //インスタンス化 //いろいろな型を追加 al.add( 100 ); al.add( 65535l ); al.add( 3.14 ); al.add( 3.14159d ); al.add( 'a' ); al.add( "HOGE" ); al.add( new hoge() ); //どんな型が追加されたか表示する for( int i = 0; i < al.size(); i++ ){ println( al.get(i).getClass() ); } } |
ArrayListは宣言時に<>で扱う型(放り込む型)を制限しない事も可能です。管理する型を制限しない場合、どんな型の変数でも add/get できます。
上記例では、いろいろな型の値を追加し、それが「どんな名前の型として管理されているのか」を表示しています。
一見なんでも放り込めるのは便利に思えますが、取り出す時に、その値が整数なのか文字列なのか調べながら扱う必要がありますし、どんな型でも管理できる事が、思わぬ不具合を生む温床にもなります。ですので、初心者の方にはオススメできません。
●浮動小数点の計算があいまいな例:
1 2 3 4 5 |
float f = 0; for (int i = 0 ; i < 100000; i++) { f = f + 1/100000f; } println( f ); |
10万回処理を繰り返す中で、float型の変数に10万分の一(0.00001)ずつ値を足しています。理論上はf=1.0になる筈ですが・・・かなり誤差がでます。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。