7. 変数と型

はじめに

今回のテーマは「変数と型」についてです。

「変数と型」は、どのプログラミング言語においても欠かすことができないプログラミングの基礎です。

新しいことがたくさん出てくるかもしれませんが、一度に全て理解できなくても大丈夫です。気軽に進めていきましょう

 

変数とは?

前回 textView.setText("こんにちは"); というコードを書きました。

前回は TextView が1つだけしかありませんでしたが、以下のように TextView が5つあると考えてみましょう。(実際にはこのようなコードになることはないと思いますが、あくまで例えとしてお考えください。)

textView1.setText("こんにちは");
textView2.setText("こんにちは");
textView3.setText("こんにちは");
textView4.setText("こんにちは");
textView5.setText("こんにちは");

実際にコードを書くとなると「こんにちは」を5回も書くことになります。

もし途中で「こんにちは」から「Hello」に変えたくなったら5箇所全てを書き換えないといけません。

コピペや検索・置換すれば何とかなると思いますが、見落とす可能性もありますし、何よりとても面倒ですよね。

 

このように

  • 何度も同じ文字列や数値を使う
  • あとで変更を加える可能性がある

ものは「変数」として値を定義・維持しておくことができます。

 

 

変数と型の書き方

まずはこのコードをみてください。

String message =  "こんにちは";

 

このコードは4つのパーツからできていています。

image1

文章にしてみると String 型の変数 message に「こんにちは」を代入するという意味になります。

 

「???」という文章かもしれませんが、大丈夫です!

順番に一つずつ見ていきましょう

 

;(セミコロン)について

もうお気づきかもしれませんが、コードを 1 行書いたら最後に ;(セミコロン) をつけます。

クラスやメソッドの定義、これから学習していく if 文やループなどは {} で囲みますが、
それ以外のコードは基本的に「1 行書いたら ;(セミコロン)をつける」と意識しておいてください。

 

 

1. 型

型の種類

image2

型とは、変数の値が

  • 文字なのか、数字なのか
  • 数字ならば整数なのか、小数なのか
  • 何桁ぐらいの数字になるのか

など、変数の形式を表すものです。

 

型は

  1. 基本型
  2. 参照型

に分けることができます。

ここからは型の例を紹介していきますが、現時点で覚える必要は一切ありません!
「こんな種類があるんだな」と目を通すぐらいで進めてください。

 

① 基本型

基本型は8種類あります。

boolean true / false
char 2バイトの文字 0 ~ 65535(Unicode)
byte 1バイトの整数 -128 ~ 127
short 2バイトの整数 -32768 ~ 32767
int 4バイトの整数 -2147483648 ~ 2147483647
long 8バイトの整数 -9223372036854775808 ~ 9223372036854775807
float 4バイトの浮動小数点
double 8バイトの浮動小数点

 

byte / short / int / long はどれも整数ですが、使用できる数値の大きさが異なります。float / double も同じです。

8種類の中でよく使うのは boolean / int / float 型です。

 

② 参照型

参照型は「クラス型・配列型・インターフェース型」に分けられます。

ここではクラス型を簡単に見てみましょう。

基本型は

boolean type = true;
int number = 3;

とするだけですが、クラス型はそのクラス内にある変数やメソッドを使うことができるという特徴があります。(クラスについては今後さらに詳しく紹介していきます。)

 

前回 TextView クラスの setText メソッドを使いましたね。

textView.setText("こんにちは");

これと同じようにクラス型で定義した変数には、それぞれのクラスにあるメソッドを使うことができます。

 

例えば String クラスには文字列を大文字にする toUpperCase メソッドがあります。

Android Studio で以下のようにコードを書いてみました。

image3

char 型と String 型で、どちらも値が a の変数を用意しています。

String 型の変数 s は toUpperCase メソッドを使って大文字 A を表示することができますが、基本型の変数 c はエラーになっています。

このように、クラス型を使うことでそのクラス内のメソッドを使うことができます。

ラッパークラスについて

