連載
» 2008年03月25日 00時00分 公開

JavaエンジニアのためのRuby入門(2):JavaとRubyの共通点と相違点 (1/2)

実は共通点の多いRubyとJava。Javaエンジニアであり、JavaとRubyの両方のインストラクターでもある筆者が贈る、JavaエンジニアのためのRuby入門。

[中越智哉,ナレッジエックス]

 前回「Javaエンジニアにこそ、Rubyの良さが分かる」では、JavaとRubyの概要と歴史、使われ方について紹介し、なぜJavaエンジニアがRubyの学習に向いているのかについて解説しました。

 今回から2回にわたって、具体的にRubyとJavaの文法を比較してみます。JavaエンジニアがRubyを学ぶ際、「ここはすんなり通過できる」というような共通する部分と、「ここは違いをよく認識する必要がある」というようなRubyにあってJavaにない部分を、いくつか紹介したいと思います。

 まずは、Javaエンジニアがほとんど戸惑うことがないと思われる、JavaとRubyの共通点をいくつか挙げてみます。

JavaとRubyの共通点(1)〜クラス定義・継承

 JavaとRubyがともにオブジェクト指向言語であるということは、前回もお話ししたとおりです。Javaのクラス定義や継承の概念は、基本的にRubyでも同様と考えることができます。記述方法は多少異なりますが、書き方さえ知ってしまえば、特に難しいことはないはずです。

 暗黙の親クラス(すべてのクラスの親クラス)がObjectクラスであるということ、1つのクラスは直接の親クラスを1つしか持てないこと(単一継承)も共通しています。

class クラス名 {
		  
}
<Javaのクラス定義の記述>
class クラス名
 
end
<Rubyのクラス定義の記述>
class クラス名 extends 親クラス名 {
		  
}
<Javaのクラス定義の記述(継承を行う場合)>
class クラス名 < 親クラス名
end
<Rubyのクラス定義の記述(継承を行う場合)>

JavaとRubyの共通点(2)〜演算子・制御文

 RubyはCに近い体系の演算子を用意しています。同じくCの文法を踏襲しているJavaとは、演算子の内容も近いものが多く、違和感を覚えることは少ないでしょう。

 例えば、四則演算(加算、減算、乗算、除算)と割り算の余り、比較演算子(等号、不等号、大なり、小なり、以下、以上)などは表記も含めてほとんど共通です。

 下記は、JavaとRubyで表記が異なる演算子のいくつかを表にしたものです。参考にしてください。

演算子 Javaでの表記 Rubyでの表記
べき乗 なし **
否定 ! ! / not
論理積 & / && & / && / and
論理和 | / || | / || / or
表1 JavaとRubyで表記が異なる演算子

 一方の制御文ですが、これもif/for/while などの基本的なものについてはよく似ています。

 if文では、Rubyの場合は条件式を()で囲む必要がないこと、「else if」 を「elsif」と記述する点が異なりますが、基本的な使い方に違いはありません。for文についても同様で、書き方は少々異なりますが、使い方はよく似ています。

if (条件式1) {
 ・・・
} else if (条件式2) {
 ・・・
} else {
 ・・・
}
<Javaのif文の記述例>
if 条件式1
 ・・・
elsif 条件式2
 ・・・
else
 ・・・
end
<Rubyのif文の記述例>
for(int i=1;i<=10;i++) {
  System.out.println(i);
}
<Javaのfor文の記述例>
for i in 1..10
  puts i
end
<Rubyのfor文の記述例>

JavaとRubyの共通点(3)〜例外処理の記述

 JavaとRubyはともにオブジェクト指向言語のため、どちらも例外処理の機構を備えています。

 Rubyの例外処理の構文は、ぱっと見るとJavaのそれと違うように思えます。しかし下記の例のように、begin→try、rescue→catch、ensure→finallyと読み替えれば、実はほとんど同じ枠組みを持っていることが分かるでしょう。

 ただしRubyの例外処理には、Javaでいうところのthrows節はありません(Rubyにはcatchとthrowというメソッドが存在していますが、これは例外処理とは異なる目的で使われるメソッドです)。

try {
  例外を発生させる可能性のある処理
} catch(Exception ex) {
 例外を捕捉したら実行したい処理
} finally {
 例外の発生の有無にかかわらず実行したい処理
}
<Javaの例外処理の記述例>
begin
 例外を発生させる可能性のある処理
rescue
 例外を捕捉したら実行したい処理
ensure
 例外の発生の有無にかかわらず実行したい処理
end
<Rubyの例外処理の記述例>

 これ以外にも共通する点はありますが、いくつかの典型的な例として、JavaとRubyでよく似ている点を紹介してみました。

 クラス定義、演算子、制御文などが似ているため、簡単な処理であれば、Javaと同じようなコードをRubyで書くことも難しくなさそうに思えますね。

 ですが当然、JavaとRubyには相違点もあります。ここからはいよいよ、JavaとRubyで文法が異なる点を見ていきたいと思います。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。