02.Ruby學習分享之數字和文本
由於Ruby是一門完全面向對象的編程語言,所以它的所有類型都是基於Object,包括數字也算。
下面來介紹以下數字的常用方法
Ruby聲明變量是不需要聲明變量的類型的!Ruby這一特性並不奇怪,Swift也有用到,這種特性叫做鴨子類型(Dock Type)。意思是凡是只要滿足鴨子大部分行為的都是鴨子,比如只要是水裡游的、天上飛的都是屬於鴨子!
聲明一個叫a的變量(注:Ruby中的注釋用#,打印可以使用put,put帶自動換行,也可以簡寫為p,print也可以但是不會自動換行)
a=3
# 打印數字的類型
p a.class
(注:Ruby中帶?的方法都會返回一個bool值。true或者false)
#判斷一個數是否為偶數
p a.even?
# 判斷一個數是不是奇數
pa.odd?
# 把一個數字轉換為字符串
b=a.to_s
p b
# 重複多遍做某件事情
(注:這裡的times其實是指迭代器,以後我的文章會提到!{}內為block代碼塊)
3.times {p'love!'}
# 保留小數位數,括號內填寫保留小數的位數
p 4.3546457.round(2)
接下來說下字符串相關的一些方法
字符串定義很簡單,比如下面這樣
a = 'abc'
b = "abc"
單引號和雙引號都可以聲明字符串,單引號的運行效率比雙引號高,雙引號比單引號可以做插值操作。
c='something'
p "do#{c}"
Ruby中的字符串也和C語言一樣,也可以看作字符數組。比如我們對其做下列操作
a = 'asdf'
a[0] = 'b'
p a
在Ruby中打印某些符號需要使用\來轉譯
p"aaaa\'ssss\'"
實際運行效果如下
"sdff''sdf'sdgf"
定義字符串的話還可以使用下面兩種
p%q(sdff''sdf'sdgf)
p%Q(sdff''sdf'sdgf)
%q和%Q都不需要轉譯符號, %q對應單引號字符串,而Q對應雙引號字符串
定義多行字符串,Ruby還有專用方法
p <<-UD
sdfgsdgdfhfgjghkgshfcijasdhfkdshf
UD
-UD和UD可以替換為任意字母,不過前後必須保持一致才行,而<<可以看作追加,下面的數組介紹篇,我會提到。
Ruby中有一些方法方法名前面都一致,但是有的帶!號,有的不帶,區別在於,帶!的方法屬於危險方法,也就是說會改變變量本身的值。
# 翻轉字符串
p c.reverse
Ruby在調用方法的時候可以使用()也可以不使用,比如下面的
# 判斷字符串是否包含一個字符
p c.include? 's'
p c.include?('s')
# 求字符串的長度
p c.size
# 判斷某個字符在字符串中的位置
p c.index 'h'
# 替換某個字符為另一個字符
p c.sub 's','b'
Ruby也有自己的命名規則
變量,symbol,方法使用蛇形命名,採用全小寫,多個單詞使用_隔開
# variable,symbol,method:snake_case
常量使用全大寫,多個單詞也是使用_隔開
# constant:CONST_FOD
類名使用駝峰命名
#classname:CamelCase
文件名也是用蛇形命名,採用全小寫,多個單詞使用_隔開
# file name:file_name.rb
方法命名的一些規則
一般方法命名採用全小寫,多個單詞使用_隔開
# normal method:normal_method
有返回值類型的命名尤其返回bool類型的值,需要加一個問號
# predicate method:even?
危險方法類型的命名需要加一個!
# dangerous method:reverse!
# 把字符串變為symbol
p c.to_sym
很多人不知道symbol是什麼意思,symbol可以理解為一旦定義就不會被改變的那種量。在Ruby中,我們一般經常使用的特定值會使用symbol命名。symbol在Ruby中的數據結構查找是很快的,並且不會被Ruby的垃圾回收機制回收。一般我們會把它作為Hash的key。Hash可以看做OC中的字典、Java中的Map,是一種以一對key-value鍵值對組成的數據結構。
給大家出兩道題吧
第一道:判斷一個字符串是否是回文,例如abcba,這種正著讀倒著讀都是一致的
第二道:找出一個字符串偶數位的字母,例如abcd,輸出b和d。