SHOEISHA iD

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

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

japan.internet.com翻訳記事

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

Javaと比較したRubyの文法

  • X ポスト
  • このエントリーをはてなブックマークに追加

Rubyのコードブロック

 Rubyでは、データの繰り返し処理を行う新たな方法としてコードブロックが用意されています。このコードブロックは、Java言語の制限された繰り返し機能よりもはるかに柔軟で強力な機能です。前述の基本的な文字列操作の例では、stemmer gemを使って英単語が含まれる文字列の語幹を検索しました。次の例では、Stringクラスのsplitメソッドを使って文字列を分割し(区切り文字には空白文字を使用)、コードブロックの始まりと終わりを示す { と } で定義されたコードブロックを渡します({ と } の代わりにbeginとendを使うこともできます)。2つの | で囲まれた文字列はブロック内のローカル変数を表します。

puts "longs trips study studying banking".split(' ')
puts "longs trips study studying banking".split(' ').each 
{|token| puts "#{token} : #{token.stem}"

 このコード例を実行すると、以下の結果が得られます。

longs
trips
study
studying
banking

longs : long
trips : trip
study : studi
studying : studi
banking : bank

 さらに、コードブロックの有効な使用例を以下に示します。この例では、Arrayクラスのcollectメソッドを使用しています。collectメソッドは配列の各要素を処理し、その要素をコードブロックに渡します。

require 'pp'
pp ["the", "cat", "ran", "away"].collect {|x| x.upcase}
pp ["the", "cat", "ran", "away"].collect {|x| x.upcase}.join(' ')

 この例では、コードブロックは要素が文字列であると想定して、各要素のupcaseメソッドを呼び出しています。collectメソッドは収集した結果を新しい配列に返します。また、結果として得られた配列の要素を、空白文字を要素の区切りに設定したjoinメソッドを使って1つの文字列に連結しています。この出力結果は次のようになります。

["THE", "CAT", "RAN", "AWAY"]
"THE CAT RAN AWAY"

コードブロックを使用するメソッドの作成

 yieldメソッドを使うと、メソッドや関数の呼び出しに渡されたコードブロックを呼び出すことができます。次の例では、block_given?メソッドを使って、コードブロックが指定された場合にyieldを呼び出しています。yieldメソッドは出力される値を返します。

def cb_test name
  puts "Code block test: argument: #{name}"
  s = yield(name) if block_given?
  puts "After executing an optional code block, =#{s}"
end

 以下の例ではcb_test関数を2回呼び出していますが、1回目はコードブロックを指定する場合を、2回目はコードブロックを指定しない場合を示しています。

>> puts cb_test("Mark")
Code block test: argument: Mark
After executing an optional code block, =
nil
=> nil
>> puts cb_test("Mark") {|x| x + x}
Code block test: argument: Mark
After executing an optional code block, =MarkMark
nil
=> nil
>>

 文字列値「Mark」は引数としてyieldに渡され、コードブロックの内部でローカル変数xに値「Mark」が割り当てられます。その結果、コードブロックの戻り値は「MarkMark」になります。

Rubyの正規表現

 Rubyでは、組み込みのRegexpクラスを使って正規表現を処理することができます。Javaのjava.util.regex APIも同じような機能を備えていますが、Rubyの正規表現サポートの方が明らかに進んでいます。正規表現オブジェクトは、Regexp.new("[a-e]og")のようなメソッド呼び出しを直接使っても、/[a-e]og/のようなスラッシュで正規表現を囲む形式を使っても作成できます。正規表現とRubyの正規表現サポートについては、よくできたチュートリアルがWeb上でいくつも公開されています。以下に、=~演算子のみを使用した簡単な例を示します。

=> 4
>> "the dog ran" =~ /[a-e]og/
=> 4
>> "the zebra ran" =~ /[a-e]og/
=> nil

Rubyのネットワークプログラミング

 Rubyにはネットワークプログラミング用の標準ライブラリも用意されています。詳しくは、私が執筆した以前の記事を参照してください。私はRubyを使って、インターネットからデータを収集し、そのデータを解析してXMLやデータベースに格納するという作業をよく行います。

次のページ
RubyのFerretライブラリによるドキュメントのインデックス作成と検索

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

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

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

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

Mark Watson(Mark Watson)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1439 2007/07/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング