首页 > 解决方案 > 如何在类方括号之外定义类方法以提高可读性?

问题描述

如何在类方括号之外定义类方法以提高可读性?例如,类似的东西......

class MyClass {
    //Private variables:
    int _foo = 0;
    //Private methods:
    void _incrementFoo();
    //Public methods:
    int getFoo();
}

void _incrementFoo() {
    _foo++;
}

int getFoo() {
    _incrementFoo();
    return _foo--;
}

如您所见,我想通过提供签名来告诉班级有关方法的信息,然后我实际上会在班级之外定义它们……在飞镖中有什么方法可以做到这一点?

标签: classdartclass-methodmethod-signatureexternal-methods

解决方案


好吧,我不同意你想做的事情会提高可读性。如果要拆分接口和实现,我认为以下方法要好得多:

abstract class MyClass {
  //Public methods:
  int getFoo();

  factory MyClass() => _MyClass();
}

class _MyClass implements MyClass {
  //Private variables:
  int _foo = 0;

  //Private methods:
  void _incrementFoo() => _foo++;

  //Public methods implementation:
  int getFoo() => _foo;
}

如果你真的想以你的方式去做,你需要有一种方法告诉你他们是你班级的一部分。你可以这样做:

class MyClass {
  //Private variables:
  int _foo = 0;
  //Private methods:
  void _incrementFoo() => _incrementFooImpl(this);
  //Public methods:
  int getFoo() => getFooImpl(this);
}

void _incrementFooImpl(MyClass myClass) {
  myClass._foo++;
}

int getFooImpl(MyClass myClass) {
  myClass._incrementFoo();
  return myClass._foo--;
}

但我认为这相当难看,并且您最终会在代码中添加许多全局方法,这会使您很难看到每个方法属于哪个类。


推荐阅读