迴圈 <> 惡魔風腳開踢!比香吉士的眉毛還會轉

https://ithelp.ithome.com.tw/upload/images/20200915/20128363mRHsOAXgVa.jpg

[Day07] 香吉士的眉毛是不是跟迴圈很像呢?

講完了 if/else 判斷式,今天要介紹的是~迴~圈!(音樂下)

在學程式語言之前,其實就有聽過迴圈(Loop)這個詞了,記得當時感覺是一個非常高大上的存在,不過在真正學了迴圈以後,才發現天啊也太好用了吧!根本是新手工程師的好麻吉!

迴圈是一種只出現一次,但可能會連續執行多次的程式碼,它在技術圈內可說是炙手可熱,由於這種優秀的特性,讓我們在 coding 時能避免重複寫相同的 code ,充分發揮懶惰的美德,這是多麽美好的事情啊!這年頭,沒有迴圈,誰敢說自己是程式語言?

通常當需要把一個集合裡的元素一個個拿出來,並執行特定且重複的動作時,就會利用迴圈來幫我們達成目的。

在 Ruby 裡,有 5 種常見的迴圈:

  • for loop
  • while lopp
  • times
  • upto/downto
  • iteration

忘了說一件很重要的事,剛剛有提到由於迴圈會連續執行多次,所以在撰寫時必須要告訴它什麼時候要停下來,不然就會像這隻勤勞的小傢伙:

那麼,要怎麼讓天竺鼠停下來呢?(先喝口茶)(被揍!)
簡單來說就是要指定條件,以我知道的有 3 種:

  • 指定執行次數
  • 指定特定條件
  • 指定某個集合內的所有元素

實際用法我會在下面一一介紹,時間緊迫,趕快來看看吧!

for loop

for loop 是一種指定執行次數的迴圈,不過由於要執行的次數會相當於集合內的元素個數,在一般情況下,不需要特別指定執行次數,當集合內的元素都執行過一次後,迴圈就會自動停止了。

我們來看看實際的例子,假設有一個陣列:

1
generals = ["赤犬", "黃猿", "青雉", "藤虎", "綠牛"]

for 迴圈把大將們一個個丟出來吧!(過肩摔)

1
2
3
4
5
6
7
8
9
10
for general in generals
puts general # 每次要執行的動作
end

# 依序印出:
赤犬
黃猿
青雉
藤虎
綠牛

for 迴圈會把一個集合裡的元素一個個丟出來,在最後一個元素執行結束後,迴圈也會隨即停止。


while loop

while loop 是一種指定執行條件的迴圈,和 for 迴圈的差別是,它需要有一個停下來的條件,不然就會停不下來啊!(莫忘天竺鼠)

我們一樣來看看實際的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
bendon_count = 1

while bendon_count < 4
puts "老闆再來一份!我已經吃完#{bendon_count}個便當了"
bendon_count += 1
end

# 依序印出:
老闆再來一份!我已經吃完1個便當了
老闆再來一份!我已經吃完2個便當了
老闆再來一份!我已經吃完3個便當了

# 舉例靈感來自一個每天吃雙拼便當的同學,我想 3 個便當他也是沒問題的!

bendon_count 在一開始的時候為 1 ,然後每次跑一次迴圈後,bendon_count 就會增加 1 ,因此當 bendon_count 的值在 4 以下時,迴圈會繼續執行,直到 bendon_count 的值等於 4 才會停下。

小心不要變成無窮迴圈!

條件要寫在迴圈裡面!
條件要寫在迴圈裡面!
條件要寫在迴圈裡面!

這件事真的非常重要所以要說三次,剛剛的例子如果寫成這樣:

1
2
3
4
5
6
bendon_count = 1

while bendon_count < 4
puts "老闆再來一份!我已經吃完#{bendon_count}個便當了"
end
bendon_count += 1 # 不小心寫在外面了!!!

在這個迴圈裡,counter += 1 是我設定的條件,為的是讓迴圈最後會在 bendon_count = 4 停下來。

不過條件如果寫在迴圈外面,對這個 while 迴圈來說,它就不知道什麼時候該停下來,然後…就會一直跑…一直跑…


times

times 的語法非常好懂,就和英文裡在表示「乘、次數」的意思一樣:

1
2
3
4
5
6
7
8
3.times do
puts "賺錢靠算數,投胎靠技術"
end

# 依序印出:
賺錢靠算數,投胎靠技術
賺錢靠算數,投胎靠技術
賺錢靠算數,投胎靠技術

至於這邊 do..end 的語法,在後面幾天會有更詳細的介紹。


upto/downto

upto/downto 的概念更簡單了,就是依照順序跑迴圈,你要它正就正,要反就反。

1
2
3
4
5
6
7
8
9
10
1.upto(5) do |i|
puts "開始計時...#{i}"
end

# 依序印出:
開始計時...1
開始計時...2
開始計時...3
開始計時...4
開始計時...5

也可以反過來:

1
2
3
4
5
6
7
8
9
10
5.downto(1) do |i|
puts "倒數計時...#{i}"
end

# 依序印出:
倒數計時...5
倒數計時...4
倒數計時...3
倒數計時...2
倒數計時...1

甚至字串也可以!

1
2
3
4
5
6
7
8
9
10
"a".upto("e") do |i|
puts "開始計時...#{i}"
end

# 依序印出:
開始計時...a
開始計時...b
開始計時...c
開始計時...d
開始計時...e

不過字串用 downto 會失敗,之後再來研究!

老實說,我自己在實務上似乎很少用 upto/downto ,常常都是用範圍技 1..5.each 解決,之後應該偶爾要把它拿出來用(筆記)


Iteration

最後一種迴圈,又被稱為**迭代(iteration)**,不過我會把它歸類為一種陣列的方法(method),它的特性是把集合裡的所有元素都拿出來執行一次(聽起來怎麼跟 for 迴圈蠻像)

一樣來看個例子!如果我們想知道草帽海賊團裡有哪些成員,可以這樣做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
crew = ["魯夫", "索隆", "烏索普", "娜美", "香吉士", "喬巴", "羅賓", "佛朗基", "布魯克", "吉貝爾"]

crew.each do |partner|
puts partner
end

# 依序印出:
魯夫
索隆
烏索普
娜美
香吉士
喬巴
羅賓
佛朗基
布魯克
吉貝爾

全員到齊!不得不說 .each 是不是很厲害呢?實務上會經常和它打交道的!


今天就先到這邊啦!大家要記得常用迴圈幫助自己少寫重複的 code 喔!明天會繼續介紹美麗的 Ruby 語言!

流程控制 <> 只要有風和海,我就有辦法航行!

[Day06] 風雷雨晴,海上的天氣由我決定!

來到了第 6 天,今天要跟大家介紹的是娜美的天氣棒 (咳咳咳) 我說的是 流程控制(Flow Controller)

只要進入程式語言的世界,就一定會經常碰到流程控制,在 Ruby 裡我們使用 if 判斷式來讓電腦知道,在哪些條件滿足時,要採取什麼樣的行為。


一開始,先分享一則有趣的小故事給大家:

事情是這樣的,某天有一位先生下班正要回家,太太打電話給他說:「回家的路上幫忙買 1 斤包子回來,如果有看到西瓜的話,就買 1 個。」說完就掛掉了電話,結果先生回到家後,太太發現他居然只買了 1 個包子,大為光火,一番詢問後…

先生委屈地表示,因為他在路上有看到西瓜…(繼續挨揍中)

上面這個小故事,可以看出這位先生正是巧妙地運用了流程控制的思考方式:

1
2
3
4
5
6
7
西瓜 = 1

if 西瓜 = 1
buy 1 個 包子
else
buy 1 斤 包子
end

不過如果照著上面這樣寫,實際上是會出錯的,因為在 if 後面應該要是一個進行比較的條件:

1
2
3
4
5
6
7
西瓜 = 1

if 西瓜 == 1 # 新手常常會寫錯的地方
buy 1 個 包子
else
buy 1 斤 包子
end

儘管程式寫對了,回家後這位先生可能還是會被太太念怎麼只買一顆包子吧…(請多保重)


只有這樣不然就那樣

對於愛恨分明的 if.. else.. 判斷式來說,就是非黑即白的二分法:

以經典的《霹靂火》舉例:

1
2
3
4
5
6
7
心情 = 金每送

