68
Ruby女孩: 10萬.times { puts "為什麼?" } Annie Chen 6 6

Ruby女孩6/6

Embed Size (px)

Citation preview

Page 1: Ruby女孩6/6

Ruby女孩:

10萬.times { puts "為什麼?" }

Annie Chen

6 6

Page 2: Ruby女孩6/6

Who am I ?Annie Chen

Rails Girls Taipei 3rd 學員 Rails Girls Taipei 4th, 5th 教練

Rails ⼯工程師 @ i-True 數學⽼老師

Page 3: Ruby女孩6/6

3月 8月7月6月5月4月 9月 10月 11月 12月

第⼀一次成為 RailsGirls

參加LTRT 開始練功

撞牆期 我到底想學什麼?

找專案練習 ⾃自我驗收

RailsGirls 校園推廣

RailsGirls 教練初體驗

A Ruby Week in Japan

iT鐵⼈人賽挑戰 Ruby ⼥女孩

I got a job!

Share ⽇日本⼼心得

In 2014…

Page 4: Ruby女孩6/6

這些都是我

Annie 安妮

facebook: @OtiAnn github: @OtiAnn

twitter: @_OtiAnn blog: blog.annideas.com

Page 5: Ruby女孩6/6

2014/10/1 ~ 2014/10/30 連續不中斷 分享IT文章

Page 6: Ruby女孩6/6
Page 7: Ruby女孩6/6

http://blog.annideas.com/ironman7

My 30 Days…

Page 8: Ruby女孩6/6

前情提要

http://www.slideshare.net/AnnieChen51/ruby56

Page 9: Ruby女孩6/6

This time…

Page 10: Ruby女孩6/6

有帶電腦來嗎? 可以邊聽邊練習~~

等等連上這裡(⼆二擇⼀一) (1) repl.it (2) tryruby.org

Page 11: Ruby女孩6/6

Ruby⼥女孩(26): 別鬧了, ⽅方法的圓括號別亂省!

圖⽚片出⾃自:⽇日本⼈人⼒力公司 リクナビ NEXT

Page 12: Ruby女孩6/6

※⽅方法的名稱

1. 慣例以⼩小寫字⺟母開頭(雖然⼤大寫可以,但這會讓它看起來很像常數)

2. ⽅方法名稱不只⼀一個單字時,通常以底線符號分隔,例如:who_am_i

3. ⽅方法名稱可以⽤用⼀一個等號、⼀一個問號或⼀一個驚嘆號結尾,例如:age=、include?、sort!

Page 13: Ruby女孩6/6

※⽅方法的名稱

3-1. ⼀一個等號:就是之前在類別時有提到的setter做法 >> Ruby⼥女孩(19)3-2. ⼀一個問號:問號就很像⼀一個問題,任何⽅方法名稱只要以問號結尾,都會回傳⼀一個值來回答問問題(通常是true或false)。

問題:String是⼀一個物件嗎?

答案:是的!

Page 14: Ruby女孩6/6

※⽅方法的名稱

3-3. ⼀一個驚嘆號:驚嘆號有警⽰示的意味存在,使⽤用的時候要很⼩小⼼心,⼀一般沒有加驚嘆號的時候,會做⼀一個副本來儲存變動後的內容;但若是有加驚嘆號的話,他會直接在原物件上修改內容。

Page 15: Ruby女孩6/6

※ 運算符⽅方法

Ruby中有很多運算符,例如+、*...這些其實都是⽅方法,我們平常看到的1+2其實是因為1有⼀一個⽅方法叫做+,它也可以這樣寫:

Page 16: Ruby女孩6/6

※ ⽅方法的別名

Ruby中很多⽅方法都有別名,這是⼀一個⾮非常⼈人性化的做法,常常可以讓整串code更符合語意,例如以前曾介紹過.include?、.member?、.cover?這三個⽅方法就是同義的⽅方法,都在看⼀一個物件有沒有被包含

Page 17: Ruby女孩6/6

※ ⽅方法的別名

除了語意之外,還有⼀一種⽐比較實際的理由,就是可以⽤用alias的⽅方式來幫擴充或修改既有的⽅方法!

alias寫法:『alias 別名 原名』

Page 18: Ruby女孩6/6

※ ⽅方法的別名alias寫法:『alias 別名 原名』

Page 19: Ruby女孩6/6

~練習alias~

Page 20: Ruby女孩6/6

試著改變加法的內容

原本:1+4 = 5 改成:1+4 = 50

Page 21: Ruby女孩6/6

參考作法:

Page 22: Ruby女孩6/6

※ ⽅方法與圓括號⽅方法後⾯面跟的圓括號是可以省略的,除了少數特例之外!

Page 23: Ruby女孩6/6

