Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Conditionals, Iterators & BlocksWith Hashes & Arrays
Conditionals
Conditionals: ifif age > 17	puts “can vote”endif age > 17	puts “can vote”else	puts “attends school”endStatement Modifiers:y = 7 if x == 4Other Syntax:if x == 4 then y = 7 end
TruthTruth: Everything is true except for:false nilTherefore0 is true“” is trueChecking for false:if !(name == “superman”) …if not (name == “superman”) …
Unless“unless” provides us with another way of checking if a condition is false:unless superpower == nil	status = “superhero”end
Casecase superherowhen “superman”		 city = “metropolis”when “batman”		 city = “gotham_city”else			city = “central_city”end
Case Refactoringcity = case superherowhen “superman”		 “metropolis”when “batman”		 “gotham_city”else			 “central_city”end
Iterators
Iterators: Conditional Looping“while” allows us to loop through code while a set condition is truex = 1while x < 10	puts x.to_s + “ iteration”x += 1end
Creating a new arrayx = [1, 2, 3, 4]=> [1, 2, 3, 4]x = %w(1 2 3 4) => [“1”, “2”, “3”, “4”]chef = Array.new(3, “bork”)=> [“bork”, “bork”, bork”]
Accessing Array Valuesa = [ "a", "b", "c", "d", "e" ] a[0] #=> "a”a[2] #=> "c”a[6] #=> nila[1, 2] #=> ["b", "c”]a[1..3] #=> ["b", "c", "d”]a[1…3] #=> ["b", "c"]
Operations on Arrays[ 1, 2, 3 ] * 3 => [1, 2, 3, 1, 2, 3, 1, 2, 3][ 1, 2, 3 ].join(“,”)"1,2,3”[ 1, 2, 3 ] + [ 4, 5 ] => [1, 2, 3, 4, 5][ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]=> [3, 3, 5][ 1, 2 ] << "c" << "d" << [ 3, 4 ] => [1, 2, "c", "d", [3, 4]]
Creating a Hashh = { "a" => 100, "b" => 200 }h[“a”]h = { 1 => “a”, “b” => “hello” }h[1]
Operations on Hashes: Mergeh1 = { "a" => 100, "b" => 200 } => {"a"=>100, "b"=>200}h2 = { "b" => 254, "c" => 300 }=>{"b"=>254, "c"=>300}h3 = h1.merge(h2)=> {"a"=>100, "b"=>254, "c"=>300}h1=> {"a"=>100, "b"=>200}h1.merge!(h2)=> {"a"=>100, "b"=>254, "c"=>300}
Operations on Hashesh = { "a" => 100, "b" => 200 } h.delete("a”)h = { "a" => 100, "b" => 200, "c" => 300, "d" => 400 }letters = h.keys h = { "a" => 100, "b" => 200, "c" => 300 } numbers = h.values
Times5.times{ puts “hello” }99.times do |beer_num| 		puts "#{beer_num} bottles of beer”end
Eachsuperheroes = [“catwoman”, “batman”,  “wonderwoman”]superheroes.each { | s | puts “#{ s } save me!” }wonderwoman save me!batman save me!catwoman save me!dogs = ["fido", "fifi", "rex", "fluffy"]dogs_i_want = []dogs.each { |dog| dogs_i_want.push(dog) if dog != "fluffy" }>> dogs=> ["fido", "fifi", "rex", "fluffy"]>> dogs_i_want=> ["fido", "fifi", "rex"]
Blocks
Blocksdef dos_veces    yield    yieldenddos_veces { puts "Hola” }HolaHolaYield executes the blockThis is a Block!{
Yield with Parametersdef bandsyield(“abba”, “who”)endbands do |x,y| puts x,y endabbawhoYield sends its parameters as arguments to the blockyield(“abba”, ”who”) sends “abba” and “who” to |x, y|x is set to “abba”y is set to “who”
Block Syntax{ |x| puts x}is the same as:do |x| 	puts xend
Performance Monitor: Blocks in PracticeFinding the bottleneck in a slow application
StubsSyntax:A.stub!(:msg).and_return(:default)A.stub!(:msg).with(1).and_return(:default)
Stubbing TimeHow can we do this to help with Time.now?t = Time.nowt + 10 #adds 10 secondsStubbing Time:Time.stub!(:now).and_return{fake_time += 10}
How to Use Stubs in a Test:describe “Time stub” doit “should increment mock_time by 10 seconds” do fake_time = 0Time.stub!(:now).and_return { fake_time += 10 }Time.now.should == 10Time.now.should == 20endend
Your Turn
Homework	Chapters:6.1-6.39.1-9.3Koans:-about_blocks -about_iteration-about_control_statements-about_array_assignment-about_arrays-about_hashes

More Related Content

2 Slides Conditionals Iterators Blocks Hashes Arrays

  • 1. Conditionals, Iterators & BlocksWith Hashes & Arrays
  • 3. Conditionals: ifif age > 17 puts “can vote”endif age > 17 puts “can vote”else puts “attends school”endStatement Modifiers:y = 7 if x == 4Other Syntax:if x == 4 then y = 7 end
  • 4. TruthTruth: Everything is true except for:false nilTherefore0 is true“” is trueChecking for false:if !(name == “superman”) …if not (name == “superman”) …
  • 5. Unless“unless” provides us with another way of checking if a condition is false:unless superpower == nil status = “superhero”end
  • 6. Casecase superherowhen “superman” city = “metropolis”when “batman” city = “gotham_city”else city = “central_city”end
  • 7. Case Refactoringcity = case superherowhen “superman” “metropolis”when “batman” “gotham_city”else “central_city”end
  • 9. Iterators: Conditional Looping“while” allows us to loop through code while a set condition is truex = 1while x < 10 puts x.to_s + “ iteration”x += 1end
  • 10. Creating a new arrayx = [1, 2, 3, 4]=> [1, 2, 3, 4]x = %w(1 2 3 4) => [“1”, “2”, “3”, “4”]chef = Array.new(3, “bork”)=> [“bork”, “bork”, bork”]
  • 11. Accessing Array Valuesa = [ "a", "b", "c", "d", "e" ] a[0] #=> "a”a[2] #=> "c”a[6] #=> nila[1, 2] #=> ["b", "c”]a[1..3] #=> ["b", "c", "d”]a[1…3] #=> ["b", "c"]
  • 12. Operations on Arrays[ 1, 2, 3 ] * 3 => [1, 2, 3, 1, 2, 3, 1, 2, 3][ 1, 2, 3 ].join(“,”)"1,2,3”[ 1, 2, 3 ] + [ 4, 5 ] => [1, 2, 3, 4, 5][ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]=> [3, 3, 5][ 1, 2 ] << "c" << "d" << [ 3, 4 ] => [1, 2, "c", "d", [3, 4]]
  • 13. Creating a Hashh = { "a" => 100, "b" => 200 }h[“a”]h = { 1 => “a”, “b” => “hello” }h[1]
  • 14. Operations on Hashes: Mergeh1 = { "a" => 100, "b" => 200 } => {"a"=>100, "b"=>200}h2 = { "b" => 254, "c" => 300 }=>{"b"=>254, "c"=>300}h3 = h1.merge(h2)=> {"a"=>100, "b"=>254, "c"=>300}h1=> {"a"=>100, "b"=>200}h1.merge!(h2)=> {"a"=>100, "b"=>254, "c"=>300}
  • 15. Operations on Hashesh = { "a" => 100, "b" => 200 } h.delete("a”)h = { "a" => 100, "b" => 200, "c" => 300, "d" => 400 }letters = h.keys h = { "a" => 100, "b" => 200, "c" => 300 } numbers = h.values
  • 16. Times5.times{ puts “hello” }99.times do |beer_num| puts "#{beer_num} bottles of beer”end
  • 17. Eachsuperheroes = [“catwoman”, “batman”, “wonderwoman”]superheroes.each { | s | puts “#{ s } save me!” }wonderwoman save me!batman save me!catwoman save me!dogs = ["fido", "fifi", "rex", "fluffy"]dogs_i_want = []dogs.each { |dog| dogs_i_want.push(dog) if dog != "fluffy" }>> dogs=> ["fido", "fifi", "rex", "fluffy"]>> dogs_i_want=> ["fido", "fifi", "rex"]
  • 19. Blocksdef dos_veces yield yieldenddos_veces { puts "Hola” }HolaHolaYield executes the blockThis is a Block!{
  • 20. Yield with Parametersdef bandsyield(“abba”, “who”)endbands do |x,y| puts x,y endabbawhoYield sends its parameters as arguments to the blockyield(“abba”, ”who”) sends “abba” and “who” to |x, y|x is set to “abba”y is set to “who”
  • 21. Block Syntax{ |x| puts x}is the same as:do |x| puts xend
  • 22. Performance Monitor: Blocks in PracticeFinding the bottleneck in a slow application
  • 24. Stubbing TimeHow can we do this to help with Time.now?t = Time.nowt + 10 #adds 10 secondsStubbing Time:Time.stub!(:now).and_return{fake_time += 10}
  • 25. How to Use Stubs in a Test:describe “Time stub” doit “should increment mock_time by 10 seconds” do fake_time = 0Time.stub!(:now).and_return { fake_time += 10 }Time.now.should == 10Time.now.should == 20endend

Editor's Notes

  1. Conditionals are key to being able to make decisions in a programleft looks like every other languageparentheses are optional in ruby make sure to do ==, = is an assignment, == is a conditional testExplain putsright is a little different…people in ruby don’t like to type…english readableA statement modifier lets you move control structures at the end of an expression.
  2. Unlike some languages with the 0 and empty string! Binds more tightly than than the “not” keyword so you do need parentheses for example 1, but don’t need parentheses for example 2
  3. Unless can be awkward, especially with else. Usually you’ll want to use if for conditionals with else clauses.Occasionally unless is more readable:unless something is nil
  4. Alot of the time you will be using an array when you iterate over somethingAn array is just a list of items.Every spot in the list acts like a variable and you can make each spot point to a different objectW means wordsArray is a class, needs to start with capital letter
  5. IRBif you go off the array it will be nil
  6. join is cool because it makes a string for youshovel operatormultidimensional array
  7. Does anyone know what a hash is? associative array collection of key-value pairskeys can be numbers or strings Difference from an Array
  8. merge takes the value from the second hashmerge! changes h1
  9. you would think that delete should need a bang to change the hash, but delete doesn’t exist with a bangdelete returns the value
  10. 5 is an object that is an instance of the integer classtimes is a method of the 5 objecttimes is a method on an object that is an instance of integer
  11. it does the block of code three timesit is very rare that you will see a while loop in ruby...you can do the loops we did earlier, but rubyists will mock you.
  12. What is a block? It is the ability to take a block of code, wrap it up in an object and pass it to a method. Then you can run the block of code within the method any time you want…sometimes twice! The result is kind of like sending a method to a method, except that a block isn’t bound to an object like a method is – it is an object. So what? Why use blocks?elegant syntax for iteratorsBecause there are some things that only blocks can do, like being passed to a method and being returned by a method.
  13. two ways to declare a blockuse curly brackets for single lines of codeuse do end for multi lines of code