文字列〜シンボル〜配列〜ハッシュ
おもむろにRubyなど。Rails for PHP Developers という良い本をいただいたので、Rubyで遊んでいる次第です。環境はCentOS5.2の1.8.5。もうちょい遊んだらバージョン上げよかな〜?
変数・文字列・シンボル
intはアンダースコア入れてもいいんだって。
# large int large = 123_456_789 p large
123456789
文字列中の変数展開は #{}
# strings into lines my_string = <<EOT ignore #{large} hoge hogehoge EOT p my_string
"ignore 123456789\nhoge\nhogehoge\n"
文字列のクオート。
q = %q{foo bar baz} p q
"foo bar baz"
文字列は厳密に言うと違うオブジェクトらしい。唯一性を保証するのはシンボル。
# symbols hoge = "magazine" fuga = "magazine" p hoge == fuga # これはtrueになる p hoge.equal? fuga # これはfalse hoge = :magazine fuga = :magazine p hoge == fuga # これはtrueになる p hoge.equal? fuga # これもtrue
true false true true
シンボルは唯一性が保証されてるからハッシュのキーに良く使われる。
list_hoge = {:name => "sotarok", :age => 23} p list_hoge
{:name=>"sotarok", :age=>23}
シンボル
唯一性だと?
.intern と .to_sym はどっちが一般的なんだ?yuguiさんは「はじめてのRubyで」インターンされた文字列っていってた。つかRubyのドキュメント見てもそう書いてあったけど。インターンってなんぞか。
hoge = 'fuga' hoge_symbol_intern = hoge.intern hoge_symbol_sym = hoge.to_sym p hoge, hoge_symbol_intern, hoge_symbol_sym
"fuga" :fuga :fuga
.intern .to_sym は等価っぽい。
p hoge == hoge_symbol_intern p hoge == hoge_symbol_sym p hoge_symbol_intern == hoge_symbol_sym
false false true
ほうほう。
array_test = {'fuga' => 1, :fuga => 2} p array_test['fuga'] p array_test[:fuga] p array_test[hoge] p array_test[hoge_symbol_intern]
1 2 1 2
配列
fruit = ['banana', 'apple', 'orange'] p fruit p fruit[0] p fruit[1] p fruit[2]
["banana", "apple", "orange"] "banana" "apple" "orange"
colors = %w{blue red yellow} # 空白区切りで配列に p colors
["blue", "red", "yellow"]
colors = %w/blue red yellow/ # デリミタはなんでもいい p colors
["blue", "red", "yellow"]
PHPでこれをやろうとするとこんなかんじか。
<?php $colors = explode(" ", "blue red yellow");
だっせえ。
fruit = ['apple'] fruit << 'banana' fruit[5] = 'orange' # あいだには nil がはいる p fruit p colors[5] # 存在しなければnilがかえる
["apple", "banana", nil, nil, nil, "orange"] nil
# delete element colors.delete_at(1) # インデックスで削除 => 間はつめられる p colors
["blue", "yellow"]
# foreach みたいな colors.each {|color| p color }
"blue" "yellow"
# 配列の配列とか people = [['Joe', 'W', 'Smith'], ['Jane', 'M', 'Doe']] people.each do |first, middle, last| p "#{first} #{middle}. #{last}" end
"Joe W. Smith" "Jane M. Doe"
# array の分解 p *people hoge, fuga = *people # こんなかんじでうごく? p hoge, fuga
["Joe", "W", "Smith"] ["Jane", "M", "Doe"] ["Joe", "W", "Smith"] ["Jane", "M", "Doe"]
うごいた。
ハッシュ
# hash 初期化 person = {:name => "Joe", :age => 23,} p person p person[:name]
{:name=>"Joe", :age=>23} "Joe"
# 要素+ person[:country] = 'Japan' p person
{:name=>"Joe", :age=>23, :country=>"Japan"}
# 要素の更新 or 追加 person.update(:name => "Joe", :eyes => 'black') p person
{:name=>"Joe", :age=>23, :country=>"Japan", :eyes=>"black"}
# 要素の変更 person[:eyes] = 'blue' p person
{:name=>"Joe", :age=>23, :country=>"Japan", :eyes=>"blue"}
# 要素の削除 person.delete(:eyes) p person
{:name=>"Joe", :age=>23, :country=>"Japan"}
# もしほげほげだったら・・・ person.delete_if{|key, value| value == 'Joe'} p person
{:age=>23, :country=>"Japan"}
person[:name] = 'Joe' #とりあえず復活させる p person person.delete_if{|key, value| key == :name and value == 'Joe'} # 複数条件も p person
{:name=>"Joe", :age=>23, :country=>"Japan"} {:age=>23, :country=>"Japan"}
# なんでもハッシュのキーになりうる class Use end fruit = ['apple', 'orange'] hash = {User.new => 'Joe', fruit => 'yummy'} p hash p hash[fruit] # おいUserのほうどうやってアクセスすんだw
{["apple", "orange"]=>"yummy", #<User:0xb7ef065c>=>"Joe"} "yummy"
型自動変換
まーPHPのようにはいかんよね。これが普通。
# type juggling #p 1 + "2" # これはrubyではダメ p 1 + "2".to_i p 1.1 + 2
3 3.1
今日はこのへんで。
また暇があったら遊ぶ。
Rails for PHP Developers
で、読んでるこの本ですが、非常に良い本です。PHPとの違いを具体的にコードで書いてあったりして、Railsにはもともとあまり興味はなかったのですが、Rubyには興味があったので、特に3章の「PHP to Ruby at a Glance」という章は非常に参考になります。
素敵な本です。
Rails for PHP Developers (The Facets of Ruby)
- 作者: Derek Devries,Mike Naberezny
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2008/02/01
- メディア: ペーパーバック
- クリック: 7回
- この商品を含むブログ (2件) を見る
はじめてのRuby
あとちょくちょくこっちの本も参照中。こちらも良い本ですね。
- 作者: Yugui
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/26
- メディア: 大型本
- 購入: 27人 クリック: 644回
- この商品を含むブログ (251件) を見る