Skip to content

Instantly share code, notes, and snippets.

@DavidRails
Created October 22, 2018 11:00
Show Gist options
  • Save DavidRails/28cdbf5073dd557d33082a9465f94e5b to your computer and use it in GitHub Desktop.
Save DavidRails/28cdbf5073dd557d33082a9465f94e5b to your computer and use it in GitHub Desktop.
Ruby practice
# 練習:請印出從 1 到 100 之間所有的單數。
array_1_to_100=[*1..100]
array_1_to_100_odd=array_1_to_100.select{|a| a%2==1}
p array_1_to_100_odd
# 練習:請印出從 1 到 100 之間所有的單數的總和。
sum=0
for i in 1..100 do
sum=sum+i if i%2==1
end
p sum
# 練習:改良版土砲 times 方法
#5.my_times { |i| puts i } # 印出數字 0 ~ 4
for i in 0..4 do
puts i
end
# 練習:土砲 select 方法
#[1, 2, 3, 4, 5].my_select { |i| i.odd? } # 只印出單數 1, 3, 5
array_1_to_5_odd=[]
for i in 1..5 do
array_1_to_5_odd<<i if i%2==1
end
p array_1_to_5_odd
# 也看了 Scaffold model/view/controller 的 code 有比較之前了解,特別是在class/module和,riethods的部份,
# 但是在(1) Rails API
# (2) View .erb和 .jbuilder 因為沒有前端的背景,所以不了解
# (3) symbol 的用法似乎會被當作method 像是before_action:set_post,only 〔:show, edit,:update, destroy],
# 這部份也不了解,下次上課再請教您,謝謝。
@kaochenlong
Copy link

# ---------------------------------------------------------------------
# 練習:請印出從 1 到 100 之間所有的單數。
# ---------------------------------------------------------------------

array_1_to_100=[*1..100]
array_1_to_100_odd=array_1_to_100.select{|a| a%2==1}
p array_1_to_100_odd

# 改寫如下

p [*1..100].select{|a| a % 2 == 1}

# 建議:
# 1. 這邊 array_1_to_100 跟 array_1_to_100_odd 都是只用一次的區域變數
#    通常不會刻意多做一個區域變數出來放,可以直接整個串在一起就行了
# 2. 像 a%2==1 這樣的寫法雖然可正常執行,但我會建議把它寫得「開一點」
#    像是 a % 2 == 1 這樣,在視覺上會比較舒服一點

# ---------------------------------------------------------------------
# 練習:請印出從 1 到 100 之間所有的單數的總和。
# ---------------------------------------------------------------------

sum=0
for i in 1..100 do
sum=sum+i if i%2==1
end
p sum

# 改寫如下

sum = 0
for i in 1..100 do
  sum = sum + i if i % 2 == 1
end
p sum

# 建議:
# 1. 同上,適當的加入空格可以讓程式碼看起來舒爽一點
# 2. 加入縮排可以讓程式碼看起來更有結構
# 3. 可以用更 Ruby 風味的寫法如下:

p [*1..100].select { |x| x.odd? }.sum

# ---------------------------------------------------------------------
# 練習:改良版土砲 times 方法
#5.my_times { |i| puts i }                 # 印出數字 0 ~ 4
# ---------------------------------------------------------------------

for i in 0..4 do
puts i
end

# 改寫如下

class Integer
  def my_times
    i = 0
    while self > i
      yield i
      i += 1
    end
  end
end

5.my_times { puts 123 }

# 建議:
# 這題的難度比較高一點,需要理解 open class 跟 block,同時還需要稍微知道迴圈的寫法

# ---------------------------------------------------------------------
# 練習:土砲 select 方法
# [1, 2, 3, 4, 5].my_select { |i| i.odd? }  # 只印出單數 1, 3, 5
# ---------------------------------------------------------------------

array_1_to_5_odd=[]
for i in 1..5 do
array_1_to_5_odd<<i if i%2==1
end
p array_1_to_5_odd

# 改寫如下

class Array
  def my_select
    result = []
    self.each do |x|
      result << x if yield x
    end
    result
  end
end

p [1, 2, 3, 4, 5].my_select { |i| i.odd? }

# 建議
# 同上題,這題的難度也有點高,需要理解 open class 跟 block,同時需要知道利用 block 的回傳值來做處理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment