Home‎ > ‎Ruby‎ > ‎CodeAcademy Notes‎ > ‎

Blocks and Sorting



Why Methods?  (Subroutines)
def prime(n)
  puts "That's not an integer." unless n.is_a? Integer
  is_prime = true
  for i in 2..n-1
    if n % i == 0
      is_prime = false
    end
  end
  if is_prime
    puts "#{n} is prime!"
  else
    puts "#{n} is not prime."
  end
end

prime(2)
prime(9)
prime(11)
prime(51)
prime(97)
 # prints 2 is prime!
 #        9 is not prime.
 #        11 is prime!
 #        51 is not prime.
 #        97 is prime!

Method Syntax
def count  # start with "def"
  (1..10).each { |i| print "#{i} " }
  print "\n"
end        # end with "end"

count      # calls the method
           # prints 1 2 3 4 5 6 7 8 9 10

Parameter and Argument
def square(n) # inbound variables are defined in the brackets
  puts n ** 2
end
square(12)
              # prints 144

Splat!
def what_up(greeting, *bros) # *var = splat:
                             # when you dont know how many following arguments
                             # there will be
  bros.each { |bro| puts "#{greeting}, #{bro}!" }
end

what_up("What up", "Justin", "Ben", "Kevin Sorbo")
                            # prints: What up, Justin!
                            #         What up, Ben!
                            #         What up, Kevin Sorbo!

Return
def cube(n)
  return n ** 3 # return "returns" the value out of the method
end
output = cube(3)
puts output
puts cube(2)
                # prints 27
                #        8

Blocks are like nameless methods
1.times { # blocks are defined by "{}" or "do end"
  puts "I'm a code block!"
}

1.times { puts "As am I!" }
          # prints: I'm a code block!
          #         As am I!

how blocks differ from methods
# method that capitalizes a word
def cap(string)
  puts "#{string.upcase}"
end
cap("ryan") # prints "RYAN"
cap("jane") # prints "JANE"

# block that capitalizes each string in the array

["ryan", "jane"].each {|string|
  puts "#{string}"
} # prints ryan
  #        jane

Intro to Sorting
my_array = [3, 4, 8, 7, 1, 6, 5, 9, 2]  # unsorted array
my_array.sort.each { |x|                # sort array, and then print each value
 print "#{x} "
}
print "\n"
                                        # prints 1 2 3 4 5 6 7 8 9

Foundations
books = ["Charlie and the Chocolate Factory",
         "War and Peace",
         "Utopia",
         "A Brief History of Time",
         "A Wrinkle in Time"]
books.sort.each {|x| puts x} # sort works on long strings too.
 # Prints: A Brief History of Time
 #         A Wrinkle in Time
 #         Charlie and the Chocolate Factory
 #         Utopia
 #         War and Peace

The combined Comparison Operator
x = 1
y = 2
z = x <=> y # "<=>" is the comparison operator
w = y <=> x
r = y <=> y
print "1 <=> 2 = #{z} \n" # is -1
print "2 <=> 1 = #{w} \n" # is 1
print "2 <=> 2 = #{r} \n" # is 0

Reverse Sorting
def az(arr, rev=false) # accepts 2 var's, "rev" default val = false
  if rev
    arr.sort { |item1, item2| item2 <=> item1 }
  else
    arr.sort { |item1, item2| item1 <=> item2 }
  end
end

array = [2,4,6,8,1,3,5,7,9]

# 1. spelled out method:
puts "1. spelled out method"
forward  = az(array)
backward = az(array, true)

puts "A-Z: #{forward}"            # prints A-Z: 123456789
puts "Z-A: #{backward}"           # prints Z-A: 987654321
puts "---"

# 2. simple method:
puts "2. simple method"
puts "A-Z: #{az(array)}"          # prints A-Z: 123456789
puts "Z-A: #{az(array, true)}"    # prints Z-A: 987654321









Comments