Ruby Style and Project Organization
Method Extraction
Small methods make a project easier to scan, test, and reuse.
extraction
Move repeated calculations into a named method so the calling code reads like a sequence of decisions.
Method Extraction
method_extraction.rb
Replay: real traced execution (multi-file project)
def invoice_total(subtotal, tax_rate)
tax = (subtotal * tax_rate).round
subtotal + tax
end
subtotal = 80
tax_rate = 0.1
total = invoice_total(subtotal, tax_rate)
label = total >= 100 ? "large" : "standard"
puts "subtotal=#{subtotal}"
puts "tax_rate=#{tax_rate}"
puts "total=#{total}"
puts "label=#{label}"
def invoice_total(subtotal, tax_rate)
tax = (subtotal * tax_rate).round
subtotal + tax
end
subtotal = 40
tax_rate = 0.1
total = invoice_total(subtotal, tax_rate)
label = total >= 100 ? "large" : "standard"
puts "subtotal=#{subtotal}"
puts "tax_rate=#{tax_rate}"
puts "total=#{total}"
puts "label=#{label}"
def invoice_total(subtotal, tax_rate)
tax = (subtotal * tax_rate).round
subtotal + tax
end
subtotal = 120
tax_rate = 0.1
total = invoice_total(subtotal, tax_rate)
label = total >= 100 ? "large" : "standard"
puts "subtotal=#{subtotal}"
puts "tax_rate=#{tax_rate}"
puts "total=#{total}"
puts "label=#{label}"
subtotal ← 80, tax_rate ← 0.1
6subtotal→ 80 = 80 #@subtotal=40, 1207tax_rate→ 0.1 = 0.18total = invoice_total(subtotal80, tax_rate0.1)9label = total >= 100 ? "large" : "standard"tax ← 8
1def invoice_total(subtotal80, tax_rate0.1)2 tax→ 8 = (subtotal80 * tax_rate0.1).round3 subtotal80 + tax84endtotal ← 88, label ← standard
7tax_rate = 0.18total→ 88 = invoice_total(subtotal80, tax_rate0.1)9label→ standard = total88 >= 100 ? "large" : "standard"1011puts "subtotal=#{subtotal80}"12puts "tax_rate=#{tax_rate0.1}"13puts "total=#{total88}"14puts "label=#{labelstandard}"outputsubtotal=80 tax_rate=0.1 total=88 label=standard
subtotal ← 40, tax_rate ← 0.1
6subtotal→ 40 = 407tax_rate→ 0.1 = 0.18total = invoice_total(subtotal40, tax_rate0.1)9label = total >= 100 ? "large" : "standard"tax ← 4
1def invoice_total(subtotal40, tax_rate0.1)2 tax→ 4 = (subtotal40 * tax_rate0.1).round3 subtotal40 + tax44endtotal ← 44, label ← standard
7tax_rate = 0.18total→ 44 = invoice_total(subtotal40, tax_rate0.1)9label→ standard = total44 >= 100 ? "large" : "standard"1011puts "subtotal=#{subtotal40}"12puts "tax_rate=#{tax_rate0.1}"13puts "total=#{total44}"14puts "label=#{labelstandard}"outputsubtotal=40 tax_rate=0.1 total=44 label=standard
subtotal ← 120, tax_rate ← 0.1
6subtotal→ 120 = 1207tax_rate→ 0.1 = 0.18total = invoice_total(subtotal120, tax_rate0.1)9label = total >= 100 ? "large" : "standard"tax ← 12
1def invoice_total(subtotal120, tax_rate0.1)2 tax→ 12 = (subtotal120 * tax_rate0.1).round3 subtotal120 + tax124endtotal ← 132, label ← large
7tax_rate = 0.18total→ 132 = invoice_total(subtotal120, tax_rate0.1)9label→ large = total132 >= 100 ? "large" : "standard"1011puts "subtotal=#{subtotal120}"12puts "tax_rate=#{tax_rate0.1}"13puts "total=#{total132}"14puts "label=#{labellarge}"outputsubtotal=120 tax_rate=0.1 total=132 label=large