if 心情 == 不爽
puts "給你一支番仔火,跟一桶汽油"
else
puts "代誌過去安捏丟厚"
end

事情解決的方式就只有兩種結局…要怎麼選,就要看對方的心情了


如果這樣就這樣,但那樣的話就那樣,還有…到底是怎樣?!

if 的判斷式不只有兩種時,結果就會變得很派(?),這時候就無法用簡單的二分法處理了,而是要使用 elsif 來增加判斷的條件,譬如:

1
2
3
4
5
6
7
8
9
10
11
age = 10

if age > 0 && age <= 3
puts "Baby"
elsif age > 3 && age <= 10
puts "Kids"
elsif age > 10 && age <= 17
puts "Teenager"
else
puts "Adult"
end

小提醒:在設定一個以上的條件時,不是用 else ifelseif ,而是 elsif ,中間有省略一個 e 喔!撰寫時請多加留意!


把 if 放到後面

如果 if 判斷式的條件很少,只夠寫一行程式碼:

1
2
3
if age >= 18
puts "adult"
end

這時候我們就可以把 if 判斷式接到後面去,變得很像英文的倒裝句:

1
puts "adult" if age >= 18

也可以用 Case/When 來寫看看

如果真的有太多的條件要判斷時,除了使用 if.. elsif.. 以外,還可以用 case.. when.. 這種 Ruby 語法糖衣,它的使用情境與 if 判斷式並沒有不同。

只是當存在太多條件時,就可以考慮把 if .. elsif.. 改寫成 case.. when.. 的形式,讓程式碼更好閱讀。

譬如:

1
2
3
4
5
6
7
8
9
10
11
12
懸賞 = 3 億貝里

case 懸賞
when 0..1 億貝里
puts "海賊新人"
when 2..3 億貝里
puts "超新星"
when >= 4 億貝里
puts "七武海"
else
puts "雜魚一枚"
end

這裡的 .. 是 Ruby 裡特有的範圍(Range)用法,只要在 .. 兩側放上首尾的字元,就可以用來表示一段區間的數字或字串了。


三元運算子

三元運算子(ternary operator)是一種由 ?: 區隔兩種條件的表達方式,雖然名字叫運算子,但它實際上更接近流程控制的條件判斷,譬如:

1
2
3
4
5
6
x = 3
if x > 3
y = "foo"
else
y = "bar"
end

如果以三元運算子來改寫會更精簡:

1
2
x = 3
y = ( x > 3 ) ? "foo" : "bar"

不過,撰寫程式時建議要優先考量可讀性,不要覺得三元運算子很酷,或是能少掉很多行程式碼就立馬使用三元運算子,結果過幾天完全看不懂自己在寫什麼,慎之!慎之!


今天就先到這邊啦!相信大家都已經學會使用流程控制了,以後上街買東西就可以輕鬆派上用場啦!(逃)

運算子 <> 彈無虛發!一起和 GOD烏索普覺醒見聞色霸氣吧!

https://ithelp.ithome.com.tw/upload/images/20200913/20128363EEgeX1wliz.jpg

[Day05] 風向自西偏東,些許順風,風力 4 級。。。

海賊王的德雷斯羅薩島篇,如果烏索普沒有擊敗砂糖,其後果是難以預料的,嚴重的話可能會導致全員戰敗,不過要如何順利擊中目標呢?必定要有一番縝密的計算吧?運算子(operator)就是其中不可或缺的概念,一起來了解 Ruby 裡的運算子吧!

比較運算子

顧名思義,比較運算子(Comparison Operators)用於比較符號左右兩邊的東西,經常會被用在流程控制,許多比較運算子和我們在數學課上學到的都一樣:

1
2
3
4
a <  b      # 小於
a <= b # 小於等於
a > b # 大於
a >= b # 大於等於

等號 ==

前面有介紹過,一個等號 = 是指定變數的值,屬於賦值運算子(Assignment Operators)的一種,譬如:

1
2
a = 5
b = "5"

不過,兩個等號 == 就是比較運算子的一種了,我們會用它比較兩個元素是否相等:

1
2
3
4
5
6
7
8
9
10
a = 5
b = "5"

a == b # 比較是否相等
=> false

a != b # 比較是否不相等
=> true

# 字串和數字當然不一樣!

