728x90
처음에 강의를 들었을 땐 무슨내용인가 했는데 mutation/ nonmutation에 따라 이름을 다르게 작성해야한다는 규칙이 있을 줄을 몰랐다.
값복사인지 참조복사인지에 따라 동사, 명사, 접미사, 접두사를 붙이라는데 외우고 싶진않다...
코드를 작성할 때 이 글을 보면서 익숙해지지 않는이상 쓰기 힘들 것 같다.
부수효과(side-effect)를 기반해서 function과 method의 네이밍을 하세요.
- side-effect가 없는 것은 명사로 읽혀야함. eg. x.distance(to: y), i.successor()
- side-effect가 있는 것은 동사로 읽혀야 함. eg. print(x), x.sort(), x.append(y)
- mutating/ nonmutating method의 이름을 일관성 있게 짓기. 주로 mutating method와 함께 비슷한 맥락의 nonmutating method도 만들어집니다. nonmutating method는 instance를 변경하지 않고 새로운 value를 return 합니다.
- mutating이란 돌연변이라는 뜻인데, 변할 수 있는 변수,함수같은걸 말한다. var로 이해하면 편할 듯 싶다. (즉 메모리값을 변경안하고 내부의 값을 변경하는 것)
- nonMutating은 그냥 let으로 이해하자. 변경 할 수 없고 변할경우 메모리를 새로 할당해서 넣어주는거다. (즉 메모리값을 새로 할당해서 새로 만드는 것)
- mutating/ nonmutating method의 operation이 동사로 설명되는 경우
- mutating에는 동사 명령형을 사용
- nonmutating에는 “ed” 또는 “ing”를 접미사로 붙여서 사용
x.sort() z = x.sorted() x.append(y) z = x.appending(y)
예시 )
import Foundation
var unsortedArray: [Int] = [5, 1, 3, 2, 4]
unsortedArray.sorted() // [1,2,3,4,5] -> 새로운 배열
unsortedArray // [5, 1, 3, 2, 4] -> 변경되지 않음
// side-effect가 있는경우
unsortedArray.sort() // [1,2,3,4,5] -> 기존에 있는 얘를 변경함
unsortedArray // [1,2,3,4,5] -> 기존값이 변경되어있음
// side-effect가 있는경우
unsortedArray.append(100)
struct Distance {
var value = 0
// 외부의 값을 변경하지 않고 보내는 경우
// side Effect가 없는 경우 명사로 읽혀야함
func distance(to otherDistance: Distance) -> Int {
return self.value - otherDistance.value
}
}
- mutating/ nonmutating method의 operation이 명사로 설명되는 경우
- nonmutating에는 명사 사용
- mutating에는 “form” 접두사를 사용
x = y.union y.formUnion(z) j = c.successor(i) c.formSuccessor(&i) - nonmutating인 Boolean method & properties는 receiver에 대한 주장으로 읽혀야합니다.
- eg) x.isEmpty, line1.intersects(line2)
- x가 비어있는가?, line1이 line2에 교차하는가?
- 능력을 설명하는 프로토콜은 able, ible, ing를 사용한 접미사로 네이밍해야 합니다.
- eg) Equatable, ProgressReporting
- (1 == 2 가 같은지),
- 접근 가능한 프로토콜일 경우 DBAccessable, DBControllable 이런 식으로 능력을 설명하는 프토토콜을 만들 수 있음
protocol ProgressReporting { } extension ProgressReporting { func reportProgerss { } }
- 나머지 types, properties, variables, constants는 명사로 읽혀야 합니다.
반응형
'Swift > Swift GuideLines' 카테고리의 다른 글
Swift GuideLines - 5.Naming(defaultParameter) (0) | 2022.02.03 |
---|---|
Swift GuideLines - 4.Naming (0) | 2022.02.03 |
Swift GuideLines - 2.Naming (0) | 2022.02.01 |
Swift GuideLines - 1.주석 (0) | 2022.02.01 |
읽기 좋은 코드 작성하기 - Fundamentals (0) | 2022.01.30 |