変数の詳しい話

整数型,浮動小数点型

chapter2ではintで整数をいれる変数を作れることがわかりました.これによって作られた変数をint型変数,といいます.あるいは,整数が入るので単に整数型とも言います.

float a=1.5;
float b=1.5;
print(a*b);//2.25

上のサンプルのように,intの代わりにfloatを使うと小数を代入することができます.

int a=5;
int b=3;
println(a/b);//1
println(float(a)/b);//1.66666...

整数型同士の割り算は小数点以下を切り捨てられてしまうので,小数の値を得たい場合は,割り算をする前にfloat(a)でfloat型に変換し,切り捨てを行わないようにします.

さらに精度を良くして数を扱う場合は整数ならlong型,小数ならdouble型を使います.

型名代入できる値
int-2147483648から2147483647の整数
long-9223372036854775808から9223372036854775807の整数
float小数
doublefloat型よりも精度のよい小数

long型に値を代入する場合,末尾にLをつけないとエラーになることがあります.

long a=9223372036854775807L;//Lをつける

変数のスコープ

例えば,apple_costvoid draw()中で使いたいときに次のようなコードを書いたとします.これはエラーになります. なぜでしょうか.

void setup(){
    int apple_cost=80;
    size(600,600);
}

void draw(){
    printf(apple_cost);
}

原因は変数のスコープです.スコープは範囲という意味です.実は,void setup()内で宣言されたapple_costという変数は,void setup()内でしか使用することができません.

あるブロック内で宣言された変数はそのブロック内でしか使用できません. ブロックとは,中括弧{}で囲まれた区間のことです.

{}はfor文やif文などでも使われているので,これもブロックになります.

void setup(){
    size(600,600);
}

void draw(){
    for(int i=0;i<10;++i){
        int foo=31;//このfor文内でしか使用できない
    }

    int hoge=3;
    if(hoge==3){
        int piyo;//このif文内でしか使用できない
    }
}

ブロックの垣根を超えて変数を使用する場合は,ブロックの外で変数の宣言をします. 特に,どのブロックにも属していない変数のことをグローバル変数といいます.

int apple_cost=80;//グローバル変数

void setup(){
    size(600,600);
}

void draw(){
    printf(apple_cost);
}

また,同じブロックに属していなければ,区別が可能であるので変数の名前が被っていても問題ありません.

int sum(int v1,int v2){
    int ans=v1+v2;
    return ans;
}

int mul(int v1,int v2){
    int ans=v1*v2;
    return ans;
}