※ ⽅方法與圓括號

函數之間巢狀使⽤用:

如果沒加...

Page 24: Ruby女孩6/6

※ ⽅方法與圓括號

⼀一些容易造成含糊不清的寫法,都建議主動加上括號

Page 25: Ruby女孩6/6

Ruby⼥女孩(27): ⽅方法的引數傳遞⽅方式, 你覺得很簡單嗎? 進來⼩小試⾝身⼿手看看XD

圖⽚片出⾃自:⽇日本⼈人⼒力公司 リクナビ NEXT

Page 26: Ruby女孩6/6

※ ⽅方法的引數在定義⽅方法時,我們會在⽅方法名稱後⾯面的圓括號加⼊入引數,引數所接收到的內容可以被送進該⽅方法中。

1. 設定引數的預設值

如果上⾯面的範例沒有設x,y,z的預設值 那直接輸⼊入point的結果會噴錯!

Page 27: Ruby女孩6/6

※ ⽅方法的引數

因為沒有預設值,所以在呼叫函數的時候要⾃自⼰己在後⾯面加⼊入引數值才可以正常運作。

『如果引數之中有些有預設值有些沒有,該怎麼辦?』

Page 28: Ruby女孩6/6

※ ⽅方法的引數

(1) 有預設值的引數⼀一定要『相鄰』!下⽅方為錯誤寫法:

『如果引數之中有些有預設值有些沒有,該怎麼辦?』

這才是對的! ⼀一定要讓有預設值的引數接在⼀一起,所以要改成:

Page 29: Ruby女孩6/6

※ ⽅方法的引數

(2) 在呼叫⽅方法時,給定的引數會由左⾄至右填⼊入

『如果引數之中有些有預設值有些沒有,該怎麼辦?』

Page 30: Ruby女孩6/6

※ ⽅方法的引數

(2) 在呼叫⽅方法時,給定的引數會由左⾄至右填⼊入

『如果引數之中有些有預設值有些沒有,該怎麼辦?』

Page 31: Ruby女孩6/6

~⼩小試⾝身⼿手~

猜猜下⽅方的答案是什麼?

Page 32: Ruby女孩6/6

~⼩小試⾝身⼿手~

猜猜下⽅方的答案是什麼?

Ans:

Page 33: Ruby女孩6/6

※ ⽅方法的引數

有時候我們希望⽅方法可以接受任意數⺫⽬目的引數,此時我們會替引數前綴⼀一個『*』,此時當引數傳到該位置時,傳的其實是⼀一個陣列。

2. 不定⻑⾧長度的引數串列與陣列

可以看到上⽅方的例⼦子中,我們傳⼊入了4個引數,第1個是name的引數,第2、3、4個都會被傳⼊入skill中變成陣列!

Page 34: Ruby女孩6/6

※ ⽅方法的引數

這個『*』還可以直接傳遞⼀一個陣列給idol⽅方法⽤用。

2. 不定⻑⾧長度的引數串列與陣列

『*』可以⾃自動幫我們展開這個陣列,套⼊入idol⽅方法時,就會丟⼊入相對應的位置!

不過如果沒有加上『*』,會...

Page 35: Ruby女孩6/6

※ ⽅方法的引數3. 根據引數個數丟到⽅方法裡的規則

Page 36: Ruby女孩6/6

~⼩小試⾝身⼿手~

預設值、『*』、引數個數差異 之

⼤大・亂・⾾鬥

Page 37: Ruby女孩6/6

~⼩小試⾝身⼿手~預設值、『*』、引數個數差異之

⼤大・亂・⾾鬥

Page 38: Ruby女孩6/6

Ans

Page 39: Ruby女孩6/6

Ruby⼥女孩(28): 慢慢打開區塊引數的包裝

圖⽚片出⾃自:⽇日本⼈人⼒力公司 リクナビ NEXT

Page 40: Ruby女孩6/6

※ 區塊的語法

