CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Ruby - Wikipedia

Ruby

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Disambiguation"ルビー" のその他の用法についてはルビー (曖昧さ回避)をご覧ください。
Ruby
Rubyロゴ
パラダイム: オブジェクト指向プログラミング
登場時期: 1995年
設計者: まつもとゆきひろ
最新リリース: 1.8.5 / 2006年8月25日
型付け: 強い動的型付けダック・タイピング
主な処理系: Ruby、JRuby
影響を受けた言語: SmalltalkLispPerlPython
影響を与えた言語: Groovy
ライセンス: RubyライセンスまたはGPL
ウェブサイト: www.ruby-lang.org

Rubyルビー)は、まつもとゆきひろ(通称Matz)により開発されたオブジェクト指向スクリプト言語であり、従来Perlなどのスクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。Rubyは当初1993年2月24日に生まれ、1995年12月にfj上で発表された。名称のRubyは、プログラミング言語Perlが6月の誕生石であるPearl(真珠)とほぼ同じ発音をすることから、まつもと氏の同僚の誕生石(7月)のルビーを取って名付けられた。

Rubyはクラス定義ガベージコレクション、強力な正規表現処理、マルチスレッド例外処理イテレータクロージャ、Mixin、演算子オーバーロードなどの機能を持つ。Perlの代替となることができることが初期の段階から重視されている。Perlと同様にグルー言語としての使い方が可能で、Cプログラムやライブラリを呼び出す拡張モジュールを組み込むことができる。

Ruby処理系はインタプリタとして実装されている(実験的にはJIT方式による実行時コンパイルも試みられている)。

Rubyの構文は、ALGOL系を継承しながら、可読性を重視している。Rubyにおいては整数や文字列なども含めデータ型はすべてがオブジェクトであり、純粋なオブジェクト指向言語といえる。

Rubyはフリーソフトウェアとして(GPLあるいはArtisticに似た独自ライセンス)で配布されている。

目次

[編集] Ruby哲学

