19:PROCESSINGと関数

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

Desktop19:PROCESSINGと関数

今日の話題

24:関数の実装

関数は「同じ処理をひとまとめにしたもの」だと説明しました。そして引数を与えることができる事、処理結果として戻り値を戻すことができる事も説明しました。

忘れちゃった方は「16:関数と構造化プログラミング」を参照してください。

具体的には以下のように記述します。

関数定義

上記は関数の例です。

最初に int と書かれていますが、これはこの関数の「戻り値の型」です。この関数の戻り値がどんな値なのかを示しています。「戻り値の型」の事を「関数の型」とも言います。

int と書かれていますから、この関数は整数型の値を、処理結果として戻す関数という事になります。もちろん、戻り値がない関数を作成する事も可能です。

ポイントは、この関数( attack )は、ここで指定した型の値を「必ず戻り値として返却しなければいけない」事です。

あなたが銀行からお金を借りるとき、借りる前に毎月の返済額や返済期限などを決めますよね?。それと同じようなものです(笑)。

決められた金額を返さないと大変なことになりますが(汗)、関数も「戻り値の型」で指定した値を戻さないと、エラーとなります。

戻り値の型宣言(画像URL:illust-AC 様:kotone さん、かえるWORKS さん)

最後に書かれている
return (  damage  ) ;
という部分に注目して下さい。

return という命令は、「引数で与えた値を、戻り値として返却する命令」です。

ですので、この例では returnに続く () の中身、つまり damage という名前の変数を、呼び出し元に「戻り値」として返却しています。

この関数( attack )は int型を戻す(戻り値の型に指定している)関数でした。ですから、return() に与える引数( damage )も int型である必要があります。ここは大切なポイントですので、しっかり覚えて下さい。

関数宣言とreturn文
続く attack  という部分が関数名です。変数名と同じルールで、好きな名前を付けることができます。ちなみに、PROCESSINGで禁止されている変数名のルールは以下の様なものでした。

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

関数の名前も、これと同じルールが適用されます。

関数名の後ろにある ( ) で囲った部分が、attack 関数への引数です。この例では整数型の引数を、それぞれ myStr 、enemyDef という名前で2つ受け取っています。

自分たちで作成する関数は、どのような型の引数をいくつ受け取るのか(もちろん、引数を受け取らないことを含めて)自由に設計できます。

このように

  • その関数が、どんな型の戻り値を戻すのか
  • どんな名前の関数なのか
  • 引数は、いくつ、どんな型で受け取るのか

といった関数の定義部分を、専門用語で「関数宣言」とか「関数の定義」呼びます。

いうなれば、関数の取扱説明書部分ですね(笑)。

しかし、コンピュータにとっては関数宣言だけで「おおまかな関数の概要」は理解できても、人間にとっては不十分です。

だって

  • この関数は、整数を戻すよ
  • attack という名前の関数だからね
  • 引数は2つで、共に整数だよ

と言われても・・・だから何?ですよね(汗)。

ですので、その関数の役割(機能)や、引数、戻り値の説明書きを、コメントとしても記述しておくのが一般的です。

こうする事で、この関数がどんな目的の関数で、どうやって使うのかを、人間が理解できるようにしておくのです(笑)。

25:PROCESSINGと関数

PROCESSINGには、プログラムの書き方が2種類あります。

1つめの書き方は、いままでの説明で何度か取り上げてきた書き方で、とにかく上から下に向かって順番にプログラムを書く方法です。これを Basic(ベーシック:基本)モードと言います。

ちょっとしたプログラムをサラッと書くには便利な方法ですね。

ただしBasicモードでは、関数やクラスを使うことはできません。

正確に言うと全く使えないわけではないのですが、基本は上から下に向かって順番にプログラムを記述し、順番に実行するのが目的の書き方ですので、向いていないのです。

PROCESSINGで関数やクラスを使ってプログラムを作成する時に使う、もう1つの書き方がContinuous(コンティニューズ:連続)モードです。

この書き方は、関数やクラスを使って本格的なプログラムを作成するのに向いています。

2つのモード
みなさんにも、これから関数やクラスを使ってプログラミングを学習して頂きたいと思いますので、以降はContinuousモードを使っていきます。

そしてContinuousモードは、以前説明をしたゲームループと深い関係があるのです。

ゲームループ、覚えて見えますか?。以下に、再度図を掲載しておきます。詳しくは「13:プログラムの仕組み」記事を参照して下さい。

ゲームループ
(画像URL:illust-AC 様:任々堂工房 さん、acworks さん)

この「描画処理」から「計算処理」までを、ゲームオーバーになるまで繰り返すのがゲームループでした。

PROCESSINGで使うContinuousモードでは、「初期処理」から「計算処理」までをプログラミングします。

ゲームループとPROCESSING
(画像URL:illust-AC 様:任々堂工房 さん、acworks さん)

「初期処理」に相当するのが setup() 関数です。ゲームループ部分は draw() 関数が受け持ちます。

PROCESSINGでは、プログラムが開始されると自動的に setup() 関数が実行されます。setup() 関数の処理が終わると、今度は自動的に draw()関数が実行されます。

draw() 関数は、「ゲームオーバー(プログラムが終了する)」まで、何度も呼び出されます。つまりゲームオーバーになるまで、自動的に繰り返し実行されるのです。

ゲームループとPROCESSING2
(画像URL:illust-AC 様:ippuku さん)

プログラマー(私達)が、setup()関数の次はdraw()関数を使おうとか、draw()関数を繰り返し実行しよう・・・などと、いちいち制御する必要はありません。この辺りは、PROCESSINGが自動で処理してくれるのです。

上記がContinuousモードの記述例です。

初期処理に相当する setup() 関数は、以下の様に宣言されています。

void  と書かれた部分が setup()関数の戻り値の型です。

void というのは、「戻り値をもどしません」という意味です。この setup() 関数は、処理結果を戻さないということを示しています。

setup() 関数はPROCESSINGが用意している関数になります。ですので、関数宣言が決まっています。関数宣言は必ず上記のように記述しなければいけません。int  setup() { … } などとプログラミングするとエラーになります。

同じようにゲームループを受け持つ draw()関数は、以下の様に宣言されています。

こちらも 戻り値の型が void ですので、draw() 関数は処理結果を戻しません。

draw() 関数もPROCESSINGが用意している関数です。setup()関数と同様に、関数宣言の書き方が決まっていますので注意してください。

なお開始処理に相当する部分と終了処理に相当する部分は、PROCESSINGでは隠されていて、通常はみなさんが意識する必要はありません。

今後 EclipseやInteliIIJ などを使って JavaライクにPROCESSINGでプログラミングする際は利用する事になりますが、標準エディタの範囲でプログラミングしている分には、あまり気にしなくて良いです。

楽ちんですね(笑)。

Forest今日の言葉

・戻り値の型

関数の処理結果が、どんな種類の値かを示すものです。関数は、戻り値の型で記述した値を必ず戻す必要があります。関数の型とも呼びます。

・関数宣言

どんな型の戻り値を戻すのか、どんな名前なのか、どんな型の引数をいくつもらうのかといった関数の取扱説明書に相当する部分です。関数定義とも言います。

・Basicモード

PROCESSINGで、上から下に向かって順番にプログラムを記述する書き方。ちょっとしたプログラムを試すだけなら、お手軽なモード。

・Continuousモード

PROCESSINGでゲームループを意識しながら、関数やクラスを使ってプログラムを記述する書き方です。こちらを学習します。

scroll今日の文法

・return文

関数から値を戻します。

 

 今日のまとめ

  • PROCESSINGにはBasicモードとContinuousモードがある
  • Continuousモードは関数とクラスを利用する

20:イベント処理とスコープへ進む
17:定数と配列変数 へ戻る
目次へ戻る


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