1. 區塊不能單獨存在,它⼀一定要伴隨著⽅方法調⽤用。 2. 可以⽤用⼤大括號{}或是do和end當作區塊的起始與終⽌止。 3. 但左括號{或do,⼀一定要跟⽅方法名稱放在同⼀一列。 4. 有⼀一慣例,當區塊⽅方法只有⼀一⾏行時,使⽤用{};若超過⼀一⾏行,則使⽤用do/end。

Page 41: Ruby女孩6/6

※ 區塊的語法

5. 如果想省略圓括號,要⼩小⼼心!請看以下範例:

區塊會找緊接著它的⽅方法試圖傳進去,第三種會出現SyntaxError,就是因為它以為緊跟著它的⽅方法是10,才會噴錯!所以若想省略⽅方法的圓括號,請改以do/end撰寫。不然就不要省略!!

Page 42: Ruby女孩6/6

※ 區塊的語法

6. 區塊本⾝身也可以類似⽅方法⽽而有多個參數,例如:

7. 區塊本⾝身的參數也有⼀一慣例寫法,會跟左括號{或do寫在同⼀一⾏行。

Page 43: Ruby女孩6/6

※ 傳遞區塊引數由於區塊是不具名稱的,他們的調⽤用是要前綴⼀一個『&』符號,⽽而且規定⼀一定要寫在引數的最後⼀一個!實際使⽤用的⽅方式如下:

Page 44: Ruby女孩6/6

※ 傳遞區塊引數我們在⽅方法後⾯面直接丟⼊入&d的引數,並且在⽅方法中,使⽤用.call來給區塊參數!那.call這個⽅方法是誰的⽅方法呢?

Proc 稍待揭曉~

Page 45: Ruby女孩6/6

※補充⼀一個書上⺫⽬目前沒看到的傳遞引數的⽅方式

與『*』不同的是,『**』可以傳進雜湊的值

Page 46: Ruby女孩6/6

Ruby⼥女孩(29): 揭開區塊的⾯面紗-Proc、lambda

圖⽚片出⾃自:⽇日本⼈人⼒力公司 リクナビ NEXT

Page 47: Ruby女孩6/6

※ proc與lambda

『我們可以建⽴立⼀一個代表區塊的物件,依據物件建⽴立⽅方式的不同,它可以被稱為⼀一個proc或⼀一個lambda。proc的⾏行為如同區塊,⽽而lambda的⾏行為如同⽅方法。然⽽而,他們都是Proc類別的實例。』(p.198)

1. 建⽴立proc(1)透過調⽤用⽅方法來建⽴立proc(2)Proc.new(3)Kernel.lambda(4)Kernel.proc

Page 48: Ruby女孩6/6

※ proc與lambda1. 建⽴立proc

(1)透過調⽤用⽅方法來建⽴立proc

當我們在引數前綴⼀一個『&』時,我們已經將所伴隨的區塊轉換成⼀一個Proc物件並存⼊入iamproc中,此時我們可以利⽤用makeproc這個⽅方法來建⽴立Proc物件:

Page 49: Ruby女孩6/6

※ proc與lambda1. 建⽴立proc

所有的Proc物件都具有call這個⽅方法,當它被調⽤用時,會執⾏行區塊中的程式碼:

(1)透過調⽤用⽅方法來建⽴立proc

Page 50: Ruby女孩6/6

※ proc與lambda1. 建⽴立proc

(2)Proc.new

這個建⽴立Proc實體的⽅方式,是所有⽅方式中最明顯的。 其實下⾯面這兩種寫法是完全等效的:

Page 51: Ruby女孩6/6

※ proc與lambda1. 建⽴立proc

(3)Kernel.lambda

(4)Kernel.proc

Ruby1.8以前proc都只是lambda的同義字,不過Ruby1.9之後,proc其實是Proc.new的縮寫。

Page 52: Ruby女孩6/6

※ proc與lambda2. 調⽤用proc或lambda

除了call這個⽅方法可以傳遞引數給區塊之外,也可使⽤用中括號:

Page 53: Ruby女孩6/6

※ proc與lambda3. lambda與proc有何差別『proc是⼀一個區塊的物件形式,⾏行為就如同⼀一個區塊;lambda的⾏行為稍有不同,較像⼀一個⽅方法⽽而⾮非區塊。』(p.203)

Page 54: Ruby女孩6/6

※ proc與lambda3. lambda與proc有何差別

lamnda就是⽐比較嚴謹的proc,傳⼊入的參數不⾜足,是會噴錯的!

深⼊入探討:Ruby的block, lambda, Proc與函式物件

Page 55: Ruby女孩6/6

Ruby⼥女孩(30): 想學Ruby嗎?來聞⾹香吧!

圖⽚片出⾃自:⽇日本⼈人⼒力公司 リクナビ NEXT

Page 56: Ruby女孩6/6

The Ruby Programming Language Ruby 程式設計

David Flanagan, Yukihiro Matsumoto 著 蔣⼤大偉 譯

定價780元 455⾴頁

Page 57: Ruby女孩6/6

這30天所看的這本【The Ruby Programming Language Ruby程式設計】,說實在的,他⽐比較像⼀一本字典,裡⾯面說明了許多規則、特例,讀的過程中,只⽤用書上給的程式碼例⼦子對初學者來說似乎不太夠,所以邊讀要邊上網搜尋更多資源。

但很可惜的,這30天的時間,我沒將這本書讀完,缺乏的先備知識還是太多,所以花太多時間在確定⾃自⼰己思考的⽅方向是不是對的,我⼤大概只讀完了這本書的50%(⽽而且是簡單的部分XD)

我相信這本【The Ruby Programming Language Ruby程式設計】還是⾮非常值得讓想嘗試Ruby的新朋友參閱的!讓他在架上當⼀一本字典也是很不錯,如果想先了解書中說的東⻄西,我覺得我這30篇應該很適合當作導讀來看XD。

Page 58: Ruby女孩6/6

『哪招啊?到底在寫啥?』

『為什麼?』

『先別吵我~』

『真的假的!』

『噢原來是這樣!』

『太帥了!』

『我想休息一下』

『噢這太難懂了』

蠻享受這過程的,因為會看到⾃自⼰己另外⼀一⾯面,不停地⾃自⾔言⾃自語:

Page 59: Ruby女孩6/6

我們到底,上了哪些內容?

Page 60: Ruby女孩6/6

#簡介作者背景、說明Matz之⽗父創造Ruby的原因 Ruby⼥女孩(1):為什麼選擇Ruby? Ruby⼥女孩(2):Matz為什麼要創造Ruby?

#如何開始寫Ruby Ruby⼥女孩(3):我該怎麼try Ruby的語法?

我們到底,上了哪些內容?

Page 61: Ruby女孩6/6

#簡介Ruby語彙結構與Ruby的資料型別(數字、字串、陣列、雜湊、範圍..) Ruby⼥女孩(4):Ruby的語彙結構簡介 Ruby⼥女孩(5):Ruby的數學跟⽼老師教的數學都不⼀一樣? Ruby⼥女孩(6):Ruby的"-字-字-字-字-字-" Ruby⼥女孩(7):原來字串也可以⽐比⼤大⼩小? Ruby⼥女孩(8):字串迭代⼩小練習! Ruby⼥女孩(9):⽼老媽,你不能決定,讓我⽤用紅寶⽯石的陣列 幫你決定吧! Ruby⼥女孩(10):["⼗十年","好姐妹","陣列萬歲"] Ruby⼥女孩(11):雜湊雜湊雜湊,重要的事情會說三次! Ruby⼥女孩(12):Range讓我知道..我是草莓族,Ruby不是QQ Ruby⼥女孩(13):到底字串跟符號什麼時候使⽤用⽐比較好?

我們到底,上了哪些內容?

Page 62: Ruby女孩6/6

#Ruby物件的特點 Ruby⼥女孩(14):在Ruby中,萬事萬物都是物件 => true Ruby⼥女孩(15):Ruby物件的⽣生與死 Ruby⼥女孩(16):物件之間相等性的⽐比較 Ruby⼥女孩(17):⾃自⼰己做排序的⽅方法!

我們到底,上了哪些內容?

Page 63: Ruby女孩6/6

#Ruby中的類別與模組介紹 Ruby⼥女孩(18):⾃自⼰己的類別⾃自⼰己做啦! Ruby⼥女孩(19):類別中的getter與setter Ruby⼥女孩(20):⼀一次弄懂⼀一件事,今天來分清楚實體⽅方 法跟類別⽅方法的差異! Ruby⼥女孩(21):來聽聽類別變數與類別實體變數的⾃自⽩白(?) Ruby⼥女孩(22):公⽤用、受保護、私⽤用⽅方法⼤大亂⾾鬥 Ruby⼥女孩(23):Ruby中的繼承者們!有錢真好(誤) Ruby⼥女孩(24):模組是不⽣生孩⼦子的!模組與類別差異及 mixin介紹

我們到底,上了哪些內容?

Page 64: Ruby女孩6/6

#Ruby中⽅方法的定義與引數傳遞⽅方式 Ruby⼥女孩(25):來認識⽅方法的定義與解除! Ruby⼥女孩(26):別鬧了,⽅方法的圓括號別亂省! Ruby⼥女孩(27):⽅方法的引數傳遞⽅方式,你覺得很簡單嗎? 進來⼩小試⾝身⼿手看看XD Ruby⼥女孩(28):慢慢打開區塊引數的包裝 Ruby⼥女孩(29):揭開區塊的⾯面紗-Proc、lambda

我們到底,上了哪些內容?

Page 65: Ruby女孩6/6

TryRuby - http://tryruby.org/

Codecademy - http://www.codecademy.com/learn

RubyMonk - https://rubymonk.com/learning/books/18-ruby/

Ruby中⽂文官⽅方網⾴頁 - https://www.ruby-lang.org/zh_tw/

Learn Ruby The Hard Way - http://lrthw.github.io/

補充:其他學習資源

Page 66: Ruby女孩6/6

“It is never too late to be what you might have been.” George Eliot

Page 67: Ruby女孩6/6
Page 68: Ruby女孩6/6