至於三個等號 === ,目前我還沒有很清楚,只知道可以用來呼叫 Proc,與 == 比較的東西也不太一樣,之後有好的例子會再介紹它!


邏輯運算子

邏輯運算子(Logical Operators)常見的有 &&||! 效果等同於andor not,不過符號有較高的優先權(precedence),話不多說我們直接看 code:

1
2
3
4
5
6
a = 3
b = 2

a && b # a and b
a || b # a or b
!a # not a
  • && 是用來確認一串條件判斷式之中是否有 falsenil ,只有全部為 true,才會通過條件判斷。
  • a || bab 其中一個成立即可,同時若 atrue 就不用判斷 b;如果 afalse 才會判斷 b
  • !a:不是 a

為了讓初學 Ruby 的朋友可以看懂下面的例子,在這邊我決定先偷跑一下,在 Ruby 裡的流程判斷會這樣寫:

1
2
3
4
5
if #假設一個條件 => 可能會得到 true 或 false
# 結果為 true 就執行這行
else #否則
# 結果為 false 執行這行
end

好的,我看在座的各位骨骼清奇,根骨極佳,應該都是百年難得一遇的練武奇才,想必就算看不懂我在寫什麼也能迅速了解概念,接著馬上來看看 && 的實際例子:

A && B

1
2
3
4
5
6
7
8
9
10
a = 0
b = 1

if (a == 1 && b % 2 == 1)
p "True!"
else
p "False!"
end

"False!"

由於 a == 1 就已經是 false,所以 && 那行的結果為 false,因此會走另一條路,最終印出了 false

如果重新指定 ab 的值,再執行一次判斷式的話:

1
2
3
4
5
6
7
8
9
10
a = 1
b = 3

if (a == 1 && b % 2 == 1)
p "True!"
else
p "False!"
end

"True!"

就會印出 "True" 了!


A ||= B

如果在 Ruby 裡看到某個變數後面寫 ||= ,就表示:當變數是 nilfalse 時,就把這個變數指定為 = 後面的值。

直接看 code 可能更清楚:

a 有值的情況:

1
2
3
4
5
a = 1
a ||= 2

a
=> 1

afalse的情況:

1
2
3
4
5
a = false
a ||= 2

a
=> 2

算術運算子

另外還有一些比較特殊的:算術運算子(Arithmetic Operators),像是 +-*% 這些常見的算術符號,在 Ruby 裡,他們同時也是方法(method)的一種!

1
2
3
4
5
6
4 + 2  => 6    # 加法
4 - 2 => 2 # 減法
4 * 2 => 8 # 乘法
4 / 2 => 2 # 除法
4 % 2 => 0 # 得出餘數
4 ** 2 => 16 # 得平方數

在 Ruby 裡如果要呼叫方法,會寫:

物件 + . + 某個方法

所以上面那幾行實際上長這樣:

1
2
3
4
5
6
4.+(2)
4.-(2)
4.*(2)
4./(2)
4.%(2)
4.**(2)

可以看到這些算術符號其實都是被 4 所呼叫的方法,而 2 則是帶入的參數,Ruby 的方法還有其他更神奇的地方!過幾天會跟大家介紹!

另外關於 Ruby 的物件,後面也會有獨立一篇詳細介紹(一直在挖坑)


運算子的優先權

要特別注意的是,在使用上如果是較複雜的情況時,不同的運算子之間會有優先權大小的差異,優先權的順序建議直接查閱文件,以免得到錯誤的結果。

參考資料: Ruby Operators


見聞色霸氣是不是覺醒了呢?
如果還沒的話,下篇會繼續說明流程控制的內容,明天見!

變數 <> 波瀾詭譎的程式之海總是充滿變數

[Day04] 鬼之島戰役最大的變數!

在 Ruby 如何宣告和使用變數

今天會繼續探討 Ruby 裡的變數,昨天有講到變數跟國中數學課學到的 x 和 y 一樣,都是為了把值先存起來,會使用= 來為變數指定值。

1
2
3
4
5
6
7
8
a = 1

接下來,我們拿變數 a 來進行運算:

a = a + 2

puts a
3

在這裡的意思是把原有的變數 a 加上 2,計算後會得到 3 ,然後再把 3 重新指定給 a,所以變數 a 的最後的值會是 3

另外 a = a + 2 這行也可以寫成:

1
a += 2

透過陣列甚至可以一次指定多個變數:

1
2
3
4
5
x, y, z = [1, 2, 3]

x => 1
y => 2
z => 3

假設有兩個變數 x 與 y ,如果要讓其對調,

可以利用另一個變數暫存:

1
2
3
4
5
6
7
8
9
x, y = [2, 3]
w = x
x = y
y = w

puts x
3
puts y
2

在 Ruby 的世界裡還可以這樣 #直接交換!

1
2
3
4
5
6
x, y = [2, 3]
x, y = y, x
puts x
3
puts y
2

常數

通常在定義類別、或是模組時,會使用常數(Costant)作為名稱,但規定是要用大寫字母開頭。

Pi = 3.1415

在 Ruby 的世界裡,常數是可以被修改的(會發生警告,但是可以執行)

1
2
3
4
5
6
A = 1

A = 2
warning: already initialized constant A
warning: previous definition of A was here
=> 2

龍哥:「變數就像標籤,本身沒有型態。」


變數命名慣例

對於變數命名,Ruby 生態圈有著慣例優於設定(Convention over Configuration)
的不成文傳統,大家 coding 時普遍會遵循某一套撰寫風格。

以下介紹兩種常見的命名方式:

駝峰式 (camelCase)

在 Java 和 JavaScript 較常看到這種寫法
例:firstName, parseDataString1

蛇式 snake_case:


所以我說那個蛇的部分?

Ruby 和 Python 較偏好使用這種命名風格
例:first_name , parse_data_string


虛擬變數

除此之外,還有一種被定義在 Ruby 內部的變數,稱做虛擬變數(Pseudo Variable),例如 nilselftruefalse 這些都是,它們有著特別的用途以及固定的意義表示,無法被更動。


變數可以運用的場景其實遠遠不僅於此,
後面還會再說明如何搭配運算子以及方法的使用,還是那句老話:

「有人就有變數,有變數就有江湖,人,就是江湖。」 (誤)

資料型態 <> Ruby 語言也有惡魔果實圖鑑

https://ithelp.ithome.com.tw/upload/images/20200911/20128363axIGxxLL6E.jpg

[Day03] 帶著愉悅的心情欣賞 Ruby 吧!

來到了第三天,要開始在 irb 裡試著輸入程式碼囉!來找出 Ruby 裡有哪些惡魔果實資料型態吧!

字串

字串(String)可以是「一個單字」或「一段文字」:

1
2
3
4
5
6
7
8
"Hello World".class
=> String

'你寫鐵人賽了嗎?'.class
=> String

"どうぞよろしくおねがいします".class
=> String

想要用單引號或是雙引號都是可以的!


數字

  • 整數 (Interger)
  • 浮點數 (Float)

就是你我都熟悉的 11 路公車(誤),數字又分成整數和浮點數兩種:

1
2
3
4
5
123.class
=> Integer

3.14.class
=> Float

(說個冷知識,大家知道為什麼印度人發明了數字,但它卻被稱做阿拉伯數字嗎?)


陣列

陣列(Array),不就是阿公常在用的分裝藥盒?每次可以按順序打開其中一格,避免大家忘記它長什麼樣子我來貼張圖:

它真的很方便,可以一次放入多個資料,然後用 [] 前後包起來,每組資料用,區隔,這樣阿公吃藥時就不會搞混啦!

話不多說直接進 irb 玩看看:

1
2
3
4
heros = ["琦玉", "傑諾斯", "龍捲"]

heros.class
=> Array

如此一來,變數 heros 就包含了 3 位英雄,分別是:

  • heros[0] = “琦玉”
  • heros[1] = “傑諾斯”
  • heros[2] = “龍捲”

電腦算東西的方式是從 0 開始算,所以陣列裡每個元素對應的位置也是 0, 1, 2, 3, 4…依序下去。


雜湊

在學 Ruby 之前,我對雜湊(Hash)完全不了解,後來發現其實就是改頭換面的陣列(?),它的語法是用{}前後包裹,裡面的資料是兩兩一組對應的 key 和 value

太複雜?沒關係我們直接看 code:

1
2
3
4
cat = {:name=>"阿肥", :type=>"橘貓"}

cat.class
=> Hash

也可以寫成:

1
cat = {name: "阿肥", type: "橘貓"}

Ruby 的新式寫法看起來是不是更棒。

在這個雜湊 cat 裡有兩個 key ,分別是 nametype ,而 "阿肥""橘貓" 則是其對應的 value。

雜湊裡的資料不需要按順序,每次要取用資料會用 key 去找:

1
2
3
4
5
cat[:name]
=> "阿肥"

cat[:type]
=> "橘貓"

不過如果拿著 value 去找 key 是找不到的。

1
2
cat["橘貓"]
=> nil

變數

說到變數(Variable)大家一定不陌生,它就是數學課上會的好朋友 x 或 y,我們總是會先假設 x 或 y 等於某個數字,然後再去計算結果,想起當年解函式的快樂了嗎(?)

1
2
3
4
a = 3

a
=> 3

在 Ruby 的世界也是一樣,會用 = 把東西指定給變數,在定義了一個變數之後,只要呼叫該變數,結果就會等同輸入等號右邊的東西。事實上,不一定只有數字能被指定給變數,今天提到的資料型態都可以拿來指定給變數。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
b = "認真刷題"

b
=> "認真刷題"

c = [1 ,2, 3]

c
=> [1, 2, 3]

d = {name: "阿肥", type: "橘貓"}

d
=> {:name=>"阿肥", :type=>"橘貓"}

要注意,如果不小心使用到 關鍵字 當作變數的名稱,可是會噴錯的噢!這點在各個程式語言應該都是一樣的。


補充一點,字串裡也可以帶入變數:

1
2
3
4
5
name = "阿肥"
=> "阿肥"

puts "早安! #{name}今天吃飯了嗎?"
早安! 阿肥今天吃飯了嗎?"

就先到這邊啦,不過如果跟我一樣是初學者,可能會看不懂今天寫的 .classnil 是什麼,不過別急別急,後面馬上就會討論到了,還有更多關於各種資料型別的規範以及方法在等著呢! Happy Coding!

環境安裝 <> 10個新手有9個會倒下

https://ithelp.ithome.com.tw/upload/images/20200910/20128363vd0DNGoGM4.jpg

[Day02] 安裝不順利就是要人命!

先從打開終端機開始吧!

對於沒學過程式語言的人而言,在終端機裡 coding 是一件非常陌生的事情,對於 code 的印象可能就跟半年前的我一樣,碰到電腦無法開機,打開安全模式卻淹沒在那一行行的指令裡,只有 Y/N 看得懂…

接下來會一步步安裝 Ruby 開發需要的環境,這邊我以 Mac/OS 作業系統做示範:

https://ithelp.ithome.com.tw/upload/images/20200909/20128363Ub9TSVxJk5.png
先在 Finder 打開「Utilities」檔案夾

https://ithelp.ithome.com.tw/upload/images/20200909/20128363kY2Be169Lz.png
然後開啟「Terminal」


安裝 HomeBrew

進入終端機後,建議先安裝 HomeBrew ,它是一款操作非常方便的套件管理工具。安裝 HomeBrew 請在終端機輸入:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

這邊如果有要求要輸入密碼的話,就是自己帳戶的密碼而已~

如果已經安裝好 HomeBrew ,之後就可以用它來裝很多套件了,安裝和解除安裝的方式如下:

1
2
brew install yarn  # 安裝 yarn
brew uninstall yarn # 解除安裝 yarn

安裝 RVM

簡單來說,RVM 是一款 Ruby 語言版本控制工具,讓開發者可以輕鬆做環境管理和切換。

由於不太可能同一時間只做一個專案,所以經常會碰到各個專案用了不同版本的 Ruby 在開發。但是,如果在電腦上直接安裝不同版本的 Ruby,可能會發生不必要的衝突,更別說那些分⽀實作品了(JRuby/mruby/IronRuby…etc)

為了避免把生命浪費在無意義的事情上(?) 好 RVM,不裝嗎?

安裝 RVM 只要兩行指令,請先輸入:

1
\curl -sSL https://get.rvm.io | bash -s stable

