Control Flow
Case Expressions
Ruby case expressions choose a branch by matching a value.
case expression
A `case` expression compares one value against several `when` branches.
Case Expressions
case_intro.rb
Replay: real traced execution (multi-file project)
role = "editor"
message = case role
when "admin"
"full access"
when "editor"
"can update"
else
"read only"
end
puts "role=#{role}"
puts "message=#{message}"
role = "admin"
message = case role
when "admin"
"full access"
when "editor"
"can update"
else
"read only"
end
puts "role=#{role}"
puts "message=#{message}"
role = "guest"
message = case role
when "admin"
"full access"
when "editor"
"can update"
else
"read only"
end
puts "role=#{role}"
puts "message=#{message}"
role ← editor, message ← can update
1role→ editor = "editor" #@role="admin", "guest"23message→ can update = case roleeditor4 when "admin"5 "full access"6 when "editor"7 "can update"8 else9 "read only"10 end1112puts "role=#{roleeditor}"13puts "message=#{messagecan update}"outputrole=editor message=can update
role ← admin, message ← full access
1role→ admin = "admin"23message→ full access = case roleadmin4 when "admin"5 "full access"6 when "editor"7 "can update"8 else9 "read only"10 end1112puts "role=#{roleadmin}"13puts "message=#{messagefull access}"outputrole=admin message=full access
role ← guest, message ← read only
1role→ guest = "guest"23message→ read only = case roleguest4 when "admin"5 "full access"6 when "editor"7 "can update"8 else9 "read only"10 end1112puts "role=#{roleguest}"13puts "message=#{messageread only}"outputrole=guest message=read only
Match the Role
rolestarts aseditor.- The
casechecks eachwhenbranch. when "editor"matches.- The message becomes
can update. | Role | Message | | --- | --- | |admin|full access| |editor|can update| |guest|read only|
Exercise: case_intro.rb
Use a case expression to map a role to the correct access message