Presentation is loading. Please wait.

Presentation is loading. Please wait.

And other languages….  Selection Statements  Iterative Statements  Unconditional Branching  Not covered Guarded Commands.

Similar presentations


Presentation on theme: "And other languages….  Selection Statements  Iterative Statements  Unconditional Branching  Not covered Guarded Commands."— Presentation transcript:

1 and other languages…

2  Selection Statements  Iterative Statements  Unconditional Branching  Not covered Guarded Commands

3 if expr code end # newline after expr # false or nil, don’t execute, else do # no () around expr # end required even if only one statement in code if expr then code end if expr code else code end if expr1 code elsif expr2 code2 … else code end

4  Return value is last expression executed OR nil x=5 # topic: return values name = if x==1 then "Cyndi" else "Nancy" end puts name

5 if expr then code end  equivalent to: code if expr  Best practice: use when condition is trivial or normally true Perl also has this syntax

6 unless expr code end code unless expr tax = case income when 0..7550 income * 0.1 when 7550..30650 income * 0.15 when 3065..50000 income * 0.25 else income * 0.9 end also other forms of case, not covered Compare to switch. Consider language readabilty.

7 while expr do code end code while expr until expr do code end code until expr Pascal had repeat… until.

8 for var in collection do code end # do is optional, can use newline hash.each do |key, value| puts “#{key} => #{value}” end

9  Integer.times  Enumerable.each  Enumerable.Map  Integer.upto  make use of yield (next slide)  Examples 2.times { puts “OK” } array.each {|x| puts x } [5,10,15].map { |x| x*x*x } factorial = 1 2.upto(20) { |x| factorial *= x}

10  yield temporarily returns control from iterator to calling method  QUICK EXERCISE:  Trace the code on the next two slides. Turn in for class participation.  Format flexible… draw arrows etc, just show you understand

11  yield temporarily returns control from iterator to calling method def test puts "You are in the method" yield puts "You are again back to the method" yield end test {puts "You are in the block"}  method must be invoked with a block (otherwise, what would you yield to?) from: http://www.tutorialspoint.com/ruby/ruby_blocks.htm http://www.tutorialspoint.com/ruby/ruby_blocks.htm You are in the method You are in the block You are again back to the method You are in the block

12 def test yield 5 puts "You are in the method test" yield 100 end test {|i| puts "You are in the block #{i}"} You are in the block 5 You are in the method test You are in the block 100 Java = pull (caller controls iteration), Ruby = push (iterator controls iteration)

13  Silly code example. Write code that will display the modulo 15 of all numbers from 100 to 90. Your yield block should return two values (look up the syntax).  Example output: 100 modulo 15 is 10 99 modulo 15 is 9 98 modulo 15 is 8 97 modulo 15 is 7 96 modulo 15 is 6 95 modulo 15 is 5 94 modulo 15 is 4 93 modulo 15 is 3 92 modulo 15 is 2 91 modulo 15 is 1  Nothing to submit.

14  What’s really going on here? Language design: importance of blocks  Read: http://www.artima.com/intv/closures.html

15 Unconditional Branching  Transfers execution control to a specified place in the program  Represented one of the most heated debates in 1960’s and 1970’s  Well-known mechanism: goto statement  Major concern: Readability  Some languages do not support goto statement (e.g., Module-2, Java, Python, Ruby)  C# offers goto statement (can be used in switch statements)  Loop exit statements are restricted and somewhat camouflaged goto ’s

16  Language Concepts selection/conditionals return value iteration unconditional branching  Ruby if/elsif conditional return value expression modifier unless while/until for each yield


Download ppt "And other languages….  Selection Statements  Iterative Statements  Unconditional Branching  Not covered Guarded Commands."

Similar presentations


Ads by Google