86819


引数をチェックして、条件を満たしていない場合raiseするようなメソッドがあるとします。  
シンプルな例だと以下でしょうか。

[code]

    # 引数が100未満ならraiseするメソッド
    def check(num)
      raise if num < 100
    end
    
[/code]

上記だとraiseする条件に当てはまらない場合、nilを返しますが、nilだと分かりにくいのでシンボルで`:ok`など返した方がわかりやすいんじゃないかなーと思いましたが、rubyの作法的にいかがでしょうか？  
あくまで人間が開発してる時にわかりやすいという意味で、プログラム上で、`:ok`という値を利用することは想定していないです。

[code]

    # 引数が100未満ならraiseするメソッド
    def check(num)
      num < 100 ? raise : :ok
    end
    
[/code]


CC BY-SA 4.0
2022-03-13T06:34:51.597
86813
2022-03-16T13:47:22.140
40650
question
ruby
rubyでチェックしてraiseするメソッドの戻り値


例外処理の基本は例外が発生しないときは次のステップ（行など）へ進むことなので、返す必要の無い値は不要なんではないかと思います。  
つまり、`:OK`等のシンボルを受けとらなくても、`check()`メソッドの次に処理が進めば例外は発生していないわけですから、わざわざ戻り値`:OK`を受けとる意味は無いと思います。


CC BY-SA 4.0
2022-03-13T12:33:14.903
86819
2022-03-13T12:33:14.903
14745
86813
answer

[code]

    def check(num)
      raise if num < 100
    end
    
[/code]

例外処理というのは「それ以上処理が継続できないことを示すためにコードの流れを無視して呼び出し元に遡って処理を中断させる」機能なので、「raiseするかさもなくば何もしないメソッド」というのは例外の使いどころを間違っています。

よりよいコードは多分こうです。

[code]

    def check(num)
      num < 100
    end
    
    def なんとか
      raise if check(num)
      後続処理
    end
    
[/code]

元のコードだと

[code]

    def check(num)
      raise if num < 100
    end
    
    def なんとか
      check(num)
      後続処理
    end
    
[/code]

になるかと思います。`なんとか`だけを見ると`check`が何をしているのかわかりません。numの値によって例外を投げるというのを読み取るのはさらに困難です。

> 例外処理の基本は例外が発生しないときは次のステップ（行など）へ進むこと

これは因果を取り違えています。例外が発生しないから進むのではなく、当然に進むところ例外が無理矢理その流れを止めるのです。

`check`にもどって考えると、処理を止めたいのは`check`ではなく`なんとか`の方のはずです。その点でも`check`に`raise`が含まれるのはおかしいことがわかります。


CC BY-SA 4.0
2022-03-16T13:47:22.140
86860
2022-03-16T13:47:22.140
5793
86813
answer