본문 바로가기

프로그래밍 언어/Swift

읽기 좋은 코드 작성하기 #1 Naming

반응형
 

Swift.org

Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.

www.swift.org

Swift API Design Guidelines에 정의된 네이밍 규칙을 알아보자!

 

Naming 네이밍

 

1. 필요한 단어를 모두 포함하기

 Bad   

employees.remove(x) // 명확하지 않음

 good 

employees.remove(at: x) // x번째에 위치한 employee 제거

 

2. 불충분한 type 정보를 보충하기

 Bad  

func add(_ observer: NSObject, for keyPath: String)
grid.add(self, for: graphics)

 good 

func addObserver(_ observer: NSObject, forKeyPath path: String)
grid.addObserver(self, forKeyPath: graphics)

 

3. 메서드와 함수를 영어 문장처럼 사용할 수 있도록 하기

 Bad  

x.insert(y, position: z)
x.subViews(color: y)
x.nounCapitalize()

 good 

x.insert(y, at: z)          “x, insert y at z”
x.subViews(havingColor: y)  “x's subviews having color y”
x.capitalizingNouns()       “x, capitalizing nouns”

 

 

4. factory method의 시작은 make로 시작하기

struct List {
  func makeIterator() -> IteratorProtocol {
    Iterator(self)
  }
}

 

5. side-effect를 기반하기

  • side-effect가 없는 것은 명사로 읽혀야 함.
    e.g. x.distance(to: y)
  • side-effect가 있는 것은 동사로 읽혀야 함.
    e.g. print(x), x.append(y)
  • mutating/nonmutating 메서드의 이름을 일관성 있게 짓기
    (*nonmutating 메서드는 instance를 변경하지 않고 새로운 value를 return)
  • operation이 동사로 설명되는 경우
    • mutating에는 동사의 명령형을 사용
      • x.sort(), x.append(y)
    • nonmutating에는 "ed" 또는 "ing"를 접미사로 붙여서 사용
      • z = x.sorted(), z = x.appending(y)
  • operation이 명사로 설명되는 경우
    • nonmutating에는 명사 사용
      • x = y.union(z), j = c.successor(i)
    • mutating에는 "form" 접두사 붙여서 사용
      • y.formUnion(z), c.fromSuccessor(i)

 

6. nonmutating인 Boolean 메서드와 프로퍼티는 리시버에 대한 주장으로 읽혀야 한다.

x.isEmpty, line1.intersects(line2)

 

7. 능력을 설명하는 프로토콜은 able, ible, ing 사용하기

 

8. types, properties, variables, constants는 명사로 읽혀야 한다.

 

9. 용어 제대로 사용하기

  • 일반적인 단어가 의미를 더 잘 전달한다면 잘 알려져 있지 않은 용어 사용하지 않기
  • 전문 용어를 사용한다면 확립된 의미를 사용하기
  • 약어(줄임말, abbreviations)를 피하기
  • 관례 따르기. 대부분의 프로그래머가 친숙한 용어 사용하기

 

 

반응형