Effective Dart - Variables, Members, Constructors in usage

MJ·2023년 6월 11일
0

Dart Basic

목록 보기
10/12

변수

- 지역 변수에 var과 final을 사용할 때 일관된 규칙을 따른다

- 계산이 가능한 값들을 저장하는 것을 피한다

멤버

- 필드에 불필요한 getter와 setter를 생성하지 않는다

- 읽기 전용인 프로퍼티를 생성할 때, final 키워드 사용을 지향한다

  • 변수를 읽을 수만 있고 외부 코드로 수정할 수 없는 변수를 생성하는 쉬운 방법임

내부에서 할당하고 외부에서 접근할 수 있는 필드를 구성해야한다면 이 "private 필드, public getter" 패턴이 필요할 수 있지만 꼭 필요한 경우가 아니면 사용하지 않는 것이 좋다

// good case
class Box {
  final contents = [];
}

// bad case
class Box {
  Object? _contents;
  Object? get contents => _contents;
}

- 간단한 멤버를 선언할 때 => 사용을 고려한다

  • =>를 함수 표현식으로 사용하는 것 외에도, Dart에서는 멤버를 정의하는데 사용할 수 있다
  • 해당 스타일은 계산을 수행하고 결과를 반환하는 단순한 멤버에게 적합함
double get area => (right - left) * (bottom - top);

String capitalize(String name) =>
    '${name[0].toUpperCase()}${name.substring(1)}';
  • 선언이 두 줄 이상이거나 중첨된 표현식일 경우 코드 블럭과 명령문을 사용하는 것이 좋다
// good case
Treasure? openChest(Chest chest, Point where) {
  if (_opened.containsKey(chest)) return null;

  var treasure = Treasure(where);
  treasure.addAll(chest.contents);
  _opened[chest] = treasure;
  return treasure;
}

// bad case
Treasure? openChest(Chest chest, Point where) => _opened.containsKey(chest)
    ? null
    : _opened[chest] = (Treasure(where)..addAll(chest.contents));

- Named 생성자를 리디렉션하고 충돌을 피하는 경우를 제외하곤 this를 사용하지 않는다

- 가능하다면 필드의 선언과 함께 초기화한다

profile
느긋하게 살자!

0개의 댓글