寫在開頭
因為一些原因最近開始我的學(xué)習(xí)Ruby之旅祭阀,起初還是有點小興奮的垮卓,畢竟我們都是愛學(xué)習(xí)的娃(臉紅)垫桂。
關(guān)于Ruby,這里簡單介紹一下粟按。
首先Ruby是一種腳本語言诬滩,就像我們平時用的shell一樣,此外它還是一種純粹的面向?qū)ο缶幊陶Z言灭将,在接觸了ruby之后疼鸟,我覺得在語義化方面ruby做的很好,語法表達(dá)什么的都很接近平時說的語言庙曙。
語法上空镜,因為編程語言大多是相通的,也沒有那么難理解捌朴,值得說的是我覺得在學(xué)習(xí)一門語言的時候不用花很多時間去記它的語法吴攒,只是背過不會用還是徒勞,我的方法是先大致了解一下它的語法砂蔽,過程中看一看它的demo洼怔,可以的話自己寫一寫,想不起來的時候網(wǎng)上查一查就知道了左驾,所謂用得多了茴厉,自然就會了泽台。
當(dāng)然,首先你需要配置環(huán)境矾缓。
FizzBuzz的練習(xí)
題目:
用Ruby實現(xiàn)一個程序,輸出從一到指定范圍的數(shù)字稻爬,當(dāng)遇到3的倍數(shù)時就輸出"Fizz"嗜闻,當(dāng)遇到5的倍數(shù)時就輸出''Buzz'',當(dāng)遇到既是3的倍數(shù)又是5的倍數(shù)時就輸出''FizzBuzz''桅锄;
例如:如果范圍是1~15琉雳,那么輸出如下:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
當(dāng)我拿到這個題的時候,大致分了以下幾步去完成:
1. 新建一個ruby文件友瘤,輸出''hello''翠肘;
2. 寫一個循環(huán),輸出對應(yīng)數(shù)字;
3. 在循環(huán)中加上判斷條件辫秧,輸出對應(yīng)的字符串或數(shù)字束倍;
4. 這段程序抽了一個方法,并將循環(huán)次數(shù)作為參數(shù)傳給該方法盟戏;
這樣一分的話每一步都很容易绪妹,也不容易出錯,主要的點有標(biāo)準(zhǔn)輸出函數(shù)柿究,循環(huán)邮旷,條件判斷,方法蝇摸,語法上不知道的就去查婶肩。
看起來很容易,但是在我寫的時候因為一點疏漏找了好久才找到錯誤貌夕,因為最初寫的時候并不是按照上面的順序?qū)懙穆杉撸Y(jié)果在寫if條件的時候忘了加end,結(jié)果一直運行出錯蜂嗽,才不得不回頭一步步開始苗膝,然后很快就完成了。
so植旧,一定要一步步慢慢做才更高效辱揭。
以下是我的實現(xiàn),歡迎交流學(xué)習(xí)哈:
1. 沒有單元測試的版本
2. 有單元測試的版本
這里大致說一下有單元測試的版本病附,跟其他語言的測試一樣问窃,有方法名,斷言完沪。
在Ruby的單元測試中域庇,需要定義一個類繼承于Test::Unit::TestCase嵌戈,這里的''::''表示命名空間,可以理解為路徑听皿,例如''/etc/user''熟呛。
代碼第一行是引入''test/unit'',因為后面要繼承它尉姨,第二行是引入實現(xiàn)的文件庵朝,因為我將實現(xiàn)封裝了一個類,所以需要生成一個實例又厉,即調(diào)用類的new方法九府,這是每個類默認(rèn)有的,然后定義了一個方法覆致,方法體內(nèi)有兩個斷言侄旬,表示兩個測試用例,ruby中的斷言有多種寫法煌妈,如下:
1. assert 2 == 2
2. assert_equal 2, 2
3. assert_equal 2, 1+1
左邊的是期望的結(jié)果儡羔,右邊的是實際的結(jié)果。
安利時間
給大家推薦一個學(xué)習(xí)Ruby的''游戲''声旺,它是一個類似于闖關(guān)游戲的東西笔链,會帶著你在闖關(guān)的過程中學(xué)到很多,關(guān)于Ruby基礎(chǔ)足夠了腮猖,戳這里安裝哦
(用法見readme.md)