代码之家  ›  专栏  ›  技术社区  ›  ch271828n

在早期返回时最优雅的日志记录方式(在防御编程时非常常见)?

  •  0
  • ch271828n  · 技术社区  · 4 年前

    void f(A a) {
      var b = a.b;
      if (b == null) {
        Log.warn('f skip running since b==null');
        return;
      }
    
      var c = some_func(b);
      if (c == null) {
        Log.warn('f skip running since c==null');
        return;
      }
    
      another_func(c);
    }
    

    我知道我可以使用空感知运算符,例如 ?.

    我还尝试了另一种方法:

    void f(A a) {
      var errorMessage = fCore(a);
      if (errorMessage!=null) Log.warn(errorMessage);
    }
    
    String fCore(A a) {
      var b = a.b;
      if (b == null) {
        return 'f skip running since b==null';
      }
    
      var c = some_func(b);
      if (c == null) {
        return 'f skip running since c==null';
      }
    
      another_func(c);
      return null
    }
    

    但这也有点冗长。

    有更好的方法吗?谢谢

    编辑

    我这样称呼它:

    void outer_func() {
      one_func();
      f(); // even if f skip running, I want two_func still run, etc
      two_func();
      ...
    }
    

    因此,我不能简单地做这样的事情 throw LogWarnException('...') 并在最外层函数处捕捉。

    0 回复  |  直到 4 年前