変数の違い
プログラミング言語によって変数の扱い方は異なり、「動的型付け言語」と「静的型付け言語」の2種類がある。
今まで学習してきたRubyは「動的型付け言語」で、Javaは「静的型付け言語」。
データ型
データ型とは、変数に格納するデータの種類のこと。
「数値としての1」と「文字としての1」はプログラムの上では異なるものとして扱われます。
Javaでは変数を定義するときに、その変数をどのデータ型として扱うのかプログラムに伝えるため、使用前に「宣言」してから使用する。
Javaの基本データ型は以下の8種類
データ型 | bit数 | 値 |
---|---|---|
boolean | 1bit | true あるいは false |
char | 16bit | 文字 |
byte | 8bit | 整数(扱える範囲は -128~127) |
short | 16bit | 整数(扱える範囲は-32,768~32,767) |
int | 32bit | 整数(扱える範囲は-2,147,483,648~2,147,483,647) |
long | 64bit | 整数(扱える範囲は-9223372036854775808~9223372036854775807) |
float | 32bit | 小数(精度低) |
double | 64bit | 小数(精度高) |
小さめの数値を扱うint型と、大きめの数値を扱うlong型が使用頻度が高い。
小さめの数値を扱う型と、大きめの数値を扱う型で使用するメモリに 8bt ~ 64bit と、違いがあり、扱う数値が大きくなると必要なメモリサイズも増える
データ型の扱い方の違い
「動的型付け言語」と「静的方付け言語」の2種類の違い
動的型付け言語
rubyが該当する。
a = 2
puts(a * 2)
# 4と出力される。
# 数値の4として扱われる。
a = "ruby"
puts(a * 2)
# rubyrubyと出力される。
# 文字列として扱われ、2回繰り返している。
a = "2"
puts(a * 2)
# 22と出力される。
# 文字列として扱われ、2回繰り返している。
上記のような違いが出るのは、どのような値が代入されたかによって、変数のデータ型が柔軟に変更され、そのデータ型に基づいて処理が行われていることを表している。
このように、「プログラムの実行時に変数のデータ型が決定される仕組み」を採用している言語が、「動的型付け言語」。
静的型付け言語
動的型付け言語とは異なり、変数のデータ型を最初に決定したら変更できない仕組み。
javaが該当する。
最初に「整数」として宣言した変数に、「文字列」を代入しようとするとエラーになる。
柔軟性がなく不便なようだが、あらかじめ宣言しておくことで処理が高速になったり、データ型の不整合によるエラーを実行前に検知できるなどのメリットがある。
変数の宣言と使い方
型名 変数名;
行末に「;(セミコロン)」をつける。
Javaでは、命令の終わりに「;(セミコロン)」が必要で、書き忘れるとエラーになる。
宣言した後の変数は、Rubyと同様に使うことができる。
class Main {
public static void main(String[] args) {
int number;
number = 2;
System.out.println(number * 3);
}
}
// int型で整数(数値)として扱うことを宣言している。
System.out.printlnは、()で囲んだ中身を出力するメソッドで、Rubyのputsに相当する。
class Main {
public static void main(String[] args) {
int number;
number = エラーになる;
System.out.println(number);
}
}
// int型で整数(数値)として扱うことを宣言しているため、文字を代入するとエラーになる。
下記はreplitで出力されたエラー文
./Main.java:3: error: cannot find symbol
var radius = エラーになる;
^
symbol: variable エラーになる
location: class Main
1 error
1 class Main {
2 public static void main(String[] args) {
3 //ここに処理を記述する
4 }
5 }
1・2・4・5行目の記述は必ず書かなくてはいけないテンプレートのようなもの。
詳しくは別の記事。
型推論
var 変数名 = 値
この記述を行うと、値の種類によってデータ型が推論され、推論されたデータ型で宣言が行われる。
class Main {
public static void main(String[] args) {
var number = 2;
System.out.println(number * 3);
}
}
上記記述を行うと、代入する値(今回は2)からデータ型を推論してくれるため、int型であるという宣言が不要になる。