超初心者が0からRPGを作る

ゲームプロデューサー志望が日々の悪戦苦闘を綴る。

唱えよ変数、呼び出せ値【第参歩】

ソシャゲは面白くないと感じるわけではないが、やはり何か物足りない気がするHeptagonDだ。

やはり課金や広告収入の魂胆がチラつくのが問題なのだろうか。

 

さて、今回はJavaにおける変数を勉強していく。

正直な話ここに記載しても需要はほぼ無いとは思うのだが、足跡を残すことでモチベーションに繋がり、復習にもなるため続けていくぞ。

 

 

【値は効果、変数は魔法】

」とは何か?

そう聞くと何やら難しげだが、プログラムにおいては大雑把に言うと「データ」と考えていいようだ。

例えば、魔法「ファイアボール」の基本攻撃力が50だとする。

この場合、50というのが値。数字(整数)のデータだ。

また、魔法の名前「ファイアボール」というのも文字列のデータと言える*1

 

しかし、魔法の効果を呼び出すためには呪文が必要だ。

プログラムにおけるそれが、変数なのだ。

 

少し理解しがたいが、変数とは値を入れる*2箱、という表現が一般的なようだ。

先程の例で言うと、「ファイアボールの基本攻撃力」という箱に50という値を入れていることになる。

さらに、「魔法の名前」に「ファイアボール」という値を入れているな。

 

 

なんとなくは値と変数について理解できただろうか。

それでは、実際にコードを書いていこう。

まずは、次のコードを見てほしい。

 

public class FireBall
{
     public static void main(String args)
     {
     String fireBall;
     fireBall = "ファイアボール";
     int fireBallDamage;
     fireBallDamage = 50;
     System.out.print("あなたは");
     System.out.print(fireBall);
     System.out.println("を唱えた!");
     System.out.print("敵に");
     System.out.print(fireBallDamage);
     System.out.println("のダメージ!");
     }
}

 

青文字部分赤文字部分が今回学習している変数に関するコードだ。

例によって下線部は自由に変更してもらって構わない。

順を追って見てみよう。

 

 

【魔法の契約、変数の宣言】

String fireBall;

ここでは、「String型(文字列を扱う変数の型)」の「fireBall」という変数を宣言している。

具体的には、「(火球を飛ばす)魔法の名前」の変数を宣言していることになる。

宣言というと難解だが、要は「文字列の値を入れるためのfireBallという箱を作りますよ」という合図なのだ。

つまり、宣言をしていない変数は扱うことができないため宣言は必須だ。

また、プログラムは上から下へ読まれるため、宣言より前にその変数について命令することができないことにも注意が必要だ。

 

同様に、int fireBallDamage;

ここでは「int型(整数を扱う変数の型)」の「fireBallDamageを宣言している。

具体的に言えば「(火球を飛ばす)魔法のダメージ」の宣言だな。

 

前述したが値にはさまざまな形があるため、変数にもさまざまな型が必要になる。

ここではString型int型を使用したが、他にも多くの型が存在するため、調べてみるといいだろう。

 

さて、まとめると宣言のコードはこのようになる。

 

変数の型 変数の名前;

 

 

【代入で魔法に新たな効果を】

fireBall = "ファイアボール";

ここでは、先程作った変数「fireBall」に「ファイアボール」という文字列を代入している(文字列の値の前後には、目印として半角の二重引用符(")が付くことを覚えておこう)。

同様に、fireBallDamage = 50;では「fireBallDamage」に50を代入している。

 

ここで注意すべきことが一点。

プログラムにおける「=」と、一般的な「=」は意味合いが異なるということだ。

例えば、ファイアボールがレベルアップで強化されたとしよう。

すると、コードは以下のようになる。

 

fireBallDamage = fireBallDamage + 30;

 

ここではファイアボールのダメージを30増やしているのだが、左辺と右辺の数が違うことに疑問を持つ人も多いのではないだろうか。

あくまでプログラムの「=」の意味するところは、左辺に右辺を代入することだということを覚えておこう。

 

さて、まとめると代入のコードはこのようになる。

 

変数の名前 = ;

 

 

さて、では実際にプログラムを動かそう。

今回はクラス名という物が「FireBall」となっているので、ソースコードは「FireBall.java」と名付けてコンパイル

実行すると、次の画像のようになっただろうか。

f:id:Heptagon:20190321223041p:plain

コードに対してたったの二行しか出力されていないため、少し拍子抜けしたかもしれない。

 

 

【火球は爆炎へと変わるか】

では、なぜわざわざこのような書き方をしたのだろう?

その理由は、次のコードでわかるだろうか。

 

public class FireBall2
{
     public static void main(String args)
     {
     String fireBall = "ファイアボール";
     int fireBallDamage = 50;
     System.out.print("あなたは");
     System.out.print(fireBall);
     System.out.println("を唱えた!");
     System.out.print("敵に");
     System.out.print(fireBallDamage);
     System.out.println("のダメージ!");
     System.out.println();
     System.out.println("あなたはレベルが上がった!");
     System.out.print(fireBall);
     System.out.print("が");
     fireBall = "ファイアブラスト";
     fireBallDamage = fireBallDamage + 30;
     System.out.print(fireBall);
     System.out.println("になった!")
     System.out.println()
     System.out.print("あなたは");
     System.out.print(fireBall);
     System.out.println("を唱えた!");
     System.out.print("敵に");
     System.out.print(fireBallDamage);
     System.out.println("のダメージ!");
     }
}

 

聡明な方は気づいただろうが、変数に入っている値は後から上書きすることができる。

新たに値を代入すると、古い値は消えて新しい値となるのだ。

 

そのため、これを「FireBall2.java」としてコンパイル、実行してみると以下のようになる。

f:id:Heptagon:20190322000922p:plain

 

つまり、後々値が変わってしまうことを想定すると、規模の大きいプログラムほど少々手間が増えても変数を使った方が、将来的には手間を減らすことになるのだ。

急がば回れ、とはよく言ったものだ。

 

 

ちなみに、今回は変数の宣言と代入を同時に行っている。

念のためにコードを記しておくと以下の通りだ。

 

変数の型 変数の名前 = ;

 

また、宣言と代入を同時に行うことをとりわけ「初期化」ということも覚えておこう。

 

 

さて、これで変数・値の基礎は身に付いた。

もちろん応用すればいくらでも新しいことはあるが、今はとにかく前へ進むことを優先しようと思う。

次回は今回のコードでも使用したような簡単な命令、計算について勉強していくぞ。

 

 

ここまでのお目通し、ご苦労であった。

また会えることを楽しみに待っているぞ。

 

…値と価の誤字の手直しで手間取ったなんて言えない…

 

【次回はこちら】

傀儡の呪言を頭に刻め【第肆歩】 - 超初心者が0からRPGを作る

【前回はこちら】

実践、初陣【第弐歩】 - 超初心者が0からRPGを作る

*1:他にも、小数や文字、真偽値など様々な形の値が存在する

*2:このことを代入という