はじめに
Rubyはインタプリタによって解釈されるスクリプト言語で、Javaはコンパイラによってコンパイルされるプログラミング言語です。Rubyは、オブジェクト指向言語であり厳密な型指定を行うという点ではJavaに似ています。しかし、Rubyの型指定は動的であるのに対し、Javaの型指定は静的です。Rubyでは型宣言は使用されず、Javaでは型宣言は必須です。JavaとRubyのどちらにも継承があり、"パブリック"、"プライベート"、"プロテクト"のメソッドがあります。RubyはJavaより単純でJavaより高速です。Rubyはさまざまな点でJavaと異なっています。本稿では、RubyとJavaの主要機能を比較します。
インタプリタ方式とコンパイラ方式
Rubyはインタプリタ方式のスクリプト言語なので、コンパイルしてバイトコードを生成することなく、直接実行できます。たとえば、Rubyファイル「helloruby.rb」は、次のコマンドで実行できます。
>ruby helloruby.rb
これに対し、Javaアプリケーションは実行前にコンパイルする必要があります。たとえば、Javaクラス「hellojava.java」は、次のコマンドでjavacコンパイラを使ってコンパイルする必要があります。
>javac hellojava.java
javacコンパイラは、Javaクラスのバイトコードを生成します。その結果、コンパイルしたクラスはjava.exeアプリケーションを使用して実行できるようになります。
>java hellojava
パッケージのインポート
Rubyでは、requireステートメントを使用してパッケージやモジュールをインポートします。たとえば、extensionsパッケージ/モジュールをインポートするには次のようにします。
require 'extensions'
外部ファイルをRubyアプリケーションに含めるには、loadまたはrequireを使用します。たとえば、外部ファイル「catalog.rb」を含めるには、次のrequireステートメントを追加します。
require "catalog.rb"
loadとrequireの違いは、loadがメソッド実行のたびに指定のRubyファイルを含めるのに対し、requireはそのRubyファイルを一度だけ含める点です。
Javaでは、importステートメントを使用してパッケージをロードします。たとえば、Javaパッケージ「java.sql」をロードするには次のようにします。
import java.sql.*;
型付き変数
RubyでもJavaでも厳密な型指定を行いますが、Rubyの変数の型指定は動的です。これはつまり、変数の型を明示的に関連付けられないということです。たとえば、文字列値を持つ変数は次のように宣言します。
str="Hello Ruby"
このstr変数には特定の型が関連付けられていないので、整数型その他の型の値を代入できます。
str=1
Javaの変数の型指定は静的であり、変数に型を関連付けることができます。たとえば、文字列変数は次のように宣言します。
String str="Hello Java";
このstr変数に整数値を代入することはできません。
null値
Rubyでは、null値はnilで宣言します。たとえば、変数strにnil値を代入するには次のようにします。
str=nil
Javaでは、null値はnullで宣言します。たとえば、変数strにnull値を代入するには次のようにします。
str=null;
