SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

JavaとRuby:主要機能の比較

JavaとRubyにおける記述方法の違い

オブジェクト指向

 Rubyでは、数値、変数、メソッドなどすべてがオブジェクトです。Javaでは、クラスのみがオブジェクトになります。たとえば、Class1型のオブジェクトは次のようにして作成します。

Class1 class1=new Class1();

メンバ変数

 Rubyでは、メンバ変数はすべてプライベートです。Javaでは、メンバ変数はデフォルトでパッケージアクセスとなり、publicprivateprotectedの各識別子を使用してパブリック、プライベート、プロテクトとして宣言できます。プライベートメンバにはそのクラス自体の内部からのみアクセスできます。Javaのパブリックメンバには他のどのクラスからもアクセスできます。Javaのプロテクトメンバには、クラスがそのメンバを宣言しているのと同じパッケージの内部およびそのクラスのサブクラスの内部からアクセスできます。Javaのデフォルトパッケージアクセスでは、クラスがそのメンバを宣言しているのと同じパッケージの内部およびそのクラス自体の内部からアクセスできます。

キャスト

 Javaでは、ある条件を満たす場合に、オブジェクトを他のオブジェクトにキャストできます。その条件とは、「キャストしようとするオブジェクトの型が、キャスト先オブジェクトの型の拡張である」というものです。たとえば、LinkedHashSet型のオブジェクトlinkedHashSetHashSet型にキャストできます。LinkedHashSet型はHashSet型の拡張であるためです。

HashSet hashSet=(HashSet)linkedHashSet;

 Rubyでは、変数の型指定が動的に行われ、任意の他の型に代入できるので、キャストは使用しません。

クラスとメソッドの定義

 Rubyでは、クラスとメソッドのブロックをendキーワードで区切ります。Javaでは、クラスとメソッドのブロックを中括弧{}で区切ります。たとえば、RubyでCatalogというクラスを定義するには、class修飾子を使用して次のように記述します。

class Catalog

end

 Rubyのクラス名は先頭を大文字にする必要があります。Javaのクラスも、class修飾子を使用して定義し、名前の先頭を大文字にする必要があります。

class Catalog{
}

 Rubyでは、クラスの宣言にアクセス修飾子は使用しませんが、Javaでは、クラスにpublicアクセス修飾子を指定でき、デフォルトのクラスアクセスはパッケージレベルになります。たとえば、JavaではCatalogというクラスを次のように宣言できます。

public class Catalog{

}

 Rubyのメソッドは、defで開始し、endで終了します。たとえば、getCatalogIdというメソッドを次のように定義できます。

def getCatalogId
  return 1
end

 デフォルトでは、Rubyのメソッドはパブリックです。Rubyのメソッドには、publicprivateprotectedの修飾子を指定できます。Rubyのメソッドでは値を返すことができますが、メソッド定義で戻り値の型は指定しません。Javaのメソッドはデフォルトでパッケージアクセスになり、戻り値の型を指定する必要があります。たとえば、JavaではgetCatalogIdメソッドを次のように宣言できます。

int getCatalogId(){return 1;}

 Javaのメソッドにはpublicprivateprotectedの修飾子を指定できます。Rubyでは、メソッド呼び出しに丸括弧を使用するかどうかは任意です。たとえば、引数nameを受け取ってHelloメッセージを返すhelloというメソッドを定義したとします。

class Hello
  def hello(name)
    return "Hello " +name
  end
end

 このhelloメソッドを呼び出すときに、次のように丸括弧を付けることも付けないこともできます。

helloObj=Hello.new
helloObj.hello("John")
helloObj.hello "John"

 Javaでは、メソッド呼び出しの丸括弧は必須です。たとえば、Helloメッセージを返すhelloというメソッドを定義したとします。

public class Hello{

public String hello(String name){

    return "Hello "+ name;

}

}

 このHelloクラスのhelloメソッドを呼び出すときは、引数を囲む丸括弧を省略できません。

Hello helloObj=new Hello();
helloObj.hello("John");

クラスのコンストラクタ

 Javaでは、クラス名がコンストラクタになります。たとえば、Helloというクラスを定義し、そのクラスのコンストラクタを定義します。

public class Hello{
    String defaultMsg;
    public Hello(String msg){
        defaultMsg=msg;
    }
}

 このコンストラクタは、String型変数defaultMsgの値を設定します。Rubyでは、クラスのインスタンス化はinitialize関数で行います。たとえば、クラスを定義し、そのクラス内で変数をインスタンス化するには、次のようにinitialize関数を使用します。

class Hello
  @defaultMsg
  def initialize(msg)
    @defaultMsg=msg
  end
end

クラスのインスタンス化

 Rubyでは、クラスをインスタンス化するときにクラスメソッドnewを使用します。たとえば、前の例のHelloクラスは次のようにしてインスタンス化できます。

hello=Hello.new("Hello Ruby")

 newメソッドに渡した引数はinitialize関数に渡されます。Javaでは、クラスのインスタンス化にJava演算子newを使用します。

Hello hello=new Hello();

 new演算子は、クラス内で定義したどのコンストラクタにも使用できます。たとえば、String型の引数を受け取りデフォルトのHelloメッセージを設定するコンストラクタがHelloクラスにある場合、このクラスは次のようにしてインスタンス化できます。

Hello hello=new Hello("Hello Java");

 Javaでは複数のコンストラクタを宣言できますが、Rubyのクラスに含めることのできるinitializeメソッドは1つのみです。Rubyで複数のinitializeメソッドを宣言しても例外は発生しませんが、その場合使用されるのは最後のinitializeメソッドのみです。

次のページ
継承

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Deepak Vohra(Deepak Vohra)

O'Reillyの技術レビュー担当者として『WebLogic: The Definitive Guide』を担当。NuBeanコンサルタント、Web開発者でもある。Sun認定資格(Java 1.4プログラマおよびWebコンポーネントディベロッパJ2EEバージョン)を取得。メールの宛先はdvohra0...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2144 2008/04/11 19:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー