CodeZine(コードジン)

特集ページ一覧

Java開発者のためのRubyガイド

Javaと比較したRubyの文法

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/07/02 14:00

Rubyはその多様性と柔軟性でJavaを見事に補完してくれます。このような理由から、Javaしか使わないJava開発者に比べ、RubyプログラミングもできるJava開発者の方が、より効率的かつ効果的に開発が行えます。

目次

はじめに

 Java開発者がRubyを学ぶ理由は何でしょうか。Rubyはその多様性と柔軟性でJavaを見事に補完してくれるので、両方の言語を使うことで、より効率的で効果的な開発ができるためです。実際、私は開発にはすべてJava、Ruby、Common Lispを使っていますが、その中でもRubyが開発の中心になりつつあります。特に、Java開発者がRubyを好む理由は次のようなものです。

  • Rubyはスクリプト言語なので、小規模なプロジェクトに向いている。データ変換やテキスト処理用のユーティリティをすばやく作成する必要がある場合、私は必ずと言っていいほどRubyを使用している。
  • Rubyは動的かつシンプルな言語である。
  • Rubyを使うと、違った視点から問題が解決することがよくある。
  • JRubyはまだ開発段階だが、Java VMベースのすぐれたRuby開発プラットフォームとなると思われる。現在、IntelliJ、NetBeans、EclipseのいずれもRubyを強力にサポートしている。
  • 通常、ソフトウェアのメンテナンスはコードの行数に比例してコストが増加するが、Rubyは短く簡潔なプログラムなので、他のプログラムに比べて読みやすく、内容を理解するのもメンテナンスを行うのも簡単である。
  • Ruby on RailsによるWeb開発フレームはバックエンドにデータベースを配置した、中小規模のWebアプリケーションに最適であるが、Ruby on Railsを利用するにはRubyの知識が必要である。

 この記事では、RubyがJava開発者と非常に相性が良い理由を示すために、開発をより効率的にする言語的な特長を紹介し(表1「RubyとJavaの特長の比較」を参照)、両方の言語の短いサンプルプログラムを紹介します。

表1 RubyとJavaの特長の比較
言語機能RubyJava
文字列操作
全クラスの継承final宣言をされたクラスを除く
ダックタイピング不可
ブロックコード不可
正規表現ネイティブサポート標準ライブラリによるサポート
外部プログラムの使用可。ただしRubyほど簡単ではない。
ネットワークプログラム標準ライブラリにおるサポート標準ライブラリによるサポート
型付け動的静的
継承mix-insによる多重継承をサポートシングル

必要なもの

 この記事を読み進めるには、外部のRubyライブラリをインストールする必要があります。RubyGemsライブラリシステムをインストールすると、この作業を簡単に行うことができます。RubyGemsをRubyForgeからダウンロードして、ご使用のオペレーティングシステムのインストール手順に従ってインストールしてください。既にRubyがセットアップされている場合、RubyGemsが含まれているかを確認してください(多くのRubyインストールパッケージにはRubyGemsが含まれています)。インストールされているかを確認するには、コマンドシェルでgemと入力します。ライブラリを一括管理できる保管場所とRubyGemsなどの標準ツールがあれば、必要なライブラリを探し、それをインストールして複数のプロジェクトで使うといった作業が必要なくなり、多くの時間を節約できます。

 以下のコマンドを使って必要なgemsをインストールします。

gem query --remote # if you want to see all available remotely 
                   # installable gems
sudo gem install activerecord
sudo gem install mysql # if you want to use MySQL
sudo gem install postgres-pr # optional: install "pure ruby" 
                             # PostgreSQL interface
sudo gem install postgres # optional: install native PostgreSQL 
                          # interface
sudo gem install ferret # a search library like Lucene (same API)
sudo gem install stemmer # a word stemming library for demonstrating
                         # extending a class
gem query # to show gems locally installed
gem specification activerecord # info on gem 
                               # (ActiveRecord in this example)
編集部注
 上記コマンドにはコメントが記述されていますが、これはコマンドの解説をするために記載されているものであり、実際のコマンド入力時には記述不要です。なお、2行にわたっているコメントがいくつかありますが、これはページの都合によるものであり、原文では1行で記述されています。

 Mac OS XやLinuxでは、sudoを使ってgem installを実行する必要がありますが、Windowsユーザーの場合は最初に「sudo」と入力する必要はありません。

 また、この記事では、次のようにRuby irbシェルを使用します。この記事を読み終えるまでは、Ruby irbシェルを開いたままにしておいてください。

markw$ irb
>> s = "a b c"
=> "a b c"
>>

 サンプルプログラムとコード例は、コピーしてirbインタラクティブセッションに貼り付けることができる程度に短くしています。

Rubyの文字列操作

 RubyのStringクラスには、Javaの文字列操作機能よりも柔軟な数多くの文字列操作用メソッドが用意されています。この節では、Rubyの便利な文字列操作の一部を紹介します。以下のコード例は、文字列の連結、スライスを使った文字列の分割、サブストリングの検索の各操作を示しています(「#」の右側の文字は行末までプログラムコメントになります)。

# use the "pretty print" library. Defines the function 'pp'
require 'pp'

# define some strings to use in our examples:
s1 = "The dog chased the cat down the street"
s2 = "quickly"

puts s1

# a substring slice up to and including character at index==6
puts s1[0..6]
# a substring slice up to (but not including) the character at index==6
puts s1[0...6] 

# expressions inside #{} are inserted into a double quote string
puts "He is a #{s2} dog #{1 + 6} days a week." 

# create a copy of the string: the new copy has white space removed
puts "   test  ".strip  

# string literals can also be formed with single quotes
puts s1 + ' ' + s2 
puts s2 * 4

# find index (zero based) of a substring
puts s1.index("chased") 

# replace a substring (/dog/ -> /giant lizard/)
s1[4..6] = 'giant lizard'  
puts s1

# the << operator, which also works for arrays and other collections,
# copies to then end
s2 = s2 << " now"  
puts s2

puts "All String class methods:"
pp s1.methods # the method "methods" returns all methods for any object

 出力結果は次のようになります。

The dog chased the cat down the street
The dog
The do
He is a quickly dog 7 days a week.
test
The dog chased the cat down the street quickly
quicklyquicklyquicklyquickly
8
The giant lizard chased the cat down the street
quickly now
All String class methods:
["send",
 "%",
 "index",
 "collect",
 "[]=",
 "inspect", ....] # most methods not shown for brevity--try this in irb

 上の例の<<演算子は、実はメソッド呼び出しです。式の評価時、Rubyでは中置演算子はメソッド呼び出しに変換されます。例えば、次のコードの<<演算子は、右側の式の値を左側の式の値に追加します。

>> "123" << "456"
=> "123456"
>> "123".<<("456")
=> "123456"
>> 1 + 2
=> 3
>> 1.+(2)
=> 3

 上の例の「.<<」という書き方は、メソッド呼び出しの標準書式です。

 多くのクラスでは、<<演算子を使ってオブジェクトをクラス固有のコレクションに追加します。例えば、後述のFerret検索ライブラリ(先ほどインストールしたRuby gem)を見ると、インデックスにドキュメントを追加するために<<演算子がどのように定義されているのかが確認できます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

著者プロフィール

  • Mark Watson(Mark Watson)

    Javaコンサルタント。Java、人工知能、C++、知的エージェントに関する書籍を14冊執筆している。

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

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5