Ruby
Ruby 是一种面向对象、指令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本電腦科學家松本行弘（Matz）设计并开发。
遵守BSD许可证和Ruby License。它的灵感与特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。由Ruby语言本身还发展出了JRuby（Java平台）、IronRuby（.NET平台）等其他平台的Ruby语言替代品。
Ruby的作者－－松本行弘於1993年2月24日開始編寫Ruby，直至1995年12月才正式公開發佈於fj（新聞群組）。之所以稱為Ruby是取法自Perl，因為Perl的發音與6月的誕生石pearl（珍珠）相同，Ruby選擇以7月的誕生石ruby（紅寶石）命名。
Ruby相較之下比其他類似的程式語言（如Perl或Python）年輕，又因為Ruby是日本人發明的，所以早期的非日文資料和程式都比較貧乏，在網上仍然可以找到早期對Ruby的資料太少之類的批評。約於2000年，Ruby開始進入美國，英文的資料開始發展。
2004年，Rails框架誕生，Ruby更加廣為人知，Ruby並於2006年為TIOBE獲選為年度程式語言。
减少编程时候的不必要的琐碎时间，令编写程序的人高兴，是设计Ruby语言的Matz的一个首要的考虑；其次是良好的界面设计。他强调系统设计必须强调人性化，而不是一味从机器的角度设想。 遵循着，Ruby语言通常非常直观，按照编程人认为它应该的方式运行。
Ruby的作者認為Ruby > (Smalltalk + Perl) / 2，表示Ruby是一個语法像Smalltalk一样完全面向对象、脚本執行、又有Perl強大的文字處理功能的程式語言。
Ruby版本号的构成形式是（MAJOR）.（MINOR）.（TEENY），均为只有1位的整数；如“1.8.6”、“1.9.3”。
1.9版系统的TEENY不小于1时为稳定版，TEENY为0的版本是开发版。在1.9之前的版本中偶数MINOR代表稳定版，奇数MINOR代表开发版。
下面是一个在标准输出设备上输出Hello World的简单程序： puts "Hello, world!" 或者是在irb互動式命令列的模式下： »puts "Hello, world!" Hello, world! => nil 乍看之下與Perl的命名規則有些類似，不過Perl的命名用來區分純量、陣列與映射；而Ruby的命名規則用來表示變數與類別的關係。Ruby的變數有以下幾種：
有些函數則會加一個後綴，用來表示函數的用法，跟變數命名規則不同，函數的命名規則只是習慣，不具強制性，即使你不照規則命名也不影響程式運作
Ruby提供了多種字串的表示方法，方便撰寫有大量文字資料的程式。除了来自C语言的引号表示法之外，还有来自于Perl的百分号字面量记法，以及方便书写大量内容的Heredoc记法。Ruby可以方便地以codice_8的方式向字符串中插入变量。 a = '\n这是一个单引号的字符串，反斜线和变量插值不会被转义'
c = "\n这是一个双引号的字符串，反斜线和变量插值会被转义\n#{a}"
e = «BLOCK 这是一个以Heredoc方式书写的常量字符串，可转义，结尾标志不可缩进 BLOCK
f = «-BLOCK
g = «~BLOCK
h = %/\t这是一个可转义的的字符串\n/ Ruby是动态语言，你可以在程序中修改先前定义过的類別。 也可以在某个类別的实例中定义该实例特有的方法，这叫做原型方法（prototype）。
class MyClass end
mc = MyClass.new def mc.the_method end
mc.the_method Ruby的反射功能相當驚人，甚至可以自行追蹤程式運作，或是取出private變數、攔截方法的呼叫。 常常與『可以動態的修改物件』這項特色結合，做為『元編程』的功能：程式在運行時， 可以由程式設計師提供的資訊，自行生成、修改類別或物件，這項功能大大的提高了撰寫程式碼的效率。 在Rails之中，就大量使用了這種特性。
以下為用Rails使用元編程的範例： class Project < ActiveRecord::Base end
在這個例子中，codice_9類別繼承codice_10類別，codice_10類別內建的codice_12、codice_13、codice_14方法，便會根據參數來修改Project類別的內容，並自行建立其他相關的方法。程式設計師可以更專心處理程式的運作，而不必為每個類別重複得撰寫程式碼。
for outer_i in 1..3 do  puts "for: #{outer_i * 100}" end
(1..3).each do |i| end
outer_i = 100 while outer_i <= 300 end
outer_i = 100 until outer_i > 300 end
outer_i = 100 loop do
end
3.times do |i| end
1.upto(3) do |i| end
3.downto(1) do |i| end
100.step(300, 100) do |i| end 下面的代码可以在Ruby shell中运行，比如irb互動式命令列，或者保存为文件并运行命令codice_26。
-199.abs # 199 "ruby is cool".length # 12 "Rick Astley".index("c") # 2 "Nice Day Isn't It?".downcase.split(//).sort.uniq.join # " '?acdeinsty" puts "What's your favorite number?" number = gets.chomp outputnumber = number.to_i + 1 puts outputnumber.to_s + ' is a bigger and better favorite number.' a = [1,'hi', 3.14, 1, 2, [4, 5]]
p a[2] # 3.14 p a.[](2)# 3.14 p a.reverse # [[4, 5], 2, 1, 3.14, 'hi', 1] p 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| # Or: hash.each do |key, value| puts "#{key} is #{value}" endhash.delete :water # Deletes :water => 'wet' hash.delete_if {|k,value| value=='hot'} # Deletes :fire => 'hot' { puts "Hello, World!" } # Note the { braces } do puts "Hello, World!" end def remember(&a_block)  @block = a_block end
remember {|name| puts "Hello, #{name}!"}
@block.call("Jon") def create_set_and_get(initial_value=0) # Note the default value of 0 end
setter, getter = create_set_and_get # ie. returns two values setter.call(21) getter.call # => 21 def use_hello end
use_hello {|string| puts string} # => 'hello' array = [1, 'hi', 3.14]像inject()方法可以接收一个参数和一个-{zh-hans:块; zh-hant:區塊}-。迭代的注入列表的每一个成员，执行函数时保存总和。这同[[函数编程语言]]中的foldl函数相类似，比如： [1,3,5].inject(10) {|sum, element| sum + element} # => 19 首先-{zh-hans:块; zh-hant:區塊}-接收到了10（inject的参数）当作变量sum，并且1（数组的第一个元素）当作变量element；这会返回11。11又被当作下一步的sum变量，它加上3得到了14。14又被加上了5，最终返回结果19。
File.open('file.txt', 'w') do |file| # 'w' denotes "write mode". end # File is automatically closed here
File.readlines('file.txt').each do |line| puts line end (1..10).collect {|x| x*x} # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 下面的代码定义一个命名为Person的-{zh-hans:类; zh-hant:類別}-。含有一个「initialize」方法，用于构选创建一个新对象，它还有两个方法，一个重载了<=>比较运算符（这样codice_27可以使用age排序）另一个重载了codice_28方法（这样codice_29可以格式化输出），codice_30是Ruby中元数据编程的例子：codice_31为实例变量定义了getter和setter方法，codice_30只是一个getter方法。另外，方法中最后的声明是它的返回值，也允许显式的使用「return」语句。 class Person end
group = [
puts group.sort.reverse Bob(33) Ash(23) Chris(16) [[Matz's Ruby interpreter]], 最初也是最常見的Ruby版本, 簡稱MRI, 用C語言撰寫.
[[JRuby]]，類似[[Python]]的[[Jython]]，一個可於[[Java]]上執行Ruby的語言，支援Java的介面和類別。最新發布版爲9.1.6.0（2016-11-09），與Ruby 2.3兼容。它的官方網站為jruby.org。
[[mruby]]是一个轻量级的Ruby解释器，可以嵌入到其它应用程序中，或者作为库链接到应用中。 [[Category:Ruby| ]] [[Category:程序设计语言]] [[Category:腳本語言]] [[Category:面向文本编程语言]] [[Category:面向对象的编程语言]] [[Category:基于类的编程语言]] [[Category:ISO标准化编程语言]] [[Category:1995年建立的程式語言]]