|
事業仕分けによる次世代スーパーコンピューターの開発予算削減について、どうお考えですか?
|
JavaとRuby:主要機能の比較はじめに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' 外部ファイルをRubyアプリケーションに含めるには、
require "catalog.rb"
Javaでは、
import java.sql.*;
型付き変数RubyでもJavaでも厳密な型指定を行いますが、Rubyの変数の型指定は動的です。これはつまり、変数の型を明示的に関連付けられないということです。たとえば、文字列値を持つ変数は次のように宣言します。
str="Hello Ruby"
この str=1 Javaの変数の型指定は静的であり、変数に型を関連付けることができます。たとえば、文字列変数は次のように宣言します。
String str="Hello Java";
この null値 Rubyでは、null値は
str=nil
Javaでは、null値は
str=null;
オブジェクト指向 Rubyでは、数値、変数、メソッドなどすべてがオブジェクトです。Javaでは、クラスのみがオブジェクトになります。たとえば、
Class1 class1=new Class1();
メンバ変数 Rubyでは、メンバ変数はすべてプライベートです。Javaでは、メンバ変数はデフォルトでパッケージアクセスとなり、 キャスト Javaでは、ある条件を満たす場合に、オブジェクトを他のオブジェクトにキャストできます。その条件とは、「キャストしようとするオブジェクトの型が、キャスト先オブジェクトの型の拡張である」というものです。たとえば、 HashSet hashSet=(HashSet)linkedHashSet; Rubyでは、変数の型指定が動的に行われ、任意の他の型に代入できるので、キャストは使用しません。 クラスとメソッドの定義 Rubyでは、クラスとメソッドのブロックを class Catalog end Rubyのクラス名は先頭を大文字にする必要があります。Javaのクラスも、
class Catalog{
}
Rubyでは、クラスの宣言にアクセス修飾子は使用しませんが、Javaでは、クラスに public class Catalog{ } Rubyのメソッドは、 def getCatalogId return 1 end デフォルトでは、Rubyのメソッドはパブリックです。Rubyのメソッドには、
int getCatalogId(){return 1;}
Javaのメソッドには class Hello def hello(name) return "Hello " +name end end この helloObj=Hello.new helloObj.hello("John") helloObj.hello "John" Javaでは、メソッド呼び出しの丸括弧は必須です。たとえば、Helloメッセージを返す public class Hello{ public String hello(String name){ return "Hello "+ name; } } この Hello helloObj=new Hello(); helloObj.hello("John"); クラスのコンストラクタ Javaでは、クラス名がコンストラクタになります。たとえば、 public class Hello{ String defaultMsg; public Hello(String msg){ defaultMsg=msg; } } このコンストラクタは、String型変数 class Hello @defaultMsg def initialize(msg) @defaultMsg=msg end end クラスのインスタンス化 Rubyでは、クラスをインスタンス化するときにクラスメソッド
hello=Hello.new("Hello Ruby")
Hello hello=new Hello();
Hello hello=new Hello("Hello Java"); Javaでは複数のコンストラクタを宣言できますが、Rubyのクラスに含めることのできる 継承 JavaでもRubyでも、クラス宣言の際に他のクラスを拡張できます。Javaでは、次のように public class LinkedHashSet extends HashSet{} Rubyでは、 class Catalog < ActiveRecord::Base end RubyでもJavaでも親クラスは1つだけです。Javaでは、抽象メソッドを含む複数のインターフェイスを使用し、各インターフェイスの実装クラスでメソッドを実装するという方法で多重継承を実現できます。Rubyでは、モジュールとmixinによって多重継承が可能になります。 編集部注
原文では、この後にRubyのモジュールによるmixinの説明がありましたが、説明内容が不正確・不適切と判断したため、割愛しました。
例外処理 Javaでは、例外を 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 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フレームワークです。 著者紹介Deepak Vohra(Deepak Vohra)
O'Reillyの技術レビュー担当者として『WebLogic: The Definitive Guide』を担当。NuBeanコンサルタント、Web開発者でもある。Sun認定資格(Java 1.4プログラマおよびWebコンポーネントディベロッパJ2EEバージョン)を取得。メールの宛先はdvohra09@yahoo.com。
|
japan.internet.com 10周年記念
インターネットコムマーケティングセミナー ROI を最適化するパフォーマンスマーケティングの最前線 【12/16(水)13時〜 東京・赤坂】 申込はコチラ>>
|