メソッドのガードのあるべき姿について

ガード処理を書くと思うんですが、最近、以下が良さそうだなぁと思ったんで、まとめておきます

  • メソッド(クラス)がパブリックなら、メソッド内部でガード処理
  • メソッド(クラス)がプライベートなら、呼び出し側でガード処理

大体クラスにも同じことが言えると思ってます

要するに、パブリックな場合は、どこからでも呼ばれる可能性があるので、自分で守っておいた方がいいかなと思います。クラスとかだとinitの中でバリデーションしたりとか、しますが、あんなイメージで、メソッドでも不正な値がきたらバリデーションするイメージです

一方で、メソッドがプライベートなら、ある特定のメソッドからしか呼ばれないわけなので、呼び出し側でガードするのが、バランスが取れてる気がします。

確かに全てをメソッドの内部でガードするのも統一感あるかと思いつつ、いちいちメソッドの中身を読みにいかないとガードがあるかないかとか、わからないんで、読みづらくなってくる気がします

プライベートメソッドなら、呼び出しがかかるメソッドが絞られるんで、そこにガードをかいておいてもらえると、より上流で処理内容を把握できるのが、楽なのがいいですね。要するにユースケースごとにまとまって処理を読めるのがメリットかなと

ただ、もちろん例外はあって、そのプライベートメソッドが複数のパブリックから呼ばれてて前提条件が同じ時は、プライベートメソッドの中にガード入れといた方がいいし、いくつかそういうパターンはありそうです

がまあ、コーディングのルール + 例外はよくあるフォーマットなんで、そのイメージで、メソッドのガードのあり方の一つとして持っておけば良いかと思っています

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA