Rubyを勉強する会

オブジェクト指向スクリプト言語 Rubyが楽しそうである.
学ぶには他人に教えまくれ(経験則)ということで,僕が仕入れた知識をゼロから書き溜めていこうと思う.
沢山間違えますので沢山指摘してください.

・インストール

$ sudo apt-get install ruby

・Hello world!
putsはCのprintとかPascalのwriteln.
printfとかwriteにあたるのは,printf.

[ruby]#!/usr/bin/ruby
puts( ‘Hello, world!’ )[/ruby]

$ ruby test.rb
Hello, world!

・足し算
[ruby]#!/usr/bin/ruby
suuji = 1 + 1
puts( suuji )[/ruby]

$ ruby test.rb
2

しかしこれは1の+というメソッドのシンタックスシュガーを用いた表記であり,Ruby的には1+1は

suuji = 1.+(1)

らしい.前の1は整数クラスで,括弧内の1は+の引数らしい.そらたいへんだ.

・割り算
[ruby]#!/usr/bin/ruby
suuji = 5 % 3 # mod,あまりですな
puts( suuji )

suuji = 5 / 3 # 両方整数のときは整数割り算,商ですな
puts( suuji )

suuji = 5.0 / 3 # 少なくとも片方が実数の時は,実数割り算
puts( suuji )

suuji = 5.to_f / 3 # 5を浮動小数点に型変換して実数割り算
puts( suuji )[/ruby]

$ ruby test.rb
2
1
1.66666666666667
1.66666666666667

・文字列
文字列のn倍
[ruby]#!/usr/bin/ruby
moji = ‘hoge’
puts( moji * 2 )[/ruby]

$ ruby test.rb
hogehoge

追記も簡単
[ruby]#!/usr/bin/ruby
moji = ‘hoge’
moji = moji << 'penguin' puts( moji )[/ruby]


$ ruby test.rb
hogepenguin

・配列操作
配列はポインタの集合である.
[ruby]#!/usr/bin/ruby
clan = ‘team2ch’
arr = [clan, clan]
puts( arr )
clan[4] = ‘3’
puts( arr )[/ruby]

$ ruby test.rb
team2ch
team2ch
team3ch
team3ch

型が違う要素からなる配列を作れる.正確に言えば,配列のポインタが各々,実体の違うオブジェクトを指している.
[ruby]#!/usr/bin/ruby
suuji = 1
text = ‘hoge’
str = [suuji, text]
puts( str )[/ruby]

$ ruby test.rb
1
hoge

配列の足し算
[ruby]#!/usr/bin/ruby
str_a = [1, 2]
str_b = [3, 4]
puts( str_a + str_b )[/ruby]

$ ruby test.rb
1
2
3
4

配列のn倍
[ruby]#!/usr/bin/ruby
suuji = 1
chr = ‘hoge’
str = [suuji, chr]

str = str * 2
puts( str )[/ruby]

$ ruby test.rb
1
hoge
1
hoge

・イテレータ
forみたいなもの.
[ruby]#!/usr/bin/ruby
str = [1, 2, 3, 4]
str.each do |i|
puts( i * 10 )
end[/ruby]

$ ruby test.rb
10
20
30
40

・変数の種類
変数名の先頭1文字で判断している.先頭が小文字ならローカル変数(例:team),先頭が$ならグローバル変数(例:$team).
関数ごとにvarを宣言したりせず,変数ごとに宣言(のようなこと)をするらしい.

・真偽
nilとfalseだけが「偽」らしい.具体的な値や文字列も「真」.
[ruby]#!/usr/bin/ruby
if 0 then
puts( ‘0 is true.’ )
end[/ruby]

$ ruby test.rb
0 is true.

なんか不思議である.

・条件その1
if文は値を返す.if文の値は最後の式の値.

[ruby]#!/usr/bin/ruby
(0..2).each do |i|
str =
if i == 0 then
‘It is 0.’
elsif i == 1 then
‘It is 1.’
else
‘sonota.’
end
puts( str )
end[/ruby]

$ ruby test.rb
It is 0.
It is 1.
sonota.

普通に書くとこうなる.

[ruby]#!/usr/bin/ruby
(0..2).each do |i|
if i == 0 then
str = ‘It is 0.’
elsif i == 1 then
str = ‘It is 1.’
else
str = ‘sonota.’
end
puts( str )
end[/ruby]

$ ruby test.rb
It is 0.
It is 1.
sonota.

strを2回分書かなくて済んだねって話(いまのところは).

・条件その2
真偽判定は演算順に行う(そらそうだ).ただし,演算の途中で値が確定した場合は,後ろの項は調べない.
また,真偽判定のとこに式やルーチンを書くと,必要に応じて呼び出したり実行されたりする.

[ruby]#!/usr/bin/ruby
foo = false
foo || puts( ‘foo is false.’ )[/ruby]

$ ruby test.rb
foo is false.

[ruby]#!/usr/bin/ruby
foo = true
foo || puts( ‘foo is false.’ )[/ruby]

ruby test.rb
(なにも出力されない)

初期化にも使える(nilかfalseのとき,何か突っ込んでおく)

[ruby]#!/usr/bin/ruby
init_int = 1
foo ||= init_int # fooがnilかfalseのとき,init_int代入
puts( foo )[/ruby]

$ ruby test.rb
1

・条件その3
caseでは, x == a のときだけでなく, x ∈ str のときも当てはまる( x === str ともいうらしい).

[ruby]#!/usr/bin/ruby
str = [1, 10, 100]
str.each do |i|
case i
when 1…10 then printf( “%dはひとけたn”, i )
when 10…100 then printf( “%dはふたけたn”, i )
when 100…1000 then printf( “%dはさんけたn”, i )
end
end[/ruby]

$ ruby test.rb
1はひとけた
10はふたけた
100はさんけた

・yield
ルーチンの内側から外側を呼び出す
Ruby On Rails ピチカート街道:yield が分からないので勉強するが分かりやすい.
しかし,あまり進んで使う気にはなれない.

・ファイル操作
ファイルモードは逆引きRuby参照.
下記’a’に当たるものがファイルモードです.

[ruby]#!/usr/bin/ruby
hatugen = gets.chomp
File.open( “temp_file”, ‘a’ ){|f|
f.print( hatugen, ‘ [‘, Time.now, ‘]’, “n” )
}
[/ruby]

$ ruby test.rb
私の名前はソラオチです
$ cat temp_file

私の名前はソラオチです [Wed Dec 31 16:30:21 +0900 2008]

ファイルは自動で閉じておいてくれます(親切すぎる・・・).Timeクラスもすごく便利です.

・書いてみた1
一辺2000の正方形中の格子点のうち,半径1000の円の内部に存在する格子点を数えて円周率を求める変なもの(とても収束性が悪い).

[ruby]#!/usr/bin/ruby
HANKEI = 1000
naibu = 0
(-HANKEI..HANKEI).each do |i|
(-HANKEI..HANKEI).each do |j|
if ( ( i * i + j * j ) <= ( HANKEI * HANKEI ) ) then naibu += 1 end end end pi_modoki = naibu.to_f / ( HANKEI * HANKEI ) puts( pi_modoki )[/ruby]

$ ruby test.rb
3.141549

・書いてみた2
ネイピア数(e)が4行で求められる

[ruby]#!/usr/bin/ruby
N = 1000000
napier = ( 1 + ( 1 / N.to_f ) ) ** N
puts( napier )[/ruby]

$ ruby test.rb
2.71828046909575

応用編:「ちり紙」開発室

参考書:
初めてのRuby←すごく分かりやすいです
Ruby Way 第2版
12/31/2008 ファイル操作 追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です