基本型にはクラス型のようにメソッドがありませんが、代わりにラッパークラスというものが用意されています。
ラッパークラスには色々なメソッドがあり、例えば char 型のラッパークラスである Character クラスを使えば、同じように char 型の文字を大文字にすることができます。
詳しくは8. ラッパークラスと型の変換で紹介しています。

 

型は、もちろん自分で用意したクラスを使うこともあります。

この講座の始めにロボットを動かす Robot クラスの例を紹介しました。

image4

Robot クラス内で Head クラスを使う時は

image5

のように Head クラス型の変数を用意します。

* new Head() という書き方についても今後紹介していきます。

 

 

型の決め方

型は「変数にどんな形式の値を入れるのか」で決めます。

例えば値が 1, 2, 3... などの整数の場合は int や long 型を使用します。

int number = 1;

3.14 のような小数点の場合は float や double 型です。

float pi = 3.14f;

 

一つ注意点は「変数には指定した型以外の値を入れることはできない」ということです。

例えば int 型で用意した変数に 3.14 を入れたり、boolean 型の変数に文字列を入れることはできません。

image6

これはコードを書いているうちに自然と身に付きますし、Android Studio では型と異なる値を指定すると赤い波線をつけてくれるので安心です

 

Android 開発での型

前回の「Hello World を書き換える」で、すでに型を使用していたことにお気づきでしょうか?

image7

ここでは TextView クラス型で textView という名前の変数を定義しています。

 

Android 開発では

  • TextView
  • ImageView
  • Button
  • LinearLayout

などの要素もクラス型として記述していきます。

   

現時点では全ての型の種類を覚える必要は一切ありません。

コードを書きながら徐々に覚えておけばいいので「型は変数がどんな形式の値なのかを表す」ということだけ頭に入れておいてくださいね。

 

 

2. 変数名

image8

次は変数名についてです。

基本的にどんな名前も付けることができますが、適当につければ良いわけではなく「しっかりと意味をもたせる」ことが大切です。

ここからは変数名に使える文字・書き方のルールを紹介します。

 

使うことができる文字

変数名に使うことができる文字は

  1. 半角英数字
  2. _(アンダースコア)
  3. $(ドルマーク)

です。

文字数に制限はありません。

日本語を使うこともできますが「どうしても日本語を使ってほしい」などの指示がない限りは英語で書きます。

 

5つの注意点

注意点1

image9

型が異なっていたとしても、同じ変数名を使うことはできません。変数名は重複しないように注意してください。

 

注意点2

image10

半角英字は大文字と小文字が区別されます。name と Name は別の変数になります。

 

注意点3

image11

変数の先頭に数字をつけることはできません。

 

注意点4

image12

使うことができる記号は _(アンダースコア)と $ だけです。スペース(空白)を入れることもできません。

 

注意点5

image13

すでに Java で予約されているキーワード(予約語)を変数名に使うことはできません。

予約語一覧

abstractcontinuefornewswitch
assertdefaultifpackagesynchronized
booleandogotoprivatethis
breakdoubleimplementsprotectedthrow
byteelseimportpublicthrows
caseenuminstanceofreturntransient
catchextendsintshorttry
charfinalinterfacestaticvoid
classfinallylongstrictfpvolatile
constfloatnativesuperwhile
_ (underscore)

 

これらに加えて true, false, null も使うことができません。

【参考】Java SE 15 公式ドキュメント:https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html

 

 

変数名の悪い例

ここからは私が実際に見たことがある、あまり良くない変数名を紹介します。

これらの変数名が何を意味しているか分かるでしょうか?

String name1;
String name2;
int yubin;

 

答えは「名字」「名前」「郵便番号」です。

yubin は分からなくもないですが、name1, name2 はフルネームなのかニックネームなのかも判断できないですし、分かりにくいですよね。

このように変数が何を意味しているのか分かりにくい名前は使うべきではありません。

この例の場合は

  • lastName
  • firstName
  • zipcode

とするのが理想的です。

