継承
JavaでもRubyでも、クラス宣言の際に他のクラスを拡張できます。Javaでは、次のようにextendsキーワードを使用してクラスを拡張します。
public class LinkedHashSet extends HashSet{}
Rubyでは、<を使用してクラスを拡張します。たとえば、ActiveRecord::Baseクラスを拡張するCatalogクラスを宣言するには次のようにします。
class Catalog < ActiveRecord::Base end
RubyでもJavaでも親クラスは1つだけです。Javaでは、抽象メソッドを含む複数のインターフェイスを使用し、各インターフェイスの実装クラスでメソッドを実装するという方法で多重継承を実現できます。Rubyでは、モジュールとmixinによって多重継承が可能になります。
例外処理
Javaでは、例外をtry-catch-finally構造で処理します。これは、1つのtryブロック、任意の数のcatchブロック、また任意で1つのfinallyブロックで構成されます。tryブロックでは、例外が発生する可能性のあるステートメントを実行します。各catchブロックでそれぞれの例外を処理します。任意のfinallyブロックでは、オブジェクトをクローズするステートメントを実行できます。finallyブロックは、必ずアプリケーションがtryブロックを終了した後に実行します。try-catch-finallyブロックの例を次に示します。ここでは、tryブロックでMySQLデータベースとのConnectionオブジェクトを作成し、catchブロックでSQLExceptionを処理し、finallyブロックでConnectionオブジェクトをクローズしています。
Connection connection = null; try { String url= "jdbc:mysql://localhost:3306/test"; connection= DriverManager.getConnection(url, "root",""); } catch (SQLException e) { System.err.println("Caught: SQLException: " + e.getMessage()); } finally { try { connection.close(); } catch (SQLException e) { } }
Rubyでは、例外はbegin-rescue-ensure-end構造で処理します。この構造は、指定の例外が発生したときに実行するステートメントを含んだ任意の数のrescue句から成ります。任意のensure句は、例外が発生してもしなくても常に実行するステートメントを含みます。Rubyのrescue句はJavaのcatch句に相当し、Rubyのensure句はJavaのfinally句に相当します。begin-rescue-ensure構造の例を次に示します。
begin rescue RubyException1 RubyException1が発生したときに実行するステートメント rescue RubyException2 RubyException2が発生したときに実行するステートメント ensure 例外が発生してもしなくても実行するステートメント end
まとめ
RubyはJavaと似ており、Javaと共通の機能もありますが、ONJavaの記事「Ruby the Rival」に書かれているようなJavaの代わりとなる言語ではありません。Java EEが、JavaによるModel-View-Controllerアプリケーション開発向けエンタープライズフレームワークであるように、Ruby on Railsは、RubyのModel-View-Controllerフレームワークです。
