Download presentation
Presentation is loading. Please wait.
Published byKathryn Facey Modified over 9 years ago
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.