先ほどの例では、Javaプログラムが起動される際「外部から値を渡すことができる」と説明しました。その渡された値はどこに記録しておくのでしょうか。現実世界でいうなら渡された値を忘れないようにメモ帳にメモします。そのメモ帳にあたるものがプログラム言語でいう変数になります。
変数は文字通り値を書き換えることができます。つまりメモ帳には鉛筆で字を書き、消しゴムで消せるイメージです。変数には型があります。どのようなデータを扱うかによって具体的な型を宣言します。以下は簡単ではありますが初心者が使いそうな型の一覧です。
型名 | 扱うデータ | 備考 |
---|---|---|
String | 文字列 | 文字を扱うときは値をダブルクォーテーションでくくる。ABCという文字を表す際は"ABC"とする。 |
int | 整数 | -2147483648から+2147483647の値を表すことができる。 |
double | 小数 | 浮動小数点と呼ばれる保存形式なので、表現できない値がある。極力使わない。 |
void | なし、無 | 型がないという意。 |
変数を使用する際の記述順ですが「変数の型 変数名;」になります。この記述のことを変数を宣言するといいます。必要に応じて変数の宣言と同時に値を代入(値を書き込むこと)ことができます。その場合の記述順は「変数の型 変数名 = 代入したい値;」になります。具体的には以下のようになります。
String name;
int age;
String name = "ABC";
int age = 20;
では先程の課題「私は名前です。年齢歳です。」を実装してみましょう。下の「TIPS:文字列の数値を整数型に変換する」も参考にして下さい。
class Sample {
public static void main(String[] args) {
String name;
name = args[0];
int age = Integer.parseInt(args[1]); // 文字列の数値を整数型に変換
String message;
message = "私は" + name + "です。" + age + "歳です。";
System.out.println(message);
}
}
また変数名は以下のルールで命名します。
- 大文字と小文字は区別される。
- 記号は'_'(アンダースコア)と'$'(ドル記号)のみが使用可能。
- 1文字目に数字は使用不可。数字を使用の際は2文字目以降。
- 言語の仕様として既に役割が決められたキーワード(予約語と呼びます), true, false, nullは使用不可。
上記ルールは絶対に守らないといけないルール(コンパイルエラーになる)なのですが、更に以下のルールで命名します。
- 意味のある名称(可能なら単語)をつける。単語ひとつで命名できないなら複数の単語でよいので意味のある名称をつける。
- ラクダ表記(キャメルケース)を用い、単語の区切りにアンダースコアを使用しない。
文字列の数値を整数型に変換するには以下を利用します。杓子定規に覚えてください。
int var = Integer.parseInt("変換したい文字列数値");
複合語をひと綴りとして、要素語の最初を大文字で書き表すことをいう。Wikipediaより参照。複合語の先頭を大文字で書き始めることをアッパーキャメルケース、またはパスカルケースと呼ぶ。複合語の先頭を小文字で書き始めることをローワーキャメルケース、または単にキャメルケースと呼ぶ。
具体例で説明すると「私の好きな食べ物」という変数名の場合、単語ごとに区切ると「私の」「好きな」「食べ物」になります。これを英単語で表すと「my」「favorites」「food」になります。次に各単語の先頭を大文字にします。「My」「Favorites」「Food」になります。これらを全て連結します。「MyFavoritesFood」になります。ただし先頭語は小文字とするため最終的には「myFavoritesFood」になります。
上のサンプルで「私は」「です。」「歳です。」は入力された値に関係なく変わることのない値です。このように変更されない値のことを定数と呼びます。円周率が3.14というのも定数です。
Java言語では定数は別途記述する方法があります。その場合の記述法は「static final 定数の型 定数名 = 定数の値;」になります。
ここで新たなキーワード「final」が登場しました。これは英単語の意味からも想像できるように最終的、最後といった意味を表す語なのでfinal修飾子が付加されていると、変更できないという意になります。定数の型は変数と同じものが使用できます。理由は単純で変数を変更できないようにしたものが定数だからです。では先程のサンプルに定数を利用してみます。
class Sample {
static final String MESSAGE_1ST = "私は";
static final String MESSAGE_2ND = "です。";
static final String MESSAGE_3RD = "歳" + MESSAGE_2ND;
public static void main(String[] args) {
String name;
name = args[0];
int age = Integer.parseInt(args[1]); // 文字列の数値を整数型に変換
String message;
message = MESSAGE_1ST + name + MESSAGE_2ND + age + MESSAGE_3RD;
System.out.println(message);
}
}
また定数名は以下のルールで命名します。
- 大文字と小文字は区別される。
- 記号は'_'(アンダースコア)と'$'(ドル記号)のみが使用可能。
- 1文字目に数字は使用不可。数字を使用の際は2文字目以降。
- 言語の仕様として既に役割が決められたキーワード(予約語と呼びます), true, false, nullは使用不可。
上記ルールは絶対に守らないといけないルール(コンパイルエラーになる)なのですが、更に以下のルールで命名します。
- 意味のある名称(可能なら単語)をつける。単語ひとつで命名できないなら複数の単語でよいので意味のある名称をつける。
- 全ての単語を大文字で表記し、単語の区切りにアンダースコアを使用する。ラクダ表記(キャメルケース)を用いない。
クラスを作成するときは以下のように記述します。ここではSampleという名称のクラスを作成する。という意味になります。記述順としては「修飾子 class クラス名」の順で記述します(今回例では修飾子はありません)。一般的にクラスは1ファイルに1つ存在します。※あくまでも一般論です。現時点ではそのように覚えましょう。
class Sample
メソッドを作成するときは以下のように記述します。ここではmainという名称のメソッドを作成する。という意味になります。記述順としては「修飾子 戻り値の型 メソッド名(パラメータ部)」の順で記述します(今回例では修飾子がpublic,staticになり、戻り値の型がvoid)。今回のmainメソッドは、戻り値はナシ(void)、に決定しました。(パラメータについては後述)メソッドはクラスの範囲内(カッコ内のこと)に記述し複数存在します。
public static void main(String[] args)
パラメータ部では、0個以上の値(以降はパラメータと呼ぶ)を渡すことができます(0個はパラメータなしの意)。記述順としては「( パラメータ1の型 パラメータ1の名称, パラメータ2の型 パラメータ2の名称, パラメータ3, ...)」の順で記述します。
パラメータが複数存在する場合は「型 名称, 型 名称, 型 名称,...」となるよう型と名称の組みをカンマで区切ります。今回のmainメソッドは、パラメータは1つで、文字列配列、argsという名称、に決定しました。このようにメソッドを決定することをメソッド宣言と呼びます。
作成したメソッドを呼び出すときは以下のように記述します。こちらはfoobarメソッドを呼び出す例になります。
public static void main(String[] args) {
foobar("ABC", 123);
}
static String foobar(String name, int age) {
return null;
}
以下のメソッド宣言を作成しなさい。
- メソッドの名称がほげほげ(英名hogehoge)
- 戻り値がString型(今回はメソッドの内容はreturn null;で良い)
- パラメータは2つ
- 第1パラメータ, パラメータの型が文字列(英名String), 名称が名前(英名name)
- 第2パラメータ, パラメータの型が整数(英名int), 名称が年齢(英名age)
以下のクラスを作成しなさい。
- クラス名はHello
- メソッドは最低でも1つ以上で、そのひとつはhelloという名称
- helloメソッドは必ず使う(呼び出す)こと
- helloメソッドの修飾子はstaticであること
- helloメソッドのパラメータは3つで名前と年齢、住所を渡される
- 起動パラメータを3つ(先頭から順に ABC 012 Tokyo)渡し、このクラスを起動すると、「私はABCです。12歳です。Tokyoに住んでいます。」と1行で出力されること
- ここに記述されていない事柄に関しては自由に作成すること