Chapter 5: Fruitful Methods
5.1 Return values
e = Math.exp(1.0)
angle = Math::PI / 4; radius = 1;
height = radius * Math.sin(angle)
def area(radius)
a = Math::PI * radius * radius
return a
end
def area(radius)
return Math::PI * radius * radius
end
def absolute_value(x)
if x < 0
return -x
else
return x
end
end
def absolute_value(x)
if x < 0
return -x
elsif x > 0
return x
end
end
puts absolute_value(3)
puts absolute_value(-3)
puts absolute_value(0)
5.2 Program development
def distance(x1, y1, x2, y2)
return 0.0
end
dist = distance(1.0, 2.0, 4.0, 6.0)
def distance(x1, y1, x2, y2)
dx = x2 - x1
dy = y2 - y1
puts "dx is " + dx.to_s
puts "dy is " + dy.to_s
return 0.0
end
puts distance(1.0, 2.0, 4.0, 6.0)
def distance(x1, y1, x2, y2)
dx = x2 - x1
dy = y2 - y1
dsquared = dx*dx + dy*dy
puts "dsquared is " + dsquared.to_s
return 0.0
end
puts distance(1.0, 2.0, 4.0, 6.0)
def distance(x1, y1, x2, y2)
dx = x2 - x1
dy = y2 - y1
dsquared = dx*dx + dy*dy
result = Math.sqrt(dsquared)
return result
end
puts distance(1.0, 2.0, 4.0, 6.0)
5.3 Composition
require 'jch05.01.rb'
require 'jch05.02.rb'
def fred(xc, yc, xp, yp)
r = distance(xc, yc, xp, yp)
a = area(r)
return a
end
def fred(xc, yc, xp, yp)
return area(distance(xc, yc, xp, yp))
end
5.4 Overloading
5.5 Boolean expressions
fred = true
test_result = false
n = 4; x = 3;
even_flag = (n % 2 == 0)
positive_flag = (x > 0)
if even_flag
puts "n was even when I checked it"
end
5.6 Logical operators
x = 6
if x > 0
if x < 10
puts "x is a positive single digit."
end
end
5.7 Boolean methods
def single_digit?(x)
if x >= 0 and x < 10
return true
else
return false
end
end
def single_digit?(x)
return (x >= 0 and x < 10)
end
big_flag = !single_digit?(17)
puts single_digit?(2)
x = 6
if single_digit?(x)
puts "x is little"
else
puts "x is big"
end
5.8 More recursion
def factorial(n)
end
def factorial(n)
if n == 0
return 1;
end
end
def factorial(n)
if n == 0
return 1;
else
recurse = factorial(n-1)
result = n * recurse
return result
end
end
puts factorial(33)
5.9 Leap of faith
5.10 One more example
def factorial(n)
if n == 0
return 1
else
return n * factorial(n-1)
end
end
puts factorial(6)
def fibonacci(n)
if n == 0 or n == 1
return 1;
else
return fibonacci(n-1) + fibonacci(n-2)
end
end
puts fibonacci(6)
5.11 Glossary
5.12 Exercises
Friendly
links for Google “juice”