avoid_returning_this 린트 규칙: fluent 인터페이스를 만들려고 this를 반환하지 맙시다
avoid_returning_this 린트 규칙: fluent 인터페이스를 만들려고 this를 반환하지 맙시다
avoid_returning_this는 그저 fluent 인터페이스(메서드 체이닝)를 만들 목적으로 메서드에서 this를 반환하지 말아 달라고 알려주는 Dart 린트(lint) 규칙이에요. 이 규칙은 효과적인 Dart(Effective Dart) 가이드에서도 강조하는 내용이랍니다.
본문
설명
메서드에서 this를 반환하는 건 사실상 필요 없는 짓이에요. 왜냐하면 Dart에는 캐스케이드 연산자(cascade operator, ..) 가 있어서 어떤 객체에도 보편적으로 메서드 체이닝을 적용할 수 있거든요.
다만, 다음 경우에는 this를 반환해도 괜찮아요.
- 연산자(operator)에서
- 현재 클래스와 다른 반환 타입을 갖는 메서드에서
- 부모 클래스나 믹스인(mixin), 인터페이스에 정의된 메서드에서
- 확장(extension)에 정의된 메서드에서
나쁜 예시
var buffer = StringBuffer()
.write('one')
.write('two')
.write('three');
이건 메서드 체이닝을 하려고 각 write가 this를 반환한다고 가정한 코드예요.
좋은 예시
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