의미있는 이름
- 의도를 분명히 밝혀라
- 명확한 이름이 좋다
- 짐축성을 가진 코드는 의도를 숨긴 코드이다.
- 단순성과 함축성은 다르다.
// 함축적 -> 무슨 일을 하는지 구체적으로 드러나지 않은 이름 func getList() -> [String] { } // 짐작하기 쉬운 이름 func getNameOfFriendsList()->[String]{ }
- 올바른 정보
- 유사한 개념은 유사한 표기법을 사용한다.
-
func add(_ item:Int ){ // 배열에 추가하는 로직 } func append(_ item:Int ){ // 배열에 추가하는 로직 }
같은 기능을 수행하나 표기가 다른 건 잘못된 정보전달의 예 이다.
-
- 널리쓰이는 단어를 다른 의미로 사용하는 것도 옳지않다
-
func getFriendList() -> [String:Friend]{ }
-
List는 프로그래머에게는 []의 의미를 내포하고 있다 . 딕셔너리 로의 반환은 예상 밖의 기능을 하는 것이다.
-
- 유사한 개념은 유사한 표기법을 사용한다.
- 불용어(noise word)를 사용하지 마라
- 의미가 불분명한 이름 - Info,Data,연속적인 숫자
- 너무 추상화되어있는 이름
- 중복
let friend : Any // 이후의 추가될 비슷한 변수를 고려하지 않은 네이밍 let friendObj : Any // 두개의 변수의 차이를 이름으로 파악하기 어렵다
- 검색하기 쉬운 이름
- 프로그램 전역에서 사용할 이름은 자주 검색해야한다.
- 짧은 네이밍은 검색에서 여러 결과를 반환한다.
- 사용할 범위와 이름의 길이는 비례하는 것이 바람직하다.
for i in array{ // 반복문 내부에서만 쓰는 변수는 i 면 충분하다 } static func a{} // 검색에서 나오는 결과가 많다. static func abcdefg{} // 검색에서 더 용이하다.
- 인코딩을 피해라
- 부호화는 해독을 방해한다.
-
멤버변수 접두어는 구닥다리다.
- 맥락을 추가하라
- 여러의미를 가지는 단어를 이름으로 선택시 의도가 불분명해진다.
-
let state: String
- ` 상태?? 주? 파악이 어려워진다.`
-
let addrState
맥락의 추가는 조금 더 의도가 분명해진다
-
class Address{ let state : String }
-
클래스를 분할하는 건 컴파일러에게 까지 의도가 전달된다.
-
- 불필요한 맥락은 제거한다
- 이름은 짧을 수록 좋다 . 단 의미가 분명할 때
- 즉 , 의미가 분명할 경우 맥락을 추가하는건 가독성을 해친다.
- 이름은 짧을 수록 좋다 . 단 의미가 분명할 때