How to exclude debug code

后端 未结 2 934
庸人自扰
庸人自扰 2021-01-20 11:23

Let\'s say I have simple logger:

void main() {
  var logger = new MyLogger();
  logger.log(\"hello Dart\");
}


        
相关标签:
2条回答
  • 2021-01-20 11:35

    You could embed the code in an assert. Assertions are ignored in production code and I'm sure not built to JS when pub build is run in release mode.

    class X {
      X() {
        print('x created');
      }
    
      void log(String m) {
        print(m);
      }
    }
    
    bool log(String m) {
      new X()..log(m);
          return true;
    }
    
    void main() {
      assert(() {
        new X()..log('in Assert');
        return true;
      });
    
      assert(() => log('in Assert')); // use a wrapper function
    }
    

    When you create a wrapper method that returns true than you don't have to do it explicit each time.

    You can also take a look at this question How to achieve precompiler directive like functionality

    0 讨论(0)
  • 2021-01-20 11:49

    I put @GünterZöchbauer "assert trick" inside the factory constructor:

    class _ProductionPlug implements DebugClass{
      const _ProductionPlug();
      noSuchMethod(_) {} //do nothing
    }
    
    class DebugClass{
      static final DebugClass _plug = const _ProductionPlug();
      log(msg){print(msg);}
      DebugClass._(){}
      factory DebugClass(){
        DebugClass instance;
        assert((){
        instance = new DebugClass._();
        return true;
            });
        return instance != null ?  instance :  _plug;
      }
    }
    void main() {
      print("hello");
      new DebugClass()
        ..log("debugging");
    }
    

    This way nothing sticks out.

    0 讨论(0)
提交回复
热议问题