Rubyの作者 まつもとゆきひろ は、Rubyの言語仕様策定においてもっとも重視しているのはストレスなくプログラミングを楽しむこと (Enjoy programming) であると述べている。Perlのモットー「やり方はいろいろある (TMTOWTDI; There's More Than One Way To Do It)」は「多様性は善(Diversity is Good)」というスローガンでRubyに引き継がれてはいるものの、最重要なものではないとも述べており、非推奨な手法も可能とすると同時に、そのような手法を言語仕様的に使いにくくする事によって、自粛を促しているため洗脳言語(Babel-17)という側面がある。かつてはRubyの言語仕様を「驚き最小化原則」— プログラマの予測に反するような例外的な振る舞いや、言語仕様上のトリッキーな部分をなるべく排除すること — と表現していたが、拡大解釈されがちなので今ではスローガンから外されている。

[編集] 実装

Rubyには主として2つの実装がある。1つは公式のRubyインタプリタで、最も広く使われている。もう1つはJavaベースの実装でJRubyという名称である。Rubyインタプリタは多くのプラットフォームに移植されている。具体的にはUNIXLinuxMicrosoft WindowsMS-DOSMac OS XOS/2Amigaなどである。JRubyも実装が純粋なJavaで行われているために、プラットフォーム非依存の利用が可能で、かつほとんどのRubyクラスが組み込みで提供されている。

[編集] 競合言語としてのPython

プログラミング言語としてのRubyは大雑把に言うと「Perlのオブジェクト指向版」、つまりインタプリタで実行する高機能なスクリプト言語でありオブジェクト指向機能を持つもの、と位置づけることができるが、この位置付けはスクリプト言語Pythonと同じである。このことがそれぞれの言語のユーザ同士の間で「どちらの言語が優れているか」といった論争を生んできた。しかしその論争は技術的な細部にとらわれた不毛なフレームになることも多かった。

ここであえて両者の細部を比較はしないが、ユーザ数や書かれたシステムの数量・質などを現時点で比べると世界的にはPythonの方が人気が高い。一方、日本では開発者が日本人であることもあり、Rubyの人気は高く書籍も多く出版されている。とはいえ2004年前後まで圧倒的なキラーアプリがなく、tDiaryバグトラッキングシステム「影舞」程度しか知られていなかったため、大きな普及には至らなかった。ところが2004年末に発表され2005年に大ブレイクしたRuby on Railsにより一気に注目を集めている。

[編集]

基本的なコード:

# 文字リテラルを含め全てがオブジェクトである:
-199.abs                                       # 199
"ruby is cool".length                          # 12
"Rick".index("c")                              # 2
"Nice Day Isn't It?".split(//).uniq.sort.join  # " '?DINaceinsty"

[編集] コレクション

配列の作成と使用法:

a = [1, 'hi', 3.14, 1, 2, [4, 5]]

a[2]                      # 3.14
a.reverse                 # [[4, 5], 2, 1, 3.14, 'hi', 1]
a.flatten.uniq            # [1, 'hi', 3.14, 2, 4, 5]

ハッシュの作成と使用法:

hash = {'water' => 'wet', 'fire' => 'hot'}
puts hash['fire']       # Prints:  hot

hash.each_pair do |key, value|
  puts "#{key} is #{value}"
end

# 表示:               water is wet
#                     fire is hot

hash.delete_if {|key, value| key == 'water'}   # Deletes 'water' => 'wet'

[編集] ブロックとイテレータ

ブロックの生成には二つの方法がある:

{ puts "Hello, World!" }
do puts "Hello, World!" end

ブロックを引数として扱う(クロージャと見なせる):

def remember(&p)
  @block = p
end
# ブロックを引数としてメソッドを起動するとnameに値を取って帰ってくる。
remember {|name| puts "Hello, " + name + "!"}

# 間をおいてクロージャを呼び出す!
@block.call("John")
# 表示:"Hello, John!"

次のコードはPythonのクロージャの項目をデモしたものである。

def foo(initial_value = 0)
  var = initial_value
  return Proc.new {|x| var = x}, Proc.new { var }
end

setter, getter = foo
setter.call(21)
getter.call # => 21

ブロックへ値を生成(yield)する場合その呼び出し位置で与えられる。

 def bfs(e)
   q = []
   e.mark
   yield e
   q.push e
   while not q.empty?
     u = q.shift
     u.edge_iterator do |v|
     if not v.marked?
       v.mark
       yield v
       q.push v
     end
   end
 end
 bfs(e) {|v| puts v}

ブロックを使用しての列挙や配列のイテレーション

a = [1, 'hi', 3.14]
a.each {|item| puts item}          # 各要素を表示
(3..6).each {|num| puts num}       # 3番目から6番目まで表示

ブロックは多数の組み込みメソッドがある:

File.open('file.txt', 'w+b') do |file|
  file.puts 'Wrote some text.'
end                             # Fileはここで自動的にcloseされる

または

IO.readlines('file.txt') do |line|
  # ここで何らかの処理
end

列挙とブロックを使って2乗を求める:

(1..10).collect {|x| x*x}    => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

[編集] クラス

次のコードはPersonという名前のクラスである。その中、まずinitializeはオブジェクトを初期化するコンストラクタである。ほかに2つのメソッドがあり、1つは比較演算子である<=>オーバーライドしておりArray#sortによりプロパティageでソートすることができる。もう1つのオーバーライド箇所のto_sメソッドは Kernel#puts での表示の形式を整える。attr_readerはRubyにおけるメタプログラミングの例であり、attr はインスタンス変数の入出力を司るgetterやsetterメソッドを定義する。attr_readerはgetterメソッドのみの定義である。なおメソッド中では最後に評価された式が返り値となり、明示的なreturnは省略できる。

class Person
  def initialize(name, age)
    @name, @age = name, age
  end

  def <=>(person)
    @age <=> person.age
  end

  def to_s
    "#{@name} (#{@age})"
  end

  attr_reader :name, :age
end

group = [ Person.new("John", 20),
          Person.new("Markus", 63),
          Person.new("Ash", 16)
        ]

puts group.sort.reverse

結果は3つの名前が年の大きい順に表示される:

Markus (63)
John (20)
Ash (16)

[編集] 例外

例外はなにか不具合が起こったときraiseの呼び出しで発生させることができる:

例外にはメッセージを追加することもできる:

raise "This is a message"

さらに例外のタイプも指定できる:

raise ArgumentError, "Illegal arguments!"

例外はrescue節で処理することができ、次のようにコードにrescueを付加するだけである:

begin
  # 通常処理
rescue
  # 例外処理
end

[編集] Rubyの周辺技術

  • 分散オブジェクトを実現するdRuby
  • Apache HTTP Serverに組み込むためのmod_ruby
  • HTMLへの埋め込みRuby文を実現するeRuby
  • Rubyスクリプトに埋め込むことができる文書形式RD
  • RubyによるRDを採用したWikiクローン、RWiki
  • RubyからSDLライブラリを扱えるようにするRuby/SDL
  • RubyからDelphiを扱えるようにするApollo
  • RubyによるWebアプリケーションフレームワークRuby on Rails
  • Rubyの別の処理系であるYARV(Yet another RubyVM)
  • Rubyの統合開発環境RDE(Ruby Development Environment)
  • RubyのコードをWindowsの実行形式ファイルに変換するExerb
  • Ruby用のライブラリ管理システムであるRubyGems

[編集] Rubyを使ったアプリケーション

[編集] 参考文献

  • 『プログラミングRuby—達人プログラマーガイド』デビット トーマス、アンドリュー ハント、まつもと ゆきひろ - ISBN 4894714531
  • 『たのしいRuby Rubyではじめる気軽なプログラミング』高橋征義、後藤裕蔵、まつもとゆきひろ(ソフトバンクパブリッシング):プログラム未経験者向けの入門書 - ISBN 4797314087
  • 『オブジェクト指向スクリプト言語 Ruby』まつもとゆきひろ、石塚圭樹 - ISBN 4756132545

[編集] 外部リンク

Wikimedia Commons
ウィキメディア・コモンズに、Rubyに関連するカテゴリがあります。
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com