表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
7/8

1.3 変数

もうしばらく座学は続きます。

「じゃあ、int以外の変数のジャンル……変数のジャンルのことを『型』というんだが、他の型について、教えるぞ」


 俺は、新しい魔石に、魔法ではなくメモを書いていった。


  byte とても小さな整数を扱う型

  short 小さな整数を扱う型

 ○int 普通の整数を扱う型

  long 大きな整数を扱う型


  float 桁の小さな小数を扱う型

 ○double 小数を扱う型


  char 文字(一文字だけ)を扱う型

 ○String 文字列を扱う型


  boolean 真偽(true, false)を扱う型


 この魔石、魔法じゃなくメモも書けるのは本当に便利だな……。しかも、文字を念じるだけで書くことができるなんて。俺は魔石に感心しながらも、説明を始めた。


「これが、変数の型の基本のもの全てだ」


 全てズラーっと書いて見せると、二人とも唖然としていた。


「こんなにあるの……?」

「覚えるの、大変……」


 俺は慌てて首を振った。


「別に全部覚えなくていいぞ。今は、この3つだけ覚えておいてくれ」


 そう言って、○のついているint, double, Stringに指をさした。

 本当はbooleanにも○をつけようか迷ったが、いま真偽値について説明しても、おそらくピンと来ないからな。使うときになったら説明しよう。


 エルもステラも、安心したように息をついた。そして、エルがこう尋ねた。


「intとdoubleとStringだけでいいのね……他のは使わないの?」

「booleanも使うが、今は使わないから説明しない。他のも……自分から使うことはほとんど無いな」

「……使わないなら、じゃあなんで存在するのよ」

「昔使ってた名残みたいなもんだ」


 エルが、さらにこう尋ねた。


「小さな数とか大きな数って、どれくらいなの?」


 どれくらいだっけ……思い出しながら答える。


「byteは-127~+128、shortはマイナス3万~プラス3万くらい、intはマイナス何十億~プラス何十億だ。

 longは……大きすぎて忘れたが……兆の上の単位だったはずだ」

「……何十億とか、兆の上とか、絶対使わないわよ……」

「まあ、普通に使っている限りは超えたことがないな……。ちなみにfloatとdoubleは……ものすごく小さな数から、longよりも大きな数まで表現できる」

「……へぇ……もうそこまでいくと、どうでもいいわね……」


 floatとdoubleの表せる桁については、詳しい説明は面倒なのでやめておこう。浮動小数点の話をする必要があるけど、それだけで一時間くらい消費するし。



「文字列……って……?」


 ステラが、Stringに指をさして尋ねた。


「単語とか文章のことだな。ダブルクォーテーション("")で囲う必要があって……って、実際にそれぞれ使っているのを見た方が早いな」


 説明を切り上げて、魔石にコードを書いた。


  public class Test {


    public static void main(String[] args) {

      int i = 123;

      System.out.println(i);


      double d = 123.456;

      System.out.println(d);


      String s = "hello!";

      System.out.println(s);

    }

  }


 順番に変数を設定して、printlnで表示していくプログラムだ。ちなみに、変数を宣言するのは、変数を使用する前であればいつでも良い。最初の3行で3つとも宣言してもいいし、使う直前に宣言してもいい。使う直前に宣言したほうがコードを読みやすくなるので、そちらの方が好ましいだろうが。

 コードを書き終えてから「テスト」と唱えて魔法を実行した。すると、


 [

  123

  123.456

  hello!

 ]


 と表示された。


「Stringって……数字じゃないのに……変数……?」

「そうだな。魔法の世界では、文字も数字の一種なんだ」


 魔法の世界では実際どうかは知らないが、プログラミング……というか機械の世界では、文字は数字だ。機械が文字を表示するときは、数字の羅列を文字コードという解読表を使って文字に変換して、文字として表示しているのだ。


「それで、変数は本って例えたけど……intとかって別に1ページの1行しかない本になるけど、Stringは本の内容が入るくらい平気で記憶できちゃうんだ」

「……そんなに……? ……すごい……」


 使っている機械がどれくらいメモリを使えるかで左右されるが、基本的に1億文字くらいは記憶できる。夏目漱石の『こころ』が500冊ぶんだ。……この世界ではそこまで記憶できるかどうかは知らないが。



 しばらくした後、ステラが、はっ、と何かに気付いた。


「Stringだけ……大文字……なんで……?」


 まだ説明のしにくい部分だ……が、これに関しては後々重要になってくるので、本当のことをかいつまんで説明することにした。


