前回「キャリアとプロファイルを覚えて「Hello Javaアプリ!」」では、ケータイ(本連載では、携帯電話/PHS/スマートフォンなどの端末をまとめて「ケータイ」と表記します)Javaアプリの開発環境で、初めてのプログラムを動かしてみました。
今回はプログラムを作るうえで必須の知識であるJavaの文法と言語仕様について説明します。最初に、“たい焼き”を例としてJavaの言語使用の概念的な説明をし、次に、実際にJavaで書かれたプログラムのソースコードを見ながら文法を具体的に理解しましょう。
ソースコードは、連載第1回「あなたの携帯電話でJavaアプリは動きますか?」でデモしたテトリスみたいなゲーム「Trimis」のアプレット版のものです。まずは、「Trimisアプレット版」のソースコードをこちらよりダウンロードしてください。
ダウンロードできたら、ソースコードをテキストエディタでWebブラウザの傍らに開いておいてください。ソースコードの説明は行番号で場所を指定するので、行番号が表示できるテキストエディタをぜひ使用してください。
プログラマーが最もこだわるツールの1つがテキストエディタです。もちろん、筆者もこだわりを持っていて、あるテキストエディタを10年以上使用しています。皆さんもこだわりが持てる気に入ったテキストエディタをぜひ見つけてください。
編集部注:テキストエディタでの開発を補助するツールについて詳しく知りたい読者は、「テキストエディタでWebサイト構築をガンバル人へ」をご覧ください。
Javaは「オブジェクト指向言語」です。そして、オブジェクト指向言語は「クラス」という概念があります。クラスからはインスタンスを生成します。
図1はクラスとインスタンスの概念を“たい焼き機”と“たい焼き”に例えたものです。「クラス」とは、インスタンスを作るための鋳型で、実際にプログラムとして動作するのは、「インスタンス」というものです。クラスからはインスタンスがいくつでも生成でき、生成するインスタンスはクラスで用意した方法を使って内容を変えることが可能です。
例えると、たい焼き機からはたい焼きをいくつでも作成することが可能です。そして、たい焼きの中に入れる具は“あんこ”以外に選ぶことができます。“チーズ”や“クリーム”、“お好み焼き”などを入れれば、たい焼きはたい焼きに違いないのですが、特性(この場合、味)の異なるたい焼きが出来上がります。
たい焼きのインスタンスは誰かに食べられるか、海に逃げ込むようにプログラムされています。どちらになるかは、ここではインスタンスの状態に依存する、としておきます。
このようにJavaは、クラスを定義してインスタンスを生成し、そのインスタンスを動作させるプログラミング言語である、ということができます。
Javaはオブジェクト指向言語だと説明しましたが、「オブジェクト指向」とは何でしょうか? オブジェクト指向とはプログラムの構成要素を「モノ(オブジェクト)」に例える考え方です。
Javaでは、実際にこの世界に存在するモノや、または架空のモノをプログラムで表現することがよくありますが、それらがどういうモノなのか、ということを考えられるようになれば、オブジェクト指向をマスターするのは遠くないでしょう。
編集部注:オブジェクト指向について詳しく知りたい読者は、「連載「ここから始めるオブジェクト指向」」をご覧ください。
Javaでは、クラスの宣言は以下のように記述します。
class クラス名 { クラスの内容 } |
クラス宣言は「class」というキーワードで開始し、クラス名に任意の名前を付け、クラスの内容を“{”と“}”で囲みます。
実際に、ソースコードで見てみましょう。テキストエディタで開いているソースコードの10行目が、TrimisAppletのクラス宣言を行っている部分です。クラスは“{”から開始し、対応する“}”までです。このソースコードでは対応する“}”は371行目です。最もシンプルなクラスは以下のように書くことができます。
class Simple {} |
このSimpleというクラスは、クラス宣言だけを行って、フィールドやメソッドといった特性は宣言されていないので、何もすることができませんが、これでも「何もできない」という特性を持つ立派なクラスです。
クラスとインスタンスが多少なりとも理解できたところで、同じクラスから異なるインスタンスが生成できる仕組みを説明します。
クラスは、「フィールド」という変数を持つことができます。変数というのは値を入れる場所のことです。
たい焼きでは、具を入れる場所があらかじめ用意されています。このクラスに用意されている変更可能な場所がフィールドです。このフィールドは、中身はあんこやチーズ、クリーム、お好み焼きだったりするわけです(場合によっては具がない、ということもあり得ますが、それはまた後ほど説明します)。
フィールドの内容が異なると、同じクラスから生成されたインスタンスでも特性が異なる、というのは理解できたかと思います。
前述したようにフィールドというのは変数の一種ですが、変数にはフィールドのほかに「ローカル変数」というものも存在します。このローカル変数というのは、後述するメソッド中で一時的に使用する変数です。
変数を使用する場合は、フィールドであってもローカル変数であっても「型」を宣言しなければなりません。Javaの型は、「プリミティブ型」と「参照型」に大別できます。プリミティブ型の一覧は以下のとおりです。
型 | 説明 | 値の範囲 |
---|---|---|
boolean | 真偽を表す | true か false のみ |
byte | 最も小さな整数を表す | −128 〜 127 |
short | 小さな整数を表す | −32768 〜 32767 |
int | 整数を表す | −2147483648 〜 2147483647 |
long | 大きな整数を表す | −9223372036854775808 〜 9223372036854775807 |
char | 文字を表す | 2つの「'」(シングルクオーテーション)で囲んだものすべて(例、'A' や 'あ') |
float | 実数(小数点数)を表す | 1.4e−45 〜 3.4028235e+38 |
double | 大きな実数を表す | 4.9e−324 〜 1.7976931348623157e+308 |
floatとdoubleには指数が使用されていますが、これを使用しないと数値が表せないので、そのようになっています。分からない人は、「e−45」は、小数点が左に45個、「e+38」は小数点が右に38個移動するという意味で覚えといてください。
プリミティブ型は上記の8種類です。クラスのインスタンスなど、プリミティブ型以外の変数はすべて参照型です。
Javaでは、変数宣言は以下のように記述します。
型名 変数名; |
型名には、プリミティブ型のいずれか、またはクラス名を指定し、変数名に任意の名前を付け、最後に“;”(セミコロン)を付けます。
TrimisAppletのフィールドは、12〜34行目で宣言されています。プリミティブ型がどれで、参照型がどれだか分かりますか? 例えば、以下のような記述になります。
int totalLines = 0; |
このように、宣言時に「=」の式で値を入れたりもできます。また「new」は簡単にいうと、クラスのインスタンスを作るときなどに使われるキーワードです。「new」や「式」については次回以降解説します。
次ページでは、さらに配列やメソッドについて説明します。
Copyright © ITmedia, Inc. All Rights Reserved.