Naming

extension List {
public mutating func remove(at position: Index) -> Element
}
employees.remove(at: x) - 좋은 예시. x가 삭제할 element의 위치를 나타내는 것이 명확하다.
employees.remove(x)     - 나쁜 예시. x라는 element를 제거한다는 의미로 오인할 수 있다.
public mutating func remove(member: Element) -> Element? 
allViews.remove(cancelButton) - 좋은 예시. 명확하다.

public mutating func removeElement(member: Element) -> Element?
allViews.removeElement(cancelButton) - 나쁜 예시. 함수 호출 시 Element라는 단어는 핵심 정보가 아니다.
var greeting = "Hello" - 좋은 예시. Entity의 역할을 표현하는 이름을 사용한다.
protocol ViewController {
	  associatedtype ContentView : View
}
class ProductionLine {
	  func restock(from supplier: WidgetFactory)
}

var string = "Hello" - 나쁜 예시. type 이름을 중복해서 나타낸다.
protocol ViewController {
	  associatedtype ViewType : View
}
class ProductionLine {
	  func restock(from widgetFactory: WidgetFactory)
}
x.insert(y, at: z)          “x, insert y at z” (x에 y를 z위치에 삽입)  // 좋은 예시
x.subViews(havingColor: y)  “x's subviews having color y” (x의 subviews는 색상 y을 가짐)
x.capitalizingNouns()       “x, capitalizing nouns” (x의 명사를 대문자화)

x.insert(y, position: z)  // 나쁜 예시
x.subViews(color: y)
x.nounCapitalize()
AudioUnit.instantiate(
  with: description, 
  options: [.inProcess], completionHandler: stopProgressBar) - 중요도가 낮은 arguments이므로 의도적으로 줄바꿈 한다.
메서드가 본질적으로 동일하게 동작하므로 base name을 공유한다. (parameter type은 다르지만)
extension Shape {  
  /// Returns `true` iff `other` is within the area of `self`.
  func contains(_ other: Point) -> Bool { ... }

  /// Returns `true` iff `other` is entirely within the area of `self`.
  func contains(_ other: Shape) -> Bool { ... }

  /// Returns `true` iff `other` is within the area of `self`.
  func contains(_ other: LineSegment) -> Bool { ... }
}