avoid_returning_this 린트 규칙: fluent 인터페이스를 만들려고 this를 반환하지 맙시다

avoid_returning_this 린트 규칙: fluent 인터페이스를 만들려고 this를 반환하지 맙시다

avoid_returning_this그저 fluent 인터페이스(메서드 체이닝)를 만들 목적으로 메서드에서 this를 반환하지 말아 달라고 알려주는 Dart 린트(lint) 규칙이에요. 이 규칙은 효과적인 Dart(Effective Dart) 가이드에서도 강조하는 내용이랍니다.

출처: avoid_returning_this

본문

설명

메서드에서 this를 반환하는 건 사실상 필요 없는 짓이에요. 왜냐하면 Dart에는 캐스케이드 연산자(cascade operator, ..) 가 있어서 어떤 객체에도 보편적으로 메서드 체이닝을 적용할 수 있거든요.

다만, 다음 경우에는 this를 반환해도 괜찮아요.

  • 연산자(operator)에서
  • 현재 클래스와 다른 반환 타입을 갖는 메서드에서
  • 부모 클래스나 믹스인(mixin), 인터페이스에 정의된 메서드에서
  • 확장(extension)에 정의된 메서드에서

나쁜 예시

var buffer = StringBuffer()
  .write('one')
  .write('two')
  .write('three');

이건 메서드 체이닝을 하려고 각 writethis를 반환한다고 가정한 코드예요.

좋은 예시

var buffer = StringBuffer()
  ..write('one')
  ..write('two')
  ..write('three');

this 반환 없이 캐스케이드 연산자(..)만으로 똑같은 체이닝을 자연스럽게 구현해요.

규칙 활성화하기

avoid_returning_this 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 추가해요:

linter:
  rules:
    - avoid_returning_this

YAML 맵(map) 문법을 쓴다면 linter > rules 아래에 avoid_returning_this: true를 넣으면 돼요:

linter:
  rules:
    avoid_returning_this: true

더 알아보기