はじめに
Ryby on Railsしかやったことない自分が新たにJavaを学習していく時に、
「Rubyの○○に相当するものは、Javaのなんなんだ?」ってなっちゃったので、頭の中を整理するために書きました。
人間の思考は、「類似・対比・因果」で展開されること多いらしいです。
両者の記述を並べることで、類似点と相違点が見つけられてより深い理解を得られるようなると思うので、同じ境遇の方の参考になると幸いです。
自分の学習に合わせて更新・修正していく予定です。
また、間違った解釈をしている可能性があるのでご指摘していただけたら大変よろこびます。
環境
Ruby 2.6.5
Java SE 15.0.2
前提
Javaはclass Main
にpublic static void main(String[] args)
を定義しないと実行できませんが、その中の記述方法として書いています。
記述方法の比較
変数の定義
main.rb
int = 1 # 数値
str = "Hello World" # 文字列
bool = true # 真偽値
f = 1.5 # 小数点数
Main.java
int int = 1; // 数値
String str = "Hello World" // 文字列
boolean bool = true // 真偽値
float f = 1.5; // 小数点数 ※double(64bit)
コンソールへ出力
main.rb
# ()省略
p "Hello World" # "Hello World"と出力されます => 型の識別
print "Hello World" # Hello Worldが出力されます(末尾の改行なし)
puts "Hello World" # Hello Worldが出力されます(末尾の改行あり)
Main.java
System.out.print("Hello World"); // Hello Worldが出力されます(末尾の改行なし)
System.out.println("Hello World"); // Hello Worldが出力されます(末尾の改行あり)
コンソールから入力=>出力
main.rb
# ()省略
str = gets # <= Hello Worldと入力した場合
puts str # => Hello Worldと出力
Main.java
import java.util.Scanner; // java.utilパッケージのScannerクラスをimport(本来は冒頭に宣言)
Scanner sc = new Scanner(System.in); // Scannerクラスからインスタンス化(インスタンス化については後述してます)
String str = sc.next(); // インスタンス化したscのnextメソッドを実行 <= Hello Worldを実行した場合
System.out.println(str); // => Hello Worldと出力
メソッドの定義
main.rb
# 引数なし&戻り値なしのインスタンス化を必要としないメソッド(クラスメソッド)
def greeting()
puts "こんにちは、世界"
end
Main.java
// 引数なし&戻り値なしのインスタンス化を必要としないメソッド(クラスメソッド)
public static void greeting(){
System.out.println("こんにちは、世界");
}
クラスの定義 (例:名前と年齢をもつ人)
human.rb
class Human
# ※以前書いていたattr_accessorは誤りでした
def initialize(name, age) # イニシャライズメソッド(インスタンス化して始めに呼ばれる)
@name = name
@age = age
end
def get_name() # インスタンスメソッド(ゲッター)
return self.name
end
def set_name(name) # インスタンスメソッド(ゲッター)
self.name = name
end
end
Human.java
class Human{
private String name; // フィールド
private int age;
Human(String name, int age){ // コンストラクタ(インスタンス化して始めに呼ばれる)
this.name = name;
this.age = age;
}
public String getName(){ // インスタンスメソッド(ゲッター)
return this.name;
}
public void setName(name){ // インスタンスメソッド(セッター)
this.name = name;
}
}
インスタンス化
main.rb
human1 = Human.new(name: "太郎", age: 12)
Main.rb
Human human1 = new Human("太郎", 12);
例外処理
main.rb
begin
# 例外を発生させる可能性のある処理
rescue => e # 例外オブジェクトを代入した変数
# 例外発生時の処理
end
Main.rb
try {
// 例外が発生する可能性のある処理
} catch (/* 捕捉する例外の型 変数名 */) {
// 例外発生時の処理
}
さいごに
性質上、完全に対応していない部分もあるかも知れませんが極力合わせていきます。
現時点ではこれだけですが、また追記していきます。
-2021/02/17
-2021/02/19