<aside> 💡 점진적으로 적용하자! 한 번에 완벽할 수 없고, 한 번에 완성해야할 필요도 없다 하나씩 차근차근
</aside>
Include all the words needed to avoid ambiguity for a person reading code where the name is used.
Omit needless words.
employees.remove(at: x)
employees.remove(x) // unclear: are we removing x?
---
allViews.removeElement(cancelButton)
allViews.remove(cancelButton) // clearer
Name variables, parameters, and associated types according to their roles, rather than their type constraints.
var string = "Hello"
protocol ViewController {
associatedtype ViewType : View
}
class ProductionLine {
func restock(from widgetFactory: WidgetFactory)
}
var greeting = "Hello"
protocol ViewController {
associatedtype ContentView : View
}
class ProductionLine {
func restock(from supplier: WidgetFactory)
}
Compensate for weak type information to clarify a parameter’s role.
func add(_ observer: NSObject, for keyPath: String)
grid.add(self, for: graphics) // vague(희미한)
func addObserver(_ observer: NSObject, forKeyPath path: String)
grid.addObserver(self, forKeyPath: graphics) // clear
---
grid.add(observer: self, forKeyPath: graphics) //이건 안됨???
//add 라는 함수가 너무 범용적인가 흐음
네이티브 사람들이 부럽다, 자연스럽게 글 쓰듯이 함수 작성할 수 있는 점이 너무 부럽다 ㅠㅠ
암튼 함수를 사용할 때, 매개변수의 역할에 대한 정보가 명확해지지 않는 경우가 있을 때는, 함수명, 외부 인자를 활용해서 타입을 명확하게
Document the complexity of any computed property that is not O(1).
Prefer methods and properties to free functions. Free functions are used only in special cases:
메소드와 프로퍼티를 선호해서 사용하고 (일반적인 펑션보다 - 특별한 경우에만 쓸 것)
cases:
min(x, y, z) //When there’s no obvious self:
print(x) // When the function is an unconstrained generic:
sin(x) //When function syntax is part of the established domain notation:
이와 같은 특수 경우를 제외하고는 왠만하면 free function쓰지말기
(전역 함수라고 보면 될까요?? 조금 헷갈리긴 하네) 근데 대충 느낌인지 알죠?
저런 케이스들은 딱 봐도 누구나 어디에서나 다른 언어에서 대중적으로 사용하는 그런 느낌적인 느낌인 함수들
function 과 매서드의 큰 차이는 (스위프트에서) 클래스 내부에 존재하는 친구이고, self키워드 사용가능여부 (즉 오버라이드 가능), 해당 함수들을 사용하는 방법도 조금 다르겠죠, 접근방식이나.
Follow case conventions. Names of types and protocols are UpperCamelCase
. Everything else is lowerCamelCase
.
대소문자 규칙 : 타입, 프로토콜 vs 나머지
축약어? 대문자 규칙에대해서는 나중에 참고하기 이런거 외울 시간없음. 이런식으로 처리한다 정도
var utf8Bytes: [UTF8.CodeUnit]
var isRepresentableAsASCII = true
var userSMTPServer: SecureSMTPServer
대소문자 규칙은 동일하고 단지 소문자규칙이 적용되었을 때는 싹다 소문자, utf8 (제일 앞에왔을 때)
그리고 중간에 약자가 들어갔을 때는 싹다 대문자인듯?