https://dart.dev/guides/language/effective-dart
두 가지 중요한 주제
Be consistent - formatting, casing 과 같은 것들은 주관적, 정답이 없음, 일관되게 짜는 것이 도움이 된다.
Be brief - Dart는 많은 기능이 있다. 간결하게 작성하자.
Identifiers
UpperCamelCase, lowerCamelCase, lowercase_with_underscores 세가지가 쓰임
UpperCamelCase - class, enum, typedef, type parameter
lowercase_with_underscores - 패키지, 디렉토리, 소스파일, import prefixes
lowerCamelCase - class member, top-level definitions, variables, parameters, named parameters
- 그리고 constants (PRIMARY_COLOR (X) -> primaryColor (O), 무조건은 아니고 prefer)
(DO) 두 글자가 넘는 acronyms (두문자어) 와 abbreviations (약어)는 단어처럼 대문자화해라
HTTPSFTP가 HTTPS FTP 일까? HTTP SFTP 일까?
IO -> input / output 이기 때문에
Id -> identification 이기 때문에
(PREFER) 사용하지 않는 콜백 파라미터가 있다면 _, _ _ 사용해라
하나만 있다면 _ 사용하고, 여러개라면 이름 충돌을 막기위해 _ _, _ _ _ 으로 하나씩 늘려가며 사용
(DON'T) private identifier 아닌 것에 _ (언더스코어)로 시작하지마라
(DON'T) prefix letter 사용하지마라
과거 컴파일러와 다르게 다트는 타입, 스코프, 가변성 등을 알려주기 때문에 사용할 필요가 없음
(defaultTimeout (O) -> kDefaultTimeout (X))
(DON'T) 라이브러리 이름을 명시적으로 지정하지마라
다트는 경로와 파일이름으로 유니크한 태그를 만들어줌. 라이브러리에 이름지으면 덮어쓰는 것임
Ordering
파일을 깔끔하게 유지하려면 순서대로 해야함, 섹션 별로 빈 줄로 구분해야함
(DO) dart: import 는 다른 import 전에 놓기
(DO) package: import 는 다른 relative import 전에 놓기
(DO) export 는 다른 모든 import 뒤에 분리해서 놓기
(DO) 각각의 섹션은 알파벳 순으로 정렬하기
Formatting
컴파일러는 여백을 무시하지만, 인간은 아니다. 일관된 여백 스타일을 쓰자
(DO) dart format 이용해서 너의 코드를 포맷팅해라
포맷팅은 지루하지만 걱정할 필요가 없다. dart format 이라 불리는 정교한 포맷터가 있다.
포맷팅 룰 : https://github.com/dart-lang/dart_style/wiki/Formatting-Rules
아래 나머지는 dart format 이 할 수 없는 일에 관한 것이다.
(CONSIDER) formatter-friendly 하게 코드를 바꿔라
긴 식별자나, 깊게 nested 된 표현 등 포맷되고 읽기 어려운 것들이 있다.
너의 코드를 간결하게 해라.
(AVOID) 한 줄에 80 글자를 넘기지 마라
(DO) 흐름 제어문에는 중괄호 사용해라
else문 없이 한줄로 끝나는 경우에는 괜찮다.
if (arg == null) return defaultValue;
줄이 넘어간다면 중괄호 꼭 사용하자
// GOOD
if (overflowChars != other.overflowChars) {
return overflowChars < other.overflowChars;
}
// BAD
if (overflowChars != other.overflowChars)
return overflowChars < other.overflowChars;
dart format 덕분인지 크게 신경쓸 건 없다.
사용하지 않는 파라미터는 _ 로 표현해주고, 상수는 lowerCamelCase로 표기하자..