arrow_back

変数を使う

「うーんうーん」
「どうしたのハルキ。急に面白い顔して」
「悩んでるの!」
「あのね。電卓と言うからにはユーザーが押したボタンの値同士で計算しないといけないよね。 けど、今って数字を直接書いちゃってるから、これどうすればいいんだろうって」
「ああ、最終的にはユーザーが入力した数値を変数に格納することになるね」
「変数? さっきも出てきたけど、それってなに?」
「プログラムがメモリに確保する記憶領域……箱みたいなもので……んー、やってみた方が早いね。 それじゃあ、一つ変数を作ってみよう」
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int value = 1 + 1;

        TextView textView = (TextView) findViewById(R.id.textview);
        textView.setText(String.valueOf(value));
    }
「これは1+1の計算結果をvalueという名前で記憶する変数だよ。 実行するとvalueの中身が表示されるけど……どうなるかな?」
「実行したら普通に2って数字が表示されたよ!」
「そう。変数を使えば、プログラムの中のデータに名前をつけて一時的に保管しておけるんだよ」
int value1 = 1;
int value2 = value1 + 1;
value1 = value2;
int value = value1 * value2;
int valueから始まる行が変数。 こうやって変数を作ることを変数の宣言っていうんだよ。 あとで宣言した変数の値を変えることも、変数と数値、変数同士を計算することもできる。例えばこれとか」
「value1とvalue2とvalue。三つは別々の変数なの?」
「そうそう。一行目で、value1という名前で変数を宣言してる。 =に続いて1とあるのは変数に最初に入れる値のことで、こんな風に変数を宣言するときに値を入れるのを変数の初期化っていう」
「あとvalue2は、value1に1を足してる?」
「変数value1には、どんな値が入ってる? それに1を足した値がvalue2の値だよ」
「value2は……2になるよね。次にvalue1 = value2;っていうのは? value1が1でvalue2が2になったけど、ここでvalue1を2にしちゃったらvalue1に1足したvalue2は、あれれ?」
「そこは普通にvalue1にvalue2の値が入って、それきりなにも起こらない。value2の値は変わらない。 後ろに戻ってどうにかなるってことはないんだよ。 こんな風に、一度初期化した変数の値を変えるのが再代入
「代入……数学の時間に聞いたことあるかも」
「じゃあ、最後の変数valueはどうなる?」
「えーっと、value1の値が2で、value2の値も2だから、それぞれをかけた結果……4?」
「正解! こんな風に変数同士で計算することができる。 変数についてはあいかわらずAndroidじゃなくてJava言語の話だけど、 アプリ作る上では必須の知識だからきちんと理解しておこう」

変数の型

「もう一つ大事なこと。変数にはかたがある」
「え。かたがあるの? やっぱり肩こりとかするのかな?」
「よしよし。むずかしいことを言ったあたしがバカだったよ。実際にやってみようね? 変数valueをこんな風に書いてみて」
String value = 1 + 1;
「答えは2……あれれ、なにか赤くなったよ?」
「まず、1 + 1は数値だってことを思い出して。 それを、数値じゃないタイプの変数に入れようとしたからエラーになってる。それが"Incompatible types"という意味」
「きっと好みのタイプじゃなかったんだね!」
「……」
「ごめんなさい……」
「よろしい。valueの前にあるStringっていうのが、この変数はStringというタイプですよって指定してる部分。 このStringっていうのは数値じゃなくて文字列の型を意味するの。だから数値の方を"(ダブルクオーテーション)で括ってやれば」
String value = "1" + "1";
「あ、赤いのが消えたね! けど、文字列は計算できないんじゃ……」
「それじゃ実行してみよう」
「あー! 計算が間違ってる!」
「まぁ、計算としては間違ってるけど、動きとしては正しいよ。 Java言語では、文字列同士を+記号で繋ぐと、文字列を繋げるという意味になるから」
String value = "私の" + "名前は" + "中野です";
「この場合、変数valueには"私の名前は中野です"という文字列が入ることになる」
「じゃあ引いたりかけたりもできるの?」
「気になるならやってごらんよ」
「なにか怒られたよ……?」
「うん。文字列型に使える演算子は+記号だけ。その効果も計算じゃなくて連結ってことをここでは覚えておいてね」
「知ってるんだったら教えてくれればいいのに……」
「ハルキ、こうしたらどうなるんだろう? って思ったら、まずはやってみたらいいの。 もしそれで失敗したりエラーが出ても、なにがおかしかったのかを考えればいいだけなんだからね」
「じゃあ次はこれをやってみて。この計算はどうなると思う?」
        int value = 1 / 3;
「これだと答えは0.33333333...って、ずっと続くと思う。 って、あれ? 0になっちゃった」
「うん。変数valueの型はintだからね」
「イント?」
「Integer、つまり整数ね。整数だと小数点以下は表せないから1を3で割ると答えは0になる。 じゃあ、次は他の型……小数点以下を扱えるタイプを試してみよう!」
最終更新日: 2015/09/03