ASTRO Camp Day23 - RUBY(1)
RUBY 第一堂課
1、工作分配
> 看板便利貼
> Todo Doing Done
> 口口口 > 拿票放到右邊 口口 > 做完放到這 口
> 口口口
> 每一個任務都會有一個便利貼,功能盡量拆分小一點
1-1、難度計量表
每一個 task 便利貼都會有主題、描述、預計完成時程(diff)
會有一個計量表,1~5,拿這個便利貼的時候,就代表你覺得完成此功能會耗時多久
1 - 一天內 2 - 一天半 3 - 兩天內 4 - 兩天半 5 - 三天
1-2、注意事項
-
如果今天你拿便利貼,又寫上 5 分的話,代表完成任務時間大約要耗時 2.5 天
-
給點數的時候,要讓大家討論,不是一個人決定就是這樣,如果今天兩個人給點數差距過大,要討論一下做法
-
打點數的時候,不要看別人臉色,給自己覺得分數
-
任務評分完後,會有一個總點數(是大家估出來的),並用這個總點數,跟距離 demo 天數,算一下完成點數的總點數理想值(1 個人一天可以耗盡 2 點),如果最後超過完成日,記得先把功能拔掉
-
用燃盡圖來看專案進行狀況
-
功能系統如果沒有太細分,會發生點數 4, 5 分太多。ex. 會員系統如果就是一張票,那就會超級難,把此功能拆得少一點,就可以讓大家都參與進來,並把點數降低
-
最重要的是,每張卡片都有點數後,開始拿點票後,要怎麼分呢?? !!!每個人一次拿一張票,做完後再去拿新票
-
如果有人在時限沒做完,怎麼辦 -> 站立會議
-
會員系統基本會先做,因為他是路障型的票(一定要先做),路障型票要先清掉,後續才能繼續進行(這種票基本上由熟練的人來做,要不然後續無法接上)
1-3、站立會議
每日開會的時候,每個人回報三件事
- 昨天在幹嘛
- 遇到的困難
- 今天要做啥
如果拿了某張票,但是後來覺得做不出來,就要在站立會議提出,並把票放回去,去領新票
–
todo 欄位的票是動態新增的
–
2、rails
rails 強項
- CRUD = Create, Read, Update, Delete
- 關聯性 has one, has many, belongs to
–
找工作用 rails 6 比較好,7 刪除的動作改了
–
2-1、開啟新專案
6.1.7的意思是,指定開啟新專案的 rails 版本
> rails _6.1.7_ new WishSite
Ps. 這次專案我建立在 day23 的資料夾
–
如果今天想看電腦有哪些版本的 ruby
gem list | grep rails
| -> 意思是 pile ,透過管線,把輸出結果丟給下面的程式
–
rails 檔案介紹
- .ruby-version -> 這個檔案,只要 cd 進來,可以控制你進來的 ruby 版本
- gem.file 會幫你整理所有用到的套件,如果要新安裝套件,請放在這裡
> bundle install # 會直接把整個 gem file 的檔案掃過並安裝相容的檔案
–
ruby gems => ruby 所有的套件都在這個網站
–
3、gem、bundle
gem 版本介紹、和bundle有什麼不一樣、Gemfile.lock是用來做啥的
3-1、gem版本代表的意思
設計多版本的原因是,如果今天加小物件,跳patch版號,如果今天是加新功能,跳minor版號,如果大更新,跳major版號
> gem 'xxx' 3.1.7
> 3 => major => 完全不同的產品
> 1 => minor => 有可能會壞掉
> 7 => patch => 增加不太重要的功能 (可以隨便更新來用)
> gem 'xxx', '~> 3.1.7' 3.2.0 不會裝
> gem 'xxx', '>3.1.7' 3.2.0 會裝
~的意思是,會去裝比較安全的版本,所以今天如果改動的是patch就會安裝,跳minor版號就不會安裝
—
3-2、gem vs bundle
(1) gem 是一次裝一個指定的套件
(2) bundle 是一次下載寫在 gemfile 的描述檔
> bundle指令會做以下事情
> (1) 找 gemfile
> (2) gem install ...
> (3) 產生 Gemfile.lock
3-3、Gemfile.lock 是啥
假設今天A套件需要B套件2.0版本,C套件需要B套件3.0版本,bundle完後,可以解決上面這個問題
> Gemfile.lock => 會產生一個“多個檔案相依性”的檔案,這可以解決版本不同的相依性問題
4、ruby for rails
4-1、gem 是什麼
(1) rvm -> ruby 系統管理工具
(2) gem -> ruby 套件安裝工具
ruby 安裝套件是直接裝在系統裡面
gem 完套件會直接裝在環境裡面
可以輸入 gem env 看環境裡面有哪些變數gem env = gem environment
5、Repl(Read-eval-print loop)是啥
wiki
「讀取-求值-輸出」循環(英語:Read-Eval-Print Loop,簡稱REPL)
也被稱做交互式頂層構件(英語:interactive toplevel),是一個簡單的,交互式的編程環境。
這個詞常常用於指代一個Lisp的交互式開發環境,也能指代命令行的模式。
懶人包
REPL對於學習一門新的程式語言具有很大的幫助,因為它能立刻對初學者做出回應。
6、ruby常數和變數的差異
(1) 常數是大寫字母,變數是小寫開頭
(2) 常數可以re-assign(但是不建議,會跳出警告)
為什麼ruby要讓常數可以修改,原因是物件導向的class,常數命名且可以修改
class Cat # 這個Cat是常數,在ruby,我們可以幫class新增、修改功能
end
`` -> ruby這個符號是執行某一段指令
result =ls -al
puts result => 可以把所有檔案列出來
—
7、p、puts、print 的差異
先創一個陣列
> lst = [1,2,3]
7-1、p
(1) p會保留要印出來的殼,並印在一行
(2) 會有回傳值
> p lst # [1,2,3]
7-2、puts
(1) puts 會整個拆掉,並逐行印
(2) 沒有回傳值
> puts lst # 1
> 2
> 3
7-3、print
(1) 跟puts很像,不過不會換行
這邊在宣告第二個陣列
> lst2 = [4,5,6]
同時把兩個陣列印出來
> print lst
> print lst2 # [1,2,3][4,5,6] -> 因為print關係印在同一行
如果今天p用在方法裡面,他會有回傳值的效果,但是千萬不易這樣用,不要用p來取代return
—
8、early return
能不寫else就不寫else
def is_greater_than_20(n)
if n > 20
return true
end
return false
end
9、錯誤訊息
9-1、JS的錯誤訊息
JS中,抓取錯誤訊息 - catch
> function hi() {
> // Exception
> throw "aaaa" -> throw是把一個錯誤丟出來
> }
>
> try { -> 嘗試執行下面的fc
> hi()
> catch (e) { -> 如果有錯,做下面的事情
> console.log("error")
> }
> }
9-2、Ruby
Ruby中,抓取錯誤訊息 - rescue
> def bmi_calc(w, h)
> w / h -> 不要把錯誤判斷寫在這,因為讓其他人來幫忙判斷是否錯誤
> end
>
> begin
> puts bmi_calc(180, 70)
> rescue -> 救援功能,如果輸入值有問題,執行下面那一段
> puts "error"
> end
rescue簡化寫法
> def bmi_calc(w, h)
> w / h
> rescue => exception -> exception寫法
> puts "error"
> end
10、幫陣列、字串擴充功能
10-1、JS的prototype
JS用prototype可以幫物件、陣列、字串…加功能
> String.prototype.is_valid = 123
>
> console.log("a03456".is_valid) # 123
10-2、ruby的class
使用class可以幫任何物件加上功能
> class String
> def is_valid
> p 123
> end
> end
>
> p "a03456".isis_valid # 123