執行後會跳出失敗訊息,這是因為在安裝過程中因為少了 Key 導致無法連線,那就給它一組驗證 key 吧! 這組 GPG keys 是由 RVM 網站 提供,可以直接複製,然後在終端機輸入:

1
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E37D2BAF1CF37B13E2069D6956105BD0E739499BDB

這樣 RVM 應該就安裝完成了!


安裝 Ruby

接下來就可以用 RVM 安裝 Ruby 了:

可以先在終端機輸入 rvm list known 查看 RVM 目前支援哪些 Ruby 版本:

最上面的 # MRI Rubies 就是一般的 Ruby,可以找最新版本或依專案需求安裝,在終端機輸入:

1
rvm install 2.7.1

可以輸入 ruby -v 以檢查目前使用的 Ruby 版本,也可以用來確認是否有成功安裝 Ruby。

如果安裝了兩種以上的 Ruby 版本(輸入rvm list可以看到)

1
2
3
4
5
6
7
8
   ruby-2.6.5 [ x86_64 ]
ruby-2.6.6 [ x86_64 ]
ruby-2.7.0 [ x86_64 ]
=* ruby-2.7.1 [ x86_64 ]

# => - current
# =* - current && default
# * - default

前面帶有 =* 是系統目前使用的版本,如果要切換到其他的版本只要輸入:

1
rvm use 2.6.5 # 其他已有版本

就可以切換到 2.6.5 版本了!

到這邊為止,應該已經成功安裝好了 Ruby 的開發環境,接著試著在終端機輸入 irb,就可以在 irb 裡練習寫 Ruby 了!

印出 “Hello World!” 試試看吧!

1
print "Hello World!"

如果要離開 irb,只要輸入 exit 就可以了


第二天就先到這邊了,明天會開始介紹 Ruby 的語法,如果在安裝過程中真的碰到了問題,除了上網找資源排除外,也可以先到 Repl 試著練習寫 Ruby! Happy Coding!

開賽宣言與 Ruby 簡介 <> Hello, Ruby!

https://ithelp.ithome.com.tw/upload/images/20200909/20128363iaHQR6ySsV.jpg

[Day01] 出發啦!

開賽宣言

這篇系列文是我自己學習 Ruby 語法撰寫和概念的統整,慣例先來個宣言好了(喊聲),先簡單介紹一下,筆者我目前是五倍紅寶石 AstroCamp 第五屆的學員,由於受到同學們的拼勁影響,也為了紀錄自己轉職路上的學習歷程,於是決定參加 iT 邦鐵人賽!!!(忐忑)

想想人生真是不可思議,說實話,半年前的我真的沒想過,居然會參加技術圈這種一年一度的盛會,對著各位大大獻醜,過著每天 coding 的生活,不過到目前為止都還蠻喜歡的(笑)

30 個日子說長不長,但畢竟唯有整理過的東西才會永遠留下,就把鐵人賽當作每天都要做的 git commit 吧! 想想好像就輕鬆多了(?)


什麼是 Ruby? 它跟其他程式語言有什麼不同?

先說緣起,Yukihiro Matsumoto(松本行弘) 在 1995 年創造了 Ruby,當時的他希望能有一款讓工程師可以開心 coding 的程式語言,因此造就了 Ruby 成為了一款便於撰寫、也容易閱讀的特性,在語法上和其他程式語言也有很大的不同,對於半年前才決定要踏上轉職工程師這條路的我,應該算是個好消息(吧)

Ruby 是一種物件導向式的腳本語言(script language),在 Ruby 裡幾乎所有東西都是物件,關於物件導向的概念在後面會提一些,同時也是對 Programmer 最友善的程式語言,沒有之一,關於這件事,接下來就會慢慢看到 Ruby 它厲害的地方了! 敬請期待!


聽說網站開發是 Ruby 的強項?

在轉職前,我也是聽別人這麼說,但後來了解到 Ruby 其實可以泛用在資料分析、繪圖、3D 建模、系統管理、遊戲開發等不同的領域,這件事就和近幾年最熱門的 Python 被拿來做人工智能或深度學習一樣,每種程式語言都會有自己的生態圈,所謂的強或不強,就只是我們大多把 Ruby 拿來做網站開發而已,最常用的大概就是 Rails了。


第一天大概就先到這邊了!明天會開始進入 Ruby 的世界!