Grow.rb 〜例外処理とループ処理〜

本日はGrow.rbで例外処理とループ処理について学んできました!

以下はGrow.rbのイベントページです!

growrb.doorkeeper.jp

 

制御構文

まずはループ処理の流れを変えるメソッドについて確認しました!

以下は制御構文についてまとめてあるるりまのページです。

docs.ruby-lang.org

 混乱しがちなnext、breakについて整理できたし、throwは初めて知る事が出来ました!

 

next

nextはそのroopの下の処理をせず次に行きます

irb(main):001:0> (1..10).each do |i|
irb(main):002:1* if i.odd?
irb(main):003:2> next
irb(main):004:2> end
irb(main):005:1> puts i
irb(main):006:1> end
2
4
6
8
10
=> 1..10

 

 break

breakはそのroopを抜けます

irb(main):007:0> (1..10).each do |i|
irb(main):008:1* if i.odd?
irb(main):009:2> break
irb(main):010:2> end
irb(main):011:1> puts i
irb(main):012:1> end
=> nil

 

 Kernel#throw

複数のroopを一気に抜けるときはKernel#throwメソッドを使います。

コールバックを抜けるときも使うようです。

 

 

例外処理の構文

次に一般的な例外処理の構文について確認しました。

rescueに何も指定しなければStandard Errorがrescueされている状態です。

begin
  do_something
rescue 
  puts 'error'
end

rescueにExceptionを指定してしまうと、処理を止めるべきエラーでもrescueされてしまいまずいというお話もありました!

begin
  do_something
rescue Exception
  puts 'error'
end

 

 

 

 お題を解く

これらを確認した上で、お題を解いていきました!!

以下がそのリポジトリです!

github.com

 

お題を解いていく前に、予備知識としてキーワード引数についても解説していただきました!

 

普通の引数ではなくキーワード引数にしておくと、引数の順番に依存しなくなるというメリットがあります!

キーワード引数を何となく知ってる程度だったので、仕組みやメリットについて教えて頂きとても良かったです!

 

class Foo

def bar(arg1:, arg2: :bar, arg3: :nil)

puts art1

puts arg2

puts arg3

end

end

 

Foo.new.bar(arg3: :baz, arg1: :foo)

 =>

foo

bar

baz

 

 

 

さらに2個目のお題を解いていく前の予備知識としては、Procについて解説して頂きました!

 

Rubyはブロックにいろんな処理を渡せますが、変数にいれられません。

そこでProcを使います!

procはcallで呼ぶ事が出来ます。

irb(main):001:0> pro = -> { puts :ok }

=> #<Proc:0x00007fced324e4e8@(irb):1 (lambda)>

irb(main):002:0> pro.call

ok

=> nil

 

 

 

感想その他

キーワード引数やProcオブジェクトを使いつつ、ループ処理の適切な場所で例外処理を書いていく…という自分には難易度高めなお題でしたが楽しかったです!!!

redoは特に復習しなくては。。。!!

 

例外処理をかく際、見様見真似で済ましてしまいがちでしたが、基本的な部分から学べてよかったです!!