「本当は、こいつだけちょっと仲間外れなんだ。String以外は"基本型"って言って、特別なんだよ」

「……Stringが、特別じゃなくて……?」

「ああ。基本型は、ここに書いたString以外の8つしかない。けど、Stringみたいな普通の型は、他にもっといっぱいあるんだ」

「……文字以外も、変数の種類、あるの……?」

「例えば、ファイアボールの魔法を見てみると……」


  import ...


  public class FireBall {

    private static final int USE_MP = 3;


    public static void main(String[] args) {

      Target self = new Target(Mana.Self);

      Fire fire = new Fire(Mana.getMagicForce(self, USE_MP));

      Magic m = new Molder(Molder.SMALL_ROUND).mold(fire);


      m.releaseForward(self);

    }


  }


「Targetとか、Fireとか、Magicとか、こういうのが普通の型だな。普通の型は単純な数字とか文字は入れられないけど、例えばFireだと、扱う炎の強さとかを表せるんだ。これを説明するのはだいぶ後になるけど、その頃には多分この魔法も読めるようになるぞ」

「…………分かった。楽しみにしてる」

「楽しみ、か……ステラは本当に偉いな~」


 そう言いながら、俺はステラの頭をわしゃわしゃと撫でた。実際、ここまで小さい子がついてこれているのは凄い。


「……ハル。私のこと、子ども扱いしてない……?」


 ステラは、ムッとしながら、そう言った。子供扱いされるのが苦手なのだろうか。


「ああ、子供扱いしてごめんな。年齢、10歳くらいだよね。もう立派な歳だもんなー」

「…………私……14歳だよ……」

「……え? 14歳……?」


 14歳……今の俺やエルと、1歳しか違わないのか……?

 小学生くらいの身長しかないが……異世界だからか? いや、でも俺もエルも身長が特段低いわけじゃないだろうし……ひょっとしてエルフとか……


「ステラは他の子よりもかなり小さいけど、本当に14歳よ? もちろんエルフでもなく、人間よ?」

「……………………え?」


「……また…………子供扱い…………された…………」


 このあと、ステラは10分くらい拗ねていた。

各キャラの大雑把な身長は、ハルは175cm、エルは160cm、ステラは140cmくらいの設定です。



今回のまとめ(物語中より細かいところを中心に)


・型の種類

正確な値の範囲は、以下の通りです。


  byte 1バイト(-128~127)の整数

  short 2バイト(-32768~32767)の整数

 ○int 4バイト(-21億~21億くらい)の整数

  long 8バイト(-922京~922京くらい)の整数


  float 4バイトの浮動小数点数

 ○double 8バイトの浮動小数点数


  char 1文字(Unicode文字)

 ○String 文字列


  boolean 真偽(true, false)


String以外は基本型(プリミティブ型)といい、型名を変数名に使えない等、他の型と明確に区別されます。

(基本型でない型は変数名に使えるので、例えば『String string = "abc"』や『String String = "abc"』と書いてもエラーになりませんし、前者のような書き方は一般的に使われています)



・値


int等の整数を扱う型には、整数(例:123, -456)が入ります。

物語中では使いませんが、8進数で表現するときは先頭に0を入れ(例:077)、16進数で表現するときには先頭に0xを入れます。(例:0xff)


double等の小数を扱う型には、小数(例:123.456)が入りますが、もちろん整数も入れることができます。

内部で2進数の浮動小数点数として扱っている関係上、誤差が発生しやすく、正確な値の計算には使いません。


charはUnicode文字が入ります。入力の際は'a'のようにシングルクォーテーションを使います。

(""は使えません。逆にStringで''は使えません)

数値を入れることも可能で、println等で出力した場合は数値に対応する文字が出力されます。


Stringは文字列が入ります。

""と入力すれば0文字の文字列を入力することもできます。(空文字と呼ばれます)

文字数制限は考えなくていいです。(Javaの仕様上10億文字くらいだけど、実際はメモリの関係で1億文字くらい)


booleanには数字や文字でなく、true, falseという二種類の値だけが入ります。(例:boolean b = true)

条件判定などで用いるため重要になりますが、第二章以降で改めて説明します。



n進数や浮動小数点数などの単語については、おそらく物語中では触れませんし、説明するとかなり長くなってしまいますので、ここでは割愛します。情報技術の基礎にあたる話ですので、興味があれば調べてみてください。

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