Как я могу определить методы класса ВНЕ из скобок класса для улучшения читабельности? - PullRequest
0 голосов
/ 15 июня 2019

Как я могу определить методы класса ВНЕ скобок класса для улучшения читабельности? Например, что-то похожее на это ...

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

void _incrementFoo() {
    _foo++;
}

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

Как вы видите, я хотел бы рассказать классу о методах, предоставив сигнатуру, а затем я бы определил их вне класса ... Любой способ сделать это в дротике?

1 Ответ

1 голос
/ 15 июня 2019

Ну, я не согласен, что то, что вы хотите сделать, улучшит читабельность. Если вы хотите разделить интерфейс и реализацию, я думаю, что следующее намного лучше:

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--;
}

Но я думаю, что это довольно уродливо, и вы заканчиваете тем, что добавили в свой код множество глобальных методов, которые могут затруднить понимание, к какому классу принадлежит каждый метод.

...