JavaとRubyのメソッドの違い
JavaとRubyで、メソッドの役割はほとんど変わらない。
記述方法は大きく変わる。
Javaには、mainメソッドという特別な意味を持つメソッドもある。
Javaのメソッド
mainメソッド
Javaでは、Rubyと同様に自由にメソッドを定義して使用することができる。
ただし、Javaには「mainメソッド」という特殊なメソッドがある。
mainメソッドには特別な役割があり、記述の仕方も決められている。
mainメソッドのルール
1. ファイルを実行するとmainメソッドが実行される。
2. mainメソッドの引数などは、必ず決められた通りに記述する必要がある。
1. ファイルを実行するとmainメソッドが実行される。
ここまでの学習でreplitにコードを書く時、以下のように記述をしていた。
class Main {
public static void main(String[] args) {
// 処理の内容
{
}
2行目の public static void main(String[] args)
の「main」の部分がメソッド名。
今までのコードは全てmainメソッドの中身を定義していた。
Javaのmainメソッドはファイルの実行時に自動で実行される。そのため、mainメソッドを実行するコードを書く必要がない。
Rubyでは、メソッドは定義するだけでは何も起きず、必ず実行する必要があった。
この点もJavaとRubyのメソッドの違う点と言える。
2. mainメソッドの引数などは、必ず決められた通りに記述する必要がある。
通常のメソッドは引数の設定などを変更できるが、mainメソッドについては書き方が決められている。
データ型等を変更してしまうとエラーになるため、以下の通りに記述する必要がある。
public static void main(String[] args) {
// 処理の内容
}
メソッドの使い方
Javaでメソッドを使用する方法は若干複雑なため、以下の2つに分ける。
- 引数を使用しないメソッドの使い方
- 引数を使用するメソッドの使い方
1. 引数を使用しない場合
class Main {
public static void main(String[] args) {
sayHello();
}
public static void sayHello() {
System.out.println("Hello World");
return;
}
}
Hello World
基本的な使い方
メソッドを定義するための構文は以下。
実行したコードの6~9行目の記述
アクセス修飾子 static修飾子 返り値のデータ型 メソッド名() {
// 処理内容
}
上記のコードの void
が返り値のデータ型、 sayHello
がメソッド名。
メソッドを定義するために、返り値のデータ型を指定する必要があるのはRubyと異なる点。
Rubyの場合は以下だった。
def sayHello
# 処理内容
end
JavaとRubyではメソッド定義方法に以下の違いがある。
- 返り値のデータ型を指定する必要がある
- 引数がないメソッドでも定義時にかっこの省略はできない
- Rubyの「def」「end」の代わりに、波かっこでコードを囲む
1. 返り値のデータ型を指定する必要がある
Javaのメソッド定義では、返り値のデータ型を指定する必要がある。
return 1;
といったように返り値が整数型であれば、メソッド名の前に「int」と記述する。
public static int returnNumber() {
return 1;
}
先ほど実行したコードのように返り値がない場合は、「中身がない」ことを意味する「void」と記述する。
2. 引数がないメソッドでも定義時にかっこの省略はできない
rubyの場合は以下のように省略できた。
# 引数がない場合
def sayHello
// 処理
end
# 引数がある場合
def sayHello(name)
// 処理
end
javaでは省略できないため以下のように空の () を記述する。
sayHello()
3. Rubyの「def」「end」の代わりに、波かっこでコードを囲む
Rubyでは、メソッド定義の開始を示す「def」、終わりには「end」という文字が必要だった。
Javaではそのような記述の代わりに、実行したい処理を「 { 」(開始)と「 } 」(終了)で囲みます。
実行方法
メソッド名が「sayHello」の場合は、以下のように記述することでメソッドを呼び出すことができる。
sayHello();
引数が必要ないメソッドでも、かっこは省略できない。
2. 引数を使用する場合
class Main {
public static void main(String[] args) {
var answer = square(15);
System.out.println(answer);
}
public static int square(int number){
return number * number;
}
}
225
基本的な使い方
メソッド実行時に引数(本引数)を square(15)
のように指定し、メソッドで引数(仮引数)を square(int number)
のように受け取る仕組み。
public static int square(int number){
return number * number;
}
int number
の部分が仮引数。
変数名「number」だけでなく、受け取る値のデータ型(今回はint)を指定する必要がある点がRubyとは違う。
このメソッドの場合、返り値は整数型です。そのため、メソッド名の前に「int」と記述している。
実行方法は以下
square(15);
「square(15)」のように、メソッドsquare()を実行する際に、引数として「15」を指定。
このように、引数の使い方はRubyの場合とほぼ同じで、仮引数にデータ型の指定が必要なことだけが異なる点。
修飾子
Javaには、「修飾子」と呼ばれる機能がある。
修飾子はクラスやメソッド、変数などの定義を行う際に、特定の機能を付加するもの。
アクセス修飾子
public static void sayHello() {
// 処理
}
上記では public
がアクセス修飾子。
アクセス修飾子は、外部への公開範囲を設定するためのもので、
- public
- protected
- private
の3種類がある。
アクセス修飾子の種類 | 機能 |
---|---|
private | 同一クラス内からのみアクセスできる |
protected | 現在のクラスとサブクラスからアクセスできる |
public | どのクラスからでもアクセスできる |
Javaでは、publicにする必要がないものは、極力privateを使用した方が良いとされている。
static修飾子
public static void sayHello() {
// 処理
}
上記では、 static
がstatic修飾子。
staticは英単語で「静的」という意味。静的とは、状態が変化しないことを意味する。
メソッドの定義の際に、staticをつけることで「静的メソッド」として定義される。静的メソッドは、「クラスメソッド」とも呼ばれる。
クラスメソッドの役割や使い方は、Rubyとおおむね同じ。
staticを付けない場合は、「インスタンスメソッド」として定義される。