Ruby教學 - 資料型態(Data Type)
1. Ruby的物件導向
由於Ruby是個完全物件導向的語言,它不像其他語言使用原始型別(primitive types),例如int, bool之類的型別,所有的實字(literal)都會被解析成對應的物件來使用。
從上圖可以看到物件的階層關係,所有型別皆繼承自物件(Object),甚至是模組(Module)和類別(Class)。
之後幾篇文章將逐一介紹一些主要的型別,包含以下項目:
- 字串(String)
- 符號(Symbol)
- 數字(Numeric)
- 整數(Integer)
- 浮點數(Float)
- 陣列(Array)
- Hash
- 範圍(Range)
- Nil
- True
- False
2. 物件類別
所有型別都是物件,可以利用class的屬性來查看物件型別:
puts "Hello".class # String puts :Hello.class # Symbol puts 1.class # Fixnum puts 9999999999999999999.class # Bignum puts 1.1.class # Float puts [].class # Array puts ({"key" => "value"}).class # Hash puts (1..5).class # Range puts true.class # TrueClass puts false.class # FalseClass puts nil.class # NilClass
3. 型別的判斷
Ruby提供is_a?和kind_of?的函式來判斷是否屬於某種類別之下,功能是完全一樣的:
puts "Hello".is_a? String # true puts "Hello".kind_of? String # true puts 1.is_a? Numeric # true puts 1.is_a? Float # false puts 1.1.is_a? Numeric # true puts 1.1.is_a? Float # true
另外還有一個函式instance_of?來判斷是否正好是某個類別:
puts 1.1.instance_of? Numeric # false puts 1.1.instance_of? Float # true
4. 轉型
Ruby中進行轉型是透過的物件提供的函式來達成,常見的有以下幾種:
- to_s:轉成字串(String)
- to_i:轉成整數(Integer)
- to_f:轉成浮點數(Float)
- to_a:轉成陣列(Array)
- to_h:轉成Hash
- ...
例如
p 1.1.to_s # "1.1" p 1.1.to_i # 1 p 1.1.to_f # 1.1 p ({:key => :value}).to_a # [[:key, :value]] p [[:key, :value]].to_h # {:key => :value}
並不是所有型別的可以互相轉換,視情況而定,另外一點特別的是,Ruby中沒有布林型別,但是仍可利用以下方法強制轉型成true或false:
puts !!false # false puts !!nil # false puts !!0 # true puts !!"" # true puts !!true # true
從上面的例子可以發現一個重要的事情:Ruby中只有false和nil是判斷為false。