rails請參考我寫的簡明Ruby系列:rails簡明實用入門指南html
做者:chengenode
聯繫方式:linux
目標讀者:程序員
Ruby是適合於初學者的,即便是從未寫過程序的人來學,我相信初級部分一天就能學完。web
爲了幫助你學習更輕鬆些,我儘可能選擇了簡單的內容。面試
經過瀏覽目錄,就知道我選擇了一些什麼內容。初級我選擇了三組共四個概念,本書定位初學,因此中高級只是附帶介紹一下,選擇了介紹單元測試和DSL。這些內容,特別是初級部分,是我根據個人自學經驗,認爲對初學者比較重要的核心的內容,不是說別的Array、Hash等不重要,只是爲了簡明和快速學習,作了取捨。編程
有了這個基礎後,遇到不懂的,查閱下參考書就能夠了。segmentfault
我會不按期地修訂,增長我認爲不錯的材料。windows
我但願用最簡潔的方式介紹Ruby的要點。數組
我自己是程序員,05年左右接觸Ruby,我是看鎬頭書入門的,對Ruby的印象不錯,但仍是以爲不得要領,以爲有些複雜。又過了幾年,讀了幾本參考書才彷佛理解了一些。
相似的書通常都涉及不少細節,反而讓主幹不清晰,初學者每每不得要領,學習負擔重。若是一開始讀到本書這樣的介紹,我認爲是有幫助的。
固然這只是入門書,修行要看你本身了。
建議你分兩步,初級體驗一天,中級1-6個月。
100分鐘的紅寶石(有道翻譯的中文版,翻譯效果不錯)
能夠網上實驗,或者本機實驗。
網上實驗
最簡單的,jser在線運行, 或者去codepad網站直接運行,代碼複製過去,選擇ruby.
另外一種稍微複雜的方式,去實驗樓網站,linux環境下運行看結果,能夠在終端Terminal裏運行:irb,就能夠與ruby對話了。
本機實驗
linux和蘋果上通常都安裝好了ruby,運行ruby -v能夠看是否安裝了。
若是沒有的話,請參考wiki自行安裝Ruby。windows上也很容易安裝的。
能夠嘗試這種現代的交互式自學方式。
http://exercism.io
是很好的英文的互動編程社區。
變動:
2015-3-26:高級部分改用了DSL的例子,更實用也更容易理解。
2015-1-26:改寫單元測試,更容易理解
2015-1-23:增長了「面試準備系列」
但願你寫下閱讀的感覺和改進意見。
歡迎開啓有趣的Ruby之旅!
Ruby語言的做者Matz在《代碼之美》一書中講述了他的設計思想,就是簡潔、保守、簡單、靈活性,以及平衡性等五大原則。
puts 'hello world'
例子中那一行代碼,能夠說明簡潔、保守(puts繼承自C語言)和簡單。靈活性和平衡性須要在更復雜的代碼中能夠體會到。
分類是符合人的思惟的。好比人類,每一個人就是人類的一個實例,約定都翻譯成對象。
#註釋:定義類 class Person def initialize(name) @name = name end #定義方法 def show_name puts @name end end #建立對象 zhao = Person.new 'zhao yun ' qian = Person.new 'qian wei ' #調用方法 zhao.show_name qian.show_name
簡單解釋一下:
若是你第一次編程,也許你對這些術語還有些陌生,沒關係,多看幾回,慢慢就會熟悉起來了。
參考資料,初次閱讀能夠跳過,或者選看感興趣的部分。
英文視頻:Learn to program using Ruby
共9部分,大約一個小時。原youtube網址
我搬運了三個部分到百度,百度雲盤
Part 1- Getting startedyoutube有字幕,視頻聽不懂問題也不大,看演示過程就能夠了,還能夠練習英語,一箭雙鵰。
結束語:類和對象是最基本的。
塊是ruby的特點。
3.times do puts 'hello world' end 3.times { puts 'one line hi' } people = ['zhao', 'qian'] people.each do |x| puts x end
以上就是兩種塊的寫法,第一個是無參數,單行的話用括號。後一個帶參數x,[]是數組。塊能夠當作獨立的函數,與塊前面的方法協同工做,就像二人轉。
參考:參考部分來自網上的一些資料,有些是英文的,難度大一些,初學能夠跳過,等有須要再看
結束語:塊無處不在,兩種形式do和{}
模塊也是Ruby的特點。
module Show def show_msg puts self.class end Pi = 3.14 end class Person include Show end class Desk include Show end Pi = 2 puts Show::Pi #註釋:3.14 Person.new.show_msg #Person Desk.new.show_msg #Desk
主要有兩個做用,一個是做爲命名空間,避免名字衝突,好比例子中的Pi。另外一個是共享代碼,例子中Person和Desk共享Show的代碼。
參考:
結束語:模塊是組織代碼的基本方式。
開始本章學習。
補充說明一下:若是你不是頗有經驗的話,看這個單元測試例子會有困難。能夠結合這個例子和簡介裏提到的基礎教程來學習。
關係示意圖以下
--incoming————》測試對象---outgoing---》依賴對象
主要包括測試對象和依賴對象。
outgoing分command和query,command就是有輸出,query沒有輸出。
#引用minitest gem,能夠本身安裝: gem install minitest require "minitest/autorun" class Calc def initialize(logger=nil) @logger = logger end def add(a, b) a + b end def add2(a, b) @logger.log "add2 #{a}, #{b}" a + b end end # < 是繼承 class TestCalc < MiniTest::Test def test_add calc = Calc.new assert calc.add(2, 5) == 7 end def test_add2 mock_logger = MiniTest::Mock.new mock_logger.expect(:log, nil, ['add2 2, 5']) calc = Calc.new(mock_logger) assert calc.add2(2, 5) == 7 mock_logger.verify end end
簡單解釋下例子:
Calc是被測試的功能代碼,TestCalc是測試代碼,測試的目的是驗證功能代碼是否正確。
兩個測試方法,其中test_add比較簡單。
第二個test_add2用到了mock模擬對象,稍微複雜一些。除了驗證基本的計算外,還驗證了是否執行了log操做。
先運行一次,正確的話會顯示兩個點:‘..’。
能夠故意把Calc改錯,好比改成a-b, 或者把那個log代碼註釋掉,再運行看是否能測試出來。
參考:
面試準備系列(英文版)
能夠做爲學習的參考。
DSL是特定領域語言,rails裏有不少例子,rake, rspec, migration等等。下面這個例子演示了原理,主要用了method_missing。學完後,再看那些rails代碼就比較親切了。
實例參考這篇英文博客
Metaprogramming in Ruby: Part 1
Metaprogramming in Ruby: Part 2
《Ruby 元編程》讀書筆記
固然本書主要仍是入門書,更多的請參考《Ruby元編程》這本書。
irb是自帶的.
pry更好用一些,能夠這樣:
ls Object
像目錄操做同樣。
sublime和開源的atom都不錯。
SublimeCodeIntel插件能夠提供Ruby代碼提示。
1.9.3-p545 :023 > String.ancestors => [String, Comparable, Object, Kernel, BasicObject]
String的前面有四個上級
Ruby的方法很是多,以致於不得不用grep了。
1.9.3-p545 :049 > [].methods.grep /^me/ => [:member?, :methods, :method]
1.9.3-p545 :018 > {}.method :select => #<Method: Hash#select> 1.9.3-p545 :019 > {}.method :reduce => #<Method: Hash(Enumerable)#reduce>
method方法能夠實現。
若是找明確的方法,能夠用ri,方便快捷。
ri String.sub
不過這種方式彷佛很差用。有一個專門的dash軟件,很好用。彷佛是隻支持mac。
各類對象語言的原理是相似的,可是內部實現模型是不同的。Ruby用起來簡單,內部很複雜的。
當你感受Ruby好用的時候,其實應該感謝Matz的工做。
Kernel模塊是核心,不少重要的方法都在裏面。推薦看《Ruby元編程》,書中有詳細介紹。
入門
提升
路線圖
帶有連接的圖:https://www.learneroo.com/mod...
原圖:http://www.zappable.com/tag/c...
但願這本小書成爲你學習Ruby的起點,再見!
[請我喝一杯,手機支付寶]
聯繫方式:見目錄部分