第三回

関数

プログラミングにおいて、特定の処理をまとめておくことは重要なことです。処理を関数化しまとめることで、処理を何度も書かずに済みます。

関数は以下のようにして書くことができます。

戻り値の型 関数名(引数1の型 引数1の名前,引数2の型 引数2の名前....)
{
 関数の処理
 return 戻り値;
}

数学的な関数と同じように、プログラム上の関数でも何か関数に値を代入しないと結果は帰ってきません。
この代入する値を引数、帰ってくる結果を戻り値といいます。

また、引数を持たなかったり戻り値を返さない関数も作ることができます。その時は、関数を宣言する際の戻り値の型にvoidと書けばよいです。

void 関数名(){
 関数の処理
}

戻り値がない場合、returnは省略することができます。
一般的には関数を先に宣言してからでないと関数や変数を使うことができませんが、Processingでは宣言位置に関係なく作ることができます。(だが、ほかの言語で困るので先に宣言する癖をつけよう)
また、Processingは言語であり、IDEでもあるのでタブ機能が備わっており、タブを超えて関数を宣言することもできます。

関数の使い方

関数は以下のようにして使うことができます。

関数名(引数リスト);

また、引数のない関数は引数リストを省略して書くことができます。

第一回で描いてもらった図形や色などは、すべてProcessingに標準である関数です。
その他にも標準で様々なお役立ち関数があります。

関数戻り値説明
sqrt(value)浮動小数点数引数の平方根を返します
abs(value)整数,浮動小数点数引数の絶対値を返します
pow(a,b)浮動小数点数aのb乗を返します
sin(rad)浮動小数点数ラジアンで測られた角度のサインの値を返します
cos(rad)浮動小数点数ラジアンで測られた角度のコサインの値を返します
tan(rad)浮動小数点数ラジアンで測られた角度のタンジェントの値を返します
random(value1,value2)整数,浮動小数点数引数1と引数2の範囲でランダムな値を返します

これはほんの一部で、もっと詳しく知りたい方は こちら

ステートメント

条件分岐

Pcocessingにはプログラムの流れを制御する専用の構文が用意されています。これをステートメントといいます。
条件分岐命令はif構文で行うことができます

if(条件1){
  条件1が真の時の処理
}else if(条件2){
  条件2が真の時の処理
}else{
  すべての条件が偽の時の処理
}

if文は条件ごとに処理を行いたい場合に利用し、else ifやelseを省略して書くこともできます。
条件の部分に比較演算子を使い、条件分岐させる場合が多いです。

繰り返し

条件が真の間中処理を繰り返します。 繰り返しにはfor構文とwhile構文があります。

for(初期化式;条件式;更新式){
 繰り返す処理
}

初期化式とはfor構文の最初に必ず実行される式です。更新式は繰り返す処理が終わるたびに実行される式です。
通常は初期化式で変数を初期化して、更新式で変数を変更します。
変数には一般的にiが使われることが多いです。

具体的には

int sum = 0;
for(int i=0; i<10; i++){
 sum += i;
}

このようにして使います。これはiを0~9まで回し、sumにiを足していくプログラムです。sumの中身は45となります。
ちなみに、「i++」というのはiにインクリメント演算子をくっつけたもので、i += 1と同義です。
説明だけではわかりにくいので実際に使って慣れるべし

一方while構文は

while(条件式){
 繰り返す処理
}

または

do{
 繰り返す処理
}while(条件式);

do whileは先に処理を実行してから条件を判断します。

その他

読みやすいきれいなコードを書こう!

少し何かを表示させるだけなどの簡単なプログラムならコードの分量も少ないため、さほど気にする必要もないですが、規模が大きくなってくるとコードの量も必然的に多くなります。
そのためどこに何が書かれているか一目でわかるように、見やすいコードを書くのが大切です。

改行

まずはコードが見やすくなるよう、プログラムの意味ごとに改行を挟もう。

background(255);noFill();ellipse(250,250,300,300); 
line(250,0,250,500);line(0,250,500,250);fill(0);
line(250,250,x,y);ellipse(x,y,5,5);
x = cos(t)*150+250;y = -sin(t)*150+250;

改行が適当だと非常に見づらい...

background(255);
noFill();
ellipse(250,250,300,300); 
line(250,0,250,500);
line(0,250,500,250);
fill(0);

line(250,250,x,y);
ellipse(x,y,5,5);
x = cos(t)*150+250;
y = -sin(t)*150+250;

命令が終わる(セミコロンがつく)ごとに改行しよう!

インデント

for文などの構文を使うとき中カッコを使う場面があるだろう。
中カッコがどこで始まり、どこで終わるのかわかりやすいインデントをつけよう!

for(int y=0; y<img.height; y++){
for(int x=0; x<img.width; x++){

int position = y * img.width + x;
double a = img.width/2;
double b = img.height/2;

if( ((x-a)*(x-a))/(a*a)+((y-b)*(y-b))/(b*b)>1){
img.pixels[position] = color(0,0,0);}}}

なぁにこれ どこでどうループが回ってんのかわかりにくっ72!

for(int y=0; y<img.height; y++){
 for(int x=0; x<img.width; x++){

  int position = y * img.width + x;
  double a = img.width/2;
  double b = img.height/2;

  if( ((x-a)*(x-a))/(a*a)+((y-b)*(y-b))/(b*b)>1){
   img.pixels[position] = color(0,0,0);     
  }
 }
}

中かっこの終わりとはじまりの位置を統一することで、分の始まりと終わりが分かりやすくなるぞ!

宗教上な理由

関数やif文、for文などを使うとき中カッコを使うだろう。
しかし、プログラミングの入門書などを見ると本によって字下げスタイルが違うことが多い。
プログラムを書く人によってスタイルが違うため、宗教戦争がまれによく起きる。

for文の例

for(i=0; i<30; i++){
 j++;
}
for(i=0; i<30; i++)
{
 j++;
}

if文の例

if(a < b){
 j++;
}else{
 k++;
}
if(a < b)
{
 j++;
}else
{
 k++;
}

どちらでも正しく動くので完全に好みである。

ちなみにページ作成主は前者推し


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-13 (火) 03:06:31 (2503d)