Ruby

出典: フリー教科書『ウィキブックス(Wikibooks)』
移動: 案内検索

Rubyはプログラミングを楽しむための言語です。 プログラミングが初めての方から、経験を積んだエキスパートの方まで、全ての人にお勧めします。 きっとあなたもRubyを知れば、人に教えてあげたくなりますよ。

準備[編集]

まずはRubyインタープリタを用意しましょう。 インタープリタとは、あなたが書いたプログラムを読んでそれを実行してくれるソフトウェアです。 Rubyの公式Webページ[1]の「ダウンロード」ページから、 それぞれの環境に合ったインタープリタをダウンロードして下さい。 どうすれば分からない方は、同ページの「インストールガイド」を参照して下さい。 準備ができたら、試しにコマンドラインからインタープリタを呼び出してみましょう。

% ruby --version
ruby 1.8.5 (2006-08-25)[i486-linux]

ちゃんと表示されましたか?それではいよいよRubyを始めましょう。

Hello, World![編集]

他のたくさんのプログラミングマニュアルがそうであるように、 私たちもまずはRubyの世界にあいさつすることから始めましょう。 helloworld.rbというファイルを作り(Rubyではプログラムファイルに.rbという拡張子を付けることが通例となっています)、次のように書いて保存して下さい。

# helloworld.rb
s = 'Hello, World!'
puts s

それではこのプログラムを実行してみましょう。コマンドラインから次のようにタイプして下さい。

% ruby helloworld.rb
Hello, World!
%

ちゃんと表示されましたか?これで最初のプログラミングは終了です。

まずは1行目。この行は#で始まっています。これは#以降がコメントであるというしるしです。 インタープリタは#がプログラムに現れると、その行の#以降を読み飛ばします。 CやC++、JAVAにおける//と同じ働きですね。

次に2行目を見てください。 ここではsという変数に、Hello, Worldという文字列を代入しています。 Rubyでは、多くの他の言語と違って変数の型を宣言する必要がありません。 文字列の表現に"ではなく'を使っている理由については後で説明します。

そして3行目ではputsというメソッドが使われています。 putsは引数の値を出力して、その後に改行を出力します。 ここではsという変数の値、すなわち文字列Hello, World!を出力し、最後に改行してくれています。 自動で改行したくないときには、printを使います。

# helloworld.rbと同じ動作をする
s1 = 'Hello'
s2 = ', '
s3 = 'World!'
print s1
print s2
puts s3

文字列は+というメソッドを使って連結することができます。

# helloworld.rbと同じ動作をする
s1 = 'Hello'
s2 = ', '
s3 = 'World!'
puts s1 + s2 + s3

また、putsやprintといったメソッドは、,(コンマ)で区切っていくつでも引数を取ることができます。 極端な話、全く引数を取らなくてもよいのです。

# helloworld.rbと同じ動作をする
s1 = 'Hello'
s2 = ', '
s3 = 'World!'
print s1, s2, s3
puts

この例ではputsは何も仕事をしていないと思いましたか?それは違います。 putsは何も引数を取らなくても、改行をしてくれているのです。 putsとprintの違い、分かってもらえたでしょうか。

irb[編集]

Pythonperl -de 1と同様、Rubyにもirbというインタラクティブな実行環境があります。シェルからirbを実行するとコマンドインタプリタが起動します。

% irb
irb(main):001:0> puts "Hello, world!"
Hello, world!
=> nil
irb(main):002:0> 

times[編集]

n.times{CODE}はnCODEを実行せよというメソッドです。nは整数です。

3.times{ puts 'Hello, world!' }

この例ではHello, world!を3回表示します。

lambda[編集]

無名関数を定義するにはlambda文を使用します。proc文も同義ですが、proc文はバージョンによって挙動が変わるので論外です。Proc.newはreturnの扱いが異なりますが、あまり使いません。

> lambda {|x, y| x + y }[2, 3]
5

lambdaが返すProcオブジェクトにアクセスするにはブラケットを使用します。callメソッドを呼んでも同じことです。

範囲演算子[編集]

範囲を発生させるには..演算子を使用します。eachメソッドはforeach文にあたるブロック付きメソッド呼び出しのイテレータです。

> (0..9).each {|x| p x }
0
1
2
3
4
5
6
7
8
9
=> 0..9

pメソッドはputsと同様ですがより内部的な出力をし、デバッグ用に用いられます。

> puts "Hello, world!"
Hello, world!
=> nil
> p "Hello, world!"
"Hello, world!"
=> nil

nilというのはnullです。

HTTPクライアント[編集]

open-uriを使用すると簡単ですが、より高度なインタフェースが必要な場合はNet::HTTPを使用します。

> require 'open-uri'
> puts open('http://www.example.com/').read

open-uriは組み込みのopenメソッドをオーバーライドします。ワンライナーで書くこともできます。

% ruby -ropen-uri -e 'puts open(ARGV.shift).read' http://www.example.com/

ARGVはコマンドライン引数の配列、Array#shiftメソッドは最初の要素を取り出します。

このページ「Ruby」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。