変数名を見ただけで、何を意味しているかが簡単に判断できますね。

自分一人で開発していたとしても、今後他の人が修正を加えたり、複数人で作業することも考えられます。

変数名を考えるときは自分以外の人がコードを見たときに分かりやすい名前にすることを意識してみてください。

 

 

3. 代入

image14

算数では = は イコール(等しい)という意味で使われますが、プログラミングでは「変数に値を代入する」と表現します。

 

この「代入」のイメージが分かりにくく、プログラミングが嫌だなと思ってしまう方がいます。私もプログラミングを始めた当時は「変数に値を代入する」という言葉がしっくりきませんでした。

多くの教材では「代入」や「データを箱に入れる」という表現をしていますが

  • 変数 message を「こんにちは」にする
  • 変数 message は「こんにちは」

とイコールに近いイメージで私は考えています。

不正確だという人もいるかもしれませんが、あくまでイメージなので理解しやすい方で考えてみてください

 

 

4. 値

image15

値の書き方は基本型と参照型によって異なります。

 

基本型

image16

 

ポイント①

image17

String 型の文字列は ""(ダブルクォーテーション)で囲みますが、char 型は ''(シングルクォーテーション)で囲みます。

補足

char 型の値は文字か文字コードで書くことができますが、実際の値は文字コード(0~65535)で保持されています。

char c1 = 'あ';
char c2 = 12354;

この場合どちらの値も平仮名の「あ」を表しています。

 

ポイント②

image18

long / float / double 型はそれぞれの値の最後に L / F / D をつけます。

小文字で書くこともできますが、long 型の L は数字の 1 と間違いやすいので大文字で書くようにしましょう。

image19

 

ポイント③

image20

先ほど型の種類 ①基本型で byte / short / int / long は使用できる数値の大きさが異なると紹介しました。

Android Studio では使用できる範囲を超えた場合に赤い波線でエラーを表示してくれるので安心です。

実際にコードを書く場合は int 型を使うことが多いです。

 

 

参照型

ここでもクラス型を例にみていきましょう。

クラス型の場合は

image21

と書きます。

引数がある場合は new クラス名(引数) と書きます。

 

先ほど少し紹介したロボットの Head クラス

Head head = new Head();

もこの書き方でしたね。

Java ではこれをオブジェクト(インスタンス)を作成するといいます。

オブジェクトやクラス型の具体的な使い方については、この講座の後半で紹介していきます。

 

例外

String 型はよく使われるので

String name = new String("名前");

と書く必要はなく

String name  = "名前";

でオブジェクトを作成できるようになっています。

TextView などの要素も findViewById メソッドでオブジェクトを作成することができます。

TextView textView = findViewById(R.id.textView);

 

 

復習

一番始めに紹介したコードをもう一度見てみましょう。

image22

「こんにちは」は文字列なので ""(ダブルクォーテーション)で囲んで、型は String にしています。

「こんにちは」は画面に表示するメッセージなので、変数名は message としました。

 

ここまでは1行で書いてきましたが2行に分けて書くこともできます。

String message;
message = "こんにちは";

 

 

実際に使ってみる

それでは Android Studio の Sample プロジェクトにもどって

textView.setText("こんにちは");

の「こんにちは」を変数にしてみましょう。

 

9・10行目のようにコードを追加・変更してください。

変数を使うときは変数名 message を書くだけです。

 

アプリを実行してみてください。前回と同じように「こんにちは」と表示されれば成功です!

image23

 

 

まとめ

新しいことがたくさん出てきたかもしれませんが

  • 変数は文字列や数値などの値を定義・維持しておくもの
  • 変数名は誰が見ても分かりやすくすること

の2点と

「型・変数名・代入・値」の4つのパーツで成り立っていることを覚えておいてください。

image24

型の種類は実際にコードを書きながら覚えていきましょう

 

次に行うこと

次のステップは今回学んだ「変数と型」の練習問題です。

String 型以外の型も使ってみましょう!

 

コメント

0 コメント