06:PROCESSINGで計算

◆PROCESSINGで始めるゲーム作りとコンピュータ

village 06:PROCESSINGで計算

今日の話題

 

17:変数の定義

変数は変化する数の事だと説明しました。では具体的に、PROCESSINGでは変数をどのようにプログラミングするのでしょうか?。

PROCESSINGでは変数を

のようにプログラミング(記述)します。
変数の定義
型と変数名の間は1文字以上の半角スペースで空けてください。変数名と終端記号は連続して記述してもOKです。

int の部分を型とか型宣言といいます。型は前回説明しましたよね。その変数がどんな値を扱うのかを示す情報でした。そして、int は整数を扱う型でした。

apple というのは変数の名前です。たまたま apple とつけましたが、変数の名前は自由につけてもらって構いません。hogeでもuhaでもOKです(笑)。

ただしPROCESSINGでは、以下の様な変数名は使えません。

  • 数字で始まるもの
  • 一部の半角記号文字(+-/*~!()^.,:;[]`”@’など)を含むもの
  • 日本語(全角文字)を含むもの

このルールは、利用するプログラミング言語によって多少異なります。ですが、どのプログラミング言語でも、だいたい上記で挙げたような変数名はNGとなっています。

変数の命名規則

終端記号は、ここで1つの命令が終わっているよという事をコンピュータに教えるための記号です。

PROCESSINGでは、半角のセミコロン( ; )を使います。これは日本語の文章の最後につける “。” (まる)と同じ意味の記号になります。

従って、

は、整数を格納する apple という名前の変数を用意した事になります。

ところで、変数を用意しただけでは、その中身は不定(決まっていない状態)です。変数に数値や文字を放り込む事で、始めて使えるようになります。

PROCESSINGでは、用意した変数に数値を入れるには以下のように記述します。

代入
演算子とは+-×÷=などの計算をするための記号の事です。値を入れる(専門用語では「代入」する)には、=(イコール)演算子を使います。

イコール演算子は左に書かれた変数( apple )に、右に書かれた値( 10 )を代入します。算数のイコールとはチョット違いますよね。初心者の方が戸惑うポイントです。

算数のイコールは、左と右の値が同じである事を示す記号でした。一方で多くのプログラミング言語では、イコールは左に書かれたものに右の値を代入する記号として使われます。
代入2
また、変数は用意したら直ぐに値を入れる事が可能です。その場合は

と書きます。

上記例なら、整数を扱う apple という名前の変数を用意し、直ちに100という数値を代入した事になります。

算数で使うイコール(同じだよという意味の記号)は、代入用のイコール(=)とは区別して、==と2つ続けて書きます。

 

18:足し算、引き算

コンピュータというくらいですから、計算が得意です(笑)。そして計算といえば思いつくのが四則演算です。+-×÷の4つです。小学校で習いますよね。

PROCESSINGでも、もちろん四則演算を行うことができます。そのルールは算数の計算とほとんど一緒です。

例えば算数の足し算を考えてみましょう。
1 + 2 = 3

言うまでもない事ですが、1に2を加えた結果が3になるという意味です。

PROCESSINGでは

と書きます。

または

と2行で書くことも可能です。

なら、apple という変数に 1 と 2 を加えた(加算した)値( 3 )を代入します。

変数の説明
(画像URL:illust-AC 様:kpさん、Mino Kikakuさん)

では続けて引き算の例を見てみましょう。PROCESSINGでは、引き算は以下のように書きます。

または

と2行で書くこともできます。

基本的には演算子が + から – に変わっただけで、同じように記述できます。上記例なら、omosa という int型の変数は、100 から 10 を引いた値( 90 )になります。

 

19:掛け算、割り算

掛け算は、算数では × の記号を使います。PROCESSINGでは*(アスタリスク)を使います。

または

と2行で書きます。

記号が違うだけで、足し算、引き算と同じですね。上記例なら orange というint型の変数は、2 と 3 をかけた値( 6 )になります。

変数の説明2
(画像URL:illust-AC 様:kpさん、tera さん)

割り算は ÷ の記号ではなく/(スラッシュ)を使います。

または

と2行で書きます。

float を覚えていますか?。float というのも型でしたね。少数点(浮動小数点)を扱う型でした。

3とか2の数値が「 3f 」などと書かれていますが、” f ” はPROCESSINGに「この値は小数点値(フロート)だよ」と教えるための特別な記号になります。これを「サフィックス」と呼びます。

上記例なら kazu という float型の変数は、3を半分にした値( 1.5 )になります。

それでは、仮にここで

のようにプログラミングしたらどうなるでしょうか?。

この場合、なんと kazu の中身は 1.0 になってしまいます。

何故?・・・という疑問が湧きますよね。それは計算に使っている 3 や 2 という数値に「 f 」というサフィックスが付いていないからです。

PROCESSINGでは単に数値を記述した場合( 3 とか 2 )は、int型の整数として扱われます。3.0  や 3f と書くと少数点値(フロート)だと思ってくれます。

ですので、

とプログラミングすると、以下のように計算されるのです。

  1. まずint型(整数)の3 int型(整数)の2 で割る
  2. int型同士の計算はint型(整数)になる
  3. int型は小数点以下が扱えない型なので、1.5の ” .5 ” 部分が捨てられて ” 1 “になる
  4. それを float型の kazu に代入するので、kazu は ” 1.0 ” になる

・・・なんだかなぁという感じですよね(汗)。でも、そういうものなんです。

情報落ち
(画像URL:illust-AC 様:kpさん、KONI さん、acworks さん)

だから数値に「 f 」を付けます。すると

  1. float型(少数点)の 3.0float型(少数点)の2.0 で割る
  2. float型の値を含む計算は、結果もfloat型(少数点)になる
  3. だから結果は 1.5 になる
  4. それを float型の kazu に代入するので、kazu は ” 1.5 ” になる

ちょっとした落とし穴ですね。

当然ですが

とプログラムした場合も、結果は1になってしまいます。int型は小数点以下が扱えない型なので、1.5の ” .5 ” 部分が捨てられるからです。

このように計算途中で値が欠落してしまう事を「型落ち」とか「情報落ち」と言います。小数点を扱う計算(特に割り算)では、注意していないとハマる事があります。

 

コラム2:変数の命名規則

変数名は自由につけて良いのですが、プロの世界では一定の規則に従って命名するのが好まれます。

命名規則として有名なものに、ハンガリアン記法、スネーク記法、キャメル記法などがあります。いずれも、少しでもプログラムをわかり易くし、ミスを減らすための工夫になります。

ちょっと紹介してみましょう。

●ハンガリアン記法(システムハンガリアン記法)

ハンガリー
(画像URL:トラベルjp 様)

変数名の先頭に型の略称を付ける方法です。元々この案を考えた人(チャールズ・シモニー)がハンガリー人だったことが名前の由来です。
int     iCount;
float  fPi;
など、i や f とかかれた部分(接頭辞)から型を類推させる方式です。

●スネーク記法

ヘビ
(画像URL:Gigazine 様)

変数名を、意味のある単位でアンダーバーで区切って、ヘビのように後ろにつなげる方法です。
int   system_count;
float  kaikei_num;
ただしこの方法はアンダーバー(_)がPROCESSINGの標準エディタと相性が悪いため、PROCESSINGではオススメできません。

●キャメル記法

ラクダ
(画像URL:GAHAG | 著作権フリー写真・イラスト素材集:Алексей Кокоさん)

変数名の意味や単語の区切りで、大文字と小文字を混ぜる方法です。
int   SystemCount;
float  atenaKeisan;
大文字と小文字がラクダのコブのようにデコボコする様子から命名されました。

命名規則1つとっても、いろいろあって面白いですね。MSLABO的にはハンガリアン記法かキャメル記法がオススメですが、最近のIT業界ではハンガリアン記法は敬遠されているようです(汗)。

 

Forest今日の言葉

・ハンガリアン記法

ハンガリー人のチャールズ・シモニーが考案した変数名の命名規則です。正確にはシステムハンガリアン記法はシモニーさんが考案したのではなく、Microsoftの技術者が考案したと言われています。この方法を敬遠する人も多くいます。

・スネーク記法

おなじく変数名の命名規則です。意味のある単語をアンダーバーで区切って、変数の後ろにつなげていきます。残念ながらPROCESSINGの標準エディタとは相性が悪いです。

・キャメル記法

変数名の命名規則です。意味のある単語を大文字小文字を混ぜて記入する方法です。かなりオススメの方法です。

・演算子

+-×÷=など計算を行うための記号の事です。

・代入

PROCESSINGでは、変数に値を格納する事を代入と呼びます。=(イコール)演算子を利用します。

・サフィックス

数値や変数の後ろにつける特殊な意味をもたせた記号です。10f などと書いて、10が少数値(フロート)である事を明示します。

・型落ち

ある製品が古くなる事ではありません(笑)。情報落ちとも呼びます。本来は計算されるべき値が無くなってしまう(欠落してしまう)事を指します。

 

 今日のまとめ

  • 変数名には命名規則がある
  • 足し算、引き算、掛け算、割り算が可能
  • イコールは代入という意味で使う
  • 計算結果が思い通りにいかない情報落ちに気をつける

 


07:ゲームで理解する論理演算へ進む
05:変数と定数と型に戻る
目次へ戻る


本ページで利用している特に参照元記載のないアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。