Swift-style-guide: ν•¨μˆ˜ λŒ€ 방법

에 λ§Œλ“  2015λ…„ 07μ›” 06일  Β·  26μ½”λ©˜νŠΈ  Β·  좜처: raywenderlich/swift-style-guide

κ°€μ΄λ“œλŠ” μž‘μ„±ν•  λ•Œ κΈ°λŠ₯κ³Ό λ°©λ²•μ˜ μ μ ˆν•œ μ‚¬μš©μ— λŒ€ν•΄ λͺ…μ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. Apple의 Swift ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ λ¬Έμ„œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ©”μ„œλ“œλŠ” 클래슀, ꡬ쑰체 λ˜λŠ” μ—΄κ±°ν˜•κ³Ό μ—°κ²°λœ ν•¨μˆ˜μž…λ‹ˆλ‹€. μ΄λŠ” μΈμŠ€ν„΄μŠ€ 및 μœ ν˜• λ©”μ†Œλ“œ λͺ¨λ‘μ— μ μš©λ©λ‹ˆλ‹€. λ°˜λ©΄μ— ν•¨μˆ˜λŠ” μ „μ—­ λ²”μœ„μ—μ„œ μ„ μ–Έλ˜λ©° μ–΄λ–€ μœ ν˜•μ—λ„ μ†ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μΆ©λΆ„ν•  κ²ƒμž…λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹€μŒκ³Ό 같은 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

λ©”μ†Œλ“œ λŒ€ 자유 ν•¨μˆ˜

λ©”μ†Œλ“œλŠ” μœ ν˜•κ³Ό μ—°κ΄€λœ κΈ°λŠ₯이며 μžλ™ μ™„μ„± 검색 κ°€λŠ₯μ„±μœΌλ‘œ 인해 μ„ ν˜Έλ©λ‹ˆλ‹€. 자유 ν•¨μˆ˜λŠ” 덜 μΌλ°˜μ μ΄μ§€λ§Œ μž‘μ—…μ΄ νŠΉμ • μœ ν˜• λ˜λŠ” μΈμŠ€ν„΄μŠ€μ™€ λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λ˜μ§€ μ•Šμ„ λ•Œ μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μš°μ„ μ˜

let sorted = items.mergeSort()  // easily discoverable
rocket.launch()  // a mutating method

μ„ ν˜Έν•˜μ§€ μ•ŠμŒ

let sorted = mergeSort(items)
launch(&rocket)

무료 ν•¨μˆ˜ μ˜ˆμ™Έ

let tuples = zip(a, b)  // feels natural as a free function (symmetry)
let value = max(x,y,z)  // another free function that feels natural

λͺ¨λ“  26 λŒ“κΈ€

"무료 κΈ°λŠ₯"이라고 ν•˜λŠ” κΈ°λŠ₯도 λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” "무료"κ°€ "μ–΄λ–€ κ°œμ²΄μ™€λ„ μ—°κ²°λ˜μ§€ μ•ŠμŒ"을 μ˜λ―Έν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

ν•¨μˆ˜μ—λŠ” Swiftμ—μ„œ μœ ν˜• 및 전역보닀 더 λ§Žμ€ λ²”μœ„ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

Objective-C 일반 λ©”μ„œλ“œκ°€ 이제 functiona μ—μ„œ Swift . 포럼, λΈ”λ‘œκ·Έ, νŠœν† λ¦¬μ–Ό λ“±μ˜ μΈ‘λ©΄μ—μ„œ λ‚΄κ°€ 읽은 λͺ¨λ“  μžλ£ŒλŠ” 클래슀 λ˜λŠ” μ—΄κ±°ν˜•μ— 속할 λ•Œμ—λ„ λ‹¨μˆœνžˆ functions 둜 μ–ΈκΈ‰ν–ˆμŠ΅λ‹ˆλ‹€.

@mitchellporter μœ„μ˜ μΈμš©λ¬Έμ— 따라 Apple의 자체 λ¬Έμ„œλŠ” μ–΄λ–€ 것을 ν•¨μˆ˜ λ˜λŠ” λ©”μ„œλ“œλΌκ³  ν•˜λŠ” κ²½μš°μ— λŒ€ν•΄ λͺ…ν™•ν•©λ‹ˆλ‹€.

raywenderlich.com의 μžμŠ΅μ„œλ„ μ—¬κΈ°μ—μ„œ Apple의 지침을 λ”°λ₯΄λ―€λ‘œ μŠ€νƒ€μΌ κ°€μ΄λ“œμ— ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

Objective-C에도 ν•¨μˆ˜μ™€ λ©”μ„œλ“œκ°€ λ‘˜ λ‹€ μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  것이 방법은 μ•„λ‹™λ‹ˆλ‹€. πŸ˜‰

@micpringle 말이 λ˜μ§€λ§Œ, ν΄λž˜μŠ€μ— 속할 λ•Œμ—λ„ λ‹¨μˆœνžˆ function 라고 λΆ€λ₯΄λŠ” λ§Žμ€ 자료λ₯Ό μ½μ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 항상 function λ₯Ό μ‚¬μš©ν•˜λŠ” μœ μΌν•œ μ‚¬λžŒμ΄ μ•„λ‹ˆλΌκ³  μƒκ°ν•©λ‹ˆλ‹€. 이 λ³€κ²½ 사항이 μ•žμœΌλ‘œ μ–΄λ–»κ²Œ λ°”λ€ŒλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 ν₯미둜울 κ²ƒμž…λ‹ˆλ‹€.

λ©”μ„œλ“œ λ‚΄λΆ€μ˜ "ν•¨μˆ˜"κ°€ "쀑첩 λ©”μ„œλ“œ"μž…λ‹ˆκΉŒ?
ν΄λ‘œμ € λ‚΄λΆ€μ˜ ν•¨μˆ˜ λ˜λŠ” 기타 λΉ„ν•¨μˆ˜λ₯Ό 무엇이라고 ν•©λ‹ˆκΉŒ?

struct Struct {
   let closure = {
      func whoAmI() {}
   }

   var any: Any? {
      func jeanValjean() {}
      return nil
   }
}

λ‚˜λŠ” 이것듀이 기술적으둜 μ–΄λ–€ 것에도 "μ†ν•˜μ§€" μ•ŠκΈ° λ•Œλ¬Έμ— 읡λͺ… ν•¨μˆ˜(IMO)둜 λΆ„λ₯˜λ  것이라고 μƒκ°ν•©λ‹ˆλ‹€. 그것듀은 νŠΉμ • λ²”μœ„ λ‚΄μ—μ„œλ§Œ μ‘΄μž¬ν•˜λ©° κ·Έ μ™ΈλΆ€μ—μ„œ μ•‘μ„ΈμŠ€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ—¬κΈ°μ„œ "읡λͺ… ν•¨μˆ˜"κ°€ μ˜¬λ°”λ₯Έ 이름이라고 μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 일반적으둜 ν΄λ‘œμ €λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

이름이 μ§€μ •λœ μœ ν˜•μ΄λ‚˜ μΈμŠ€ν„΄μŠ€μ— μ—°κ²°λœ λ©”μ„œλ“œκ°€ μ•„λ‹ˆλΌ ν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ— "쀑첩 ν•¨μˆ˜": "ν•¨μˆ˜"라고 λΆ€λ¦…λ‹ˆλ‹€. 그리고 "쀑첩"된 μ΄μœ λŠ”... μ€‘μ²©λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€! "λ²”μœ„ κΈ°λŠ₯"일 μˆ˜λ„ μžˆμ§€λ§Œ λͺ…ν™•ν•˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ£„μ†‘ν•©λ‹ˆλ‹€. ν΄λ‘œμ €κ°€ 읡λͺ… ν•¨μˆ˜λΌκ³ λ„ λΆˆλ¦¬λŠ”μ§€ λͺ°λžμŠ΅λ‹ˆλ‹€. :]

μ€‘μ²©λœ κΈ°λŠ₯은 λ‚˜μ—κ²Œ μ’‹κ²Œ λ“€λ¦½λ‹ˆλ‹€. λ²”μœ„κ°€ μ œλŒ€λ‘œ 듀리지 μ•ŠλŠ”λ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€.

방법이든 μ•„λ‹ˆλ“  λͺ¨λ“  λ‚΄λΆ€μ˜ "쀑첩 ν•¨μˆ˜"λŠ” κ°€κΉŒμš΄ λ―Έλž˜μ— μΆ©λΆ„νžˆ λͺ…ν™•ν•΄ λ³΄μž…λ‹ˆλ‹€.

그리고 이름이 μžˆλŠ” 쀑첩 ν•¨μˆ˜κ°€ "읡λͺ…"이 λœλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ •ν™•νžˆ "읡λͺ…"이 무엇인지 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν΄λ‘œμ €, 특히 μ €μž₯되고 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ ν•¨μˆ˜μ™€ 맀우 μœ μ‚¬ν•œ ν΄λ‘œμ €μ— κ΄€ν•΄μ„œλŠ” λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ €μž₯된 ν•¨μˆ˜κ°€ μ‹€μ œλ‘œ 읡λͺ…이라고 λ―ΏλŠ” μͺ½μœΌλ‘œ 기울고 μžˆμ§€λ§Œ 그것을 ν¬μ°©ν•˜λŠ” ν΄λ‘œμ €μ™€ 잠재적으둜 μ–΄λ–€ μƒνƒœμ— 이름이 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€. 이것이 C#에 λŒ€ν•΄ κ°€λ₯΄μΉ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ λžŒλ‹€ ꡬ문은 λŒ€λ¦¬μžλΌκ³  ν•˜λŠ” 것을 κ΅¬μ„±ν•˜κΈ° μœ„ν•œ μΆ•μ•½ν˜•μž…λ‹ˆλ‹€.
https://msdn.microsoft.com/en-us/library/system.delegate (v=vs.110).aspx

func nonymous() {
   func nonymous() {}
}

let anonymouses: [() -> ()] = [].map
{$0} // This "transform" is also anonymous.

let unlcearToMeWhetherNonymous = {}

이것은 λ―Έλ¬˜ν•œ μš”μ μ΄λ©°, Swift의 λ‚΄λΆ€λ‘œ λ‚΄λ €κ°€λ©΄ λͺ¨λ“  것이 λ™μΌν•˜μ§€λ§Œ func 무언가λ₯Ό μ„ μ–Έν•˜λ©΄ ν™•μ‹€νžˆ 이름을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‘°μ μœΌλ‘œ ν΄λ‘œμ €λŠ” 이름이 μ—†λŠ” μ½”λ“œ 블둝일 λΏμž…λ‹ˆλ‹€. λ¬Όλ‘  λ³€μˆ˜λ‚˜ μƒμˆ˜μ— ν• λ‹Ήν•  수 μžˆμ§€λ§Œ μ΄λŠ” 포인터λ₯Ό μ €μž₯ν•˜λŠ” 것일 λΏμž…λ‹ˆλ‹€.

λ‹€μ‹œ λ§ν•˜μ§€λ§Œ μΌμ’…μ˜ μΈμœ„μ μΈ μ°¨μ΄μž…λ‹ˆλ‹€. 당신은 λͺ¨λ‘ lisp와 λΉ„μŠ·ν•  수 있고 func λŠ” ν΄λ‘œμ €μ— 이름을 λΆ€μ—¬ν•˜κΈ° μœ„ν•œ ꡬ문 섀탕이라고 말할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같은 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

λ©”μ†Œλ“œ λŒ€ 자유 ν•¨μˆ˜

λ©”μ†Œλ“œλŠ” μœ ν˜•κ³Ό μ—°κ΄€λœ κΈ°λŠ₯이며 μžλ™ μ™„μ„± 검색 κ°€λŠ₯μ„±μœΌλ‘œ 인해 μ„ ν˜Έλ©λ‹ˆλ‹€. 자유 ν•¨μˆ˜λŠ” 덜 μΌλ°˜μ μ΄μ§€λ§Œ μž‘μ—…μ΄ νŠΉμ • μœ ν˜• λ˜λŠ” μΈμŠ€ν„΄μŠ€μ™€ λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λ˜μ§€ μ•Šμ„ λ•Œ μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μš°μ„ μ˜

let sorted = items.mergeSort()  // easily discoverable
rocket.launch()  // a mutating method

μ„ ν˜Έν•˜μ§€ μ•ŠμŒ

let sorted = mergeSort(items)
launch(&rocket)

무료 ν•¨μˆ˜ μ˜ˆμ™Έ

let tuples = zip(a, b)  // feels natural as a free function (symmetry)
let value = max(x,y,z)  // another free function that feels natural

에 κ΄€ν•˜μ—¬,

무료 ν•¨μˆ˜ μ˜ˆμ™Έ

let tuples = zip(a, b)  // feels natural as a free function (symmetry)
let value = max(x,y,z)  // another free function that feels natural

"μžμ—°μŠ€λŸ½λ‹€"λŠ” 것은 μƒλ‹Ήνžˆ λͺ¨ν˜Έν•˜κ³  μ£Όκ΄€μ μž…λ‹ˆλ‹€.

μ—¬κΈ°μ„œ μš°λ¦¬κ°€ μ˜λ―Έν•˜λŠ” λ°”λ₯Ό λͺ…ν™•νžˆ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ˜ν•œ zip 및 max λͺ¨λ‘ κ·€ν•˜κ°€ PRμ—μ„œ μ œκΈ°ν•œ // hard to discover 문제둜 인해 어렀움을 κ²ͺ을 κ²ƒμž…λ‹ˆλ‹€.

IMHO, zip κ°€ μ–΄μƒ‰ν•œ 예라고 μƒκ°ν•©λ‹ˆλ‹€. λ‚΄κ°€ 가진 문제:

  • μ‹€μ œλ‘œ _ν•˜λŠ” 것_은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? a 및 b ? a 및 b μ–΄λ–»κ²Œλ“  μ••μΆ•ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? λ‹€λ₯Έ 것? 더 λ§Žμ€ λ§₯락이 μ—†μœΌλ©΄ μ•ŒκΈ°κ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

λŒ€μ‹ μ—

자유 ν•¨μˆ˜λŠ” 덜 μΌλ°˜μ μ΄μ§€λ§Œ μž‘μ—…μ΄ νŠΉμ • μœ ν˜• λ˜λŠ” μΈμŠ€ν„΄μŠ€μ™€ λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λ˜μ§€ μ•Šμ„ λ•Œ μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€.

이건 μ–΄λ•Œμš”?

ν΄λž˜μŠ€λ‚˜ μœ ν˜•μ— μ—°κ²°λ˜μ§€ μ•Šμ€ 자유 ν•¨μˆ˜λŠ” μ•„κ»΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ°€λŠ₯ν•˜λ©΄ 자유 ν•¨μˆ˜ λŒ€μ‹  λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것을 μ„ ν˜Έν•©λ‹ˆλ‹€. 이것은 가독성과 검색 κ°€λŠ₯성을 λ•μŠ΅λ‹ˆλ‹€.

자유 ν•¨μˆ˜λŠ” νŠΉμ • μœ ν˜•μ΄λ‚˜ μΈμŠ€ν„΄μŠ€μ™€ μ—°κ΄€λ˜μ§€ μ•Šμ„ λ•Œ κ°€μž₯ μ ν•©ν•©λ‹ˆλ‹€.

Free Function Exceptions 에 λŒ€ν•œ μΆ”κ°€ 토둠을 μ°ΎκΈ° μœ„ν•΄ 이 문제λ₯Ό λ‹€μ‹œ μ—½λ‹ˆλ‹€.

이것은 ν‘œμ€€ 라이브러리 κΈ°λŠ₯μž…λ‹ˆλ‹€. R, Python, C#, C++와 같은 μ–Έμ–΄μ—μ„œ μš°μ„  μˆœμœ„κ°€ μžˆμŠ΅λ‹ˆλ‹€.(λΆ€μŠ€νŠΈλ₯Ό 톡해).

이것은 ν‘œμ€€ 라이브러리 κΈ°λŠ₯μž…λ‹ˆλ‹€.

μ§„μ§œ? iOSμ—μ„œλŠ” μ•ˆμ¨λ΄μ„œ... *λ‹Ήν™©*

ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€... iOSμ—μ„œ 널리 이해/μ‚¬μš©λ˜λŠ” 경우 μ—¬κΈ°μ—μ„œ μš°λ €ν•˜λŠ” 사항이 잘λͺ»λœ 것일 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” λ‹Ήμ‹ μ˜ μž₯ν™©ν•œ μ œμ•ˆμ„ μ’‹μ•„ν•©λ‹ˆλ‹€ ... λ‚˜λŠ” zip 예제λ₯Ό ν¬κΈ°ν•˜κΈ°λ₯Ό κΊΌλ¦½λ‹ˆλ‹€. (μΆ”μ‹ : RW Swift νŒ€μ€ iOS보닀 ν¬κ±°λ‚˜ μž‘μ€ ν—Œμž₯을 가지고 μžˆμŠ΅λ‹ˆλ‹€.)

RW Swift Team은 iOS보닀 ν¬κ±°λ‚˜ μž‘μ€ ν—Œμž₯을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘ 사싀이닀. ;]

zip이 ν•˜λŠ” 일을 κ²€ν† ν•œ ν›„ 예제둜 λ‚¨κ²¨λ‘κ² μŠ΅λ‹ˆλ‹€. πŸ‘

λ‚΄ Swift-newbie-moment κ²½ν—˜μ— λŒ€ν•΄ μ‚¬κ³Όλ“œλ¦½λ‹ˆλ‹€. πŸ˜‰

κ±±μ • 마. 항상 λ„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. BTW, 방금 ν¬λ ˆλ”§μ— μ–ΈκΈ‰λ˜μ§€ μ•Šμ€ κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. λ‚˜λ„ 고칠게.

무료 κΈ°λŠ₯이 졜고의 μ†”λ£¨μ…˜μΈμ§€ ν™•μ‹ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ‚¬μš©ν•œλ‹€λ©΄ λ‹€λ₯Έ κ³³μ—μ„œ 닀루지 μ•ŠλŠ” κΈ°λŠ₯을 μΆ”κ°€ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ΅œλŒ€

let max = Swift.max(0, 1, 2)
let maxElement = [0, 1, 2].maxElement()!

maxElement λŠ” λ©”μ„œλ“œκ°€ μ•„λ‹ˆλΌ 속성이어야 ν•˜μ§€λ§Œ μ—¬μ „νžˆ 자유 κΈ°λŠ₯이 μ€‘λ³΅λœλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 이것이 λ™μΌν•œ κ²ƒμœΌλ‘œ μ»΄νŒŒμΌλ˜μ§€ μ•ŠμœΌλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ κ°œμ„ λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ 그렇지 μ•Šλ”λΌλ„ μ„±λŠ₯이 μ€‘μš”ν•˜μ§€ μ•Šμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ‚¬λžŒλ“€μ΄ λ§Žμ€ μš”μ†Œμ™€ ν•¨κ»˜ max κΈ°λŠ₯을 μ‚¬μš©ν•  것이라고 μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

지퍼
C#μ—μ„œ zip은 Swift ν”„λ‘œν† μ½œ ν™•μž₯ λ©”μ„œλ“œμ™€ λ™μΌν•˜κ²Œ κ΅¬ν˜„ λ©λ‹ˆλ‹€. 더 μ’‹μ§€λŠ” μ•Šμ§€λ§Œ zip λ‹€λ₯΄κ²Œ μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μ˜ μ˜ˆμž…λ‹ˆλ‹€.

Swiftμ—μ„œ zip λŠ” Zip2Sequence λŒ€ν•œ 이 μ΄λ‹ˆμ…œλΌμ΄μ €μ™€ λ™μΌν•©λ‹ˆλ‹€. λ‹€μ–‘ν•œ μž…λ ₯ μ‹œν€€μŠ€μ˜ μ••μΆ• μ‹œν€€μŠ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 방법이 있으면 μ’‹κ² μ§€λ§Œ κ·Έλ ‡κ²Œ 되기 μ „κΉŒμ§€λŠ” μ΄ˆκΈ°ν™” ν”„λ‘œκ·Έλž¨μ„ 직접 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

zip([1...3], ["a"..."c"])
Zip2Sequence([1...3], ["a"..."c"])

μ—°μ‚°μž
λ‚΄κ°€ Swift둜 μž‘μ„±ν•œ λŒ€λΆ€λΆ„μ˜ 무료 ν•¨μˆ˜λŠ” μ—°μ‚°μžμž…λ‹ˆλ‹€. λ‚˜λŠ” Chris Lattner와 Joe Groffκ°€ λ―Έλž˜μ— C#κ³Ό 같은 μœ ν˜• λ‚΄μ—μ„œ μ—°μ‚°μžλ₯Ό μ •μ˜ν•  수 μžˆμ„ 것이라고 μ œμ•ˆν•˜λŠ” 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ—°μ‚°μžλŠ” λ‹€λ₯Έ ν•¨μˆ˜μ— λŒ€ν•΄ μ„ νƒλœ κ·œμΉ™μ„ λ”°λ₯Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬μ˜ 자유 κΈ°λŠ₯ μ „μš© κ΅¬ν˜„μ€ μ•„λ§ˆλ„ μ§€μΉ¨μœΌλ‘œ μ‚¬μš©λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

μ—°μ‚°μž
λ‚΄κ°€ Swift둜 μž‘μ„±ν•œ λŒ€λΆ€λΆ„μ˜ 무료 ν•¨μˆ˜λŠ” μ—°μ‚°μžμž…λ‹ˆλ‹€. λ‚˜λŠ” Chris Lattner와 Joe Groffκ°€ λ―Έλž˜μ— C#κ³Ό 같은 μœ ν˜• λ‚΄μ—μ„œ μ—°μ‚°μžλ₯Ό μ •μ˜ν•  수 μžˆμ„ 것이라고 μ œμ•ˆν•˜λŠ” 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€...

λ„€, 이것이 Swiftκ°€ μ•žμœΌλ‘œ λ‚˜μ•„κ°ˆ λ°©ν–₯일 κ²ƒμž…λ‹ˆλ‹€. κ·€ν•˜κ°€ μ–ΈκΈ‰ν•œ κ²ƒμ²˜λŸΌ Chris Lattner의 졜근 μ œμ•ˆμ΄ μžˆμŠ΅λ‹ˆλ‹€.

이것은 특히 Equatable 와 같은 ν”„λ‘œν† μ½œμ—μ„œ λ…νŠΉν•©λ‹ˆλ‹€. 이 ν”„λ‘œν† μ½œμ€ ν™•μž₯ 지침에 따라 본질적으둜 빈 ν™•μž₯을 생성해야 _ν•„μš”ν•©λ‹ˆλ‹€_. 이것은 기껏해야 μ–΄μƒ‰ν•©λ‹ˆλ‹€. 😞

λ‚˜λŠ” ν™•μ‹€νžˆ μš΄μ˜μžκ°€ 이상적 무료 κΈ°λŠ₯에 λŒ€ν•œ 예제둜 μ‚¬μš©λ˜μ–΄μ„œλŠ” μ•ˆλœλ‹€λŠ” 것에 λ™μ˜ν•©λ‹ˆλ‹€.

@Jessy- 의 λŒ“κΈ€ κ°μ‚¬ν•©λ‹ˆλ‹€!

λͺ‡ 가지 μ°Έκ³  사항:

maxElement() λŠ” O(1)이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 일뢀 μ‚¬μš©μžμ—κ²Œ λ†€λž„ 수 μžˆλŠ” λ©”μ†Œλ“œλ‘œ μ„ μ–Έλ˜μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. O(1)이 μ•„λ‹Œ 속성을 κ΅¬ν˜„ν•˜λŠ” 경우 λͺ…ν™•ν•˜κ²Œ λ¬Έμ„œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€. (RW νŠœν† λ¦¬μ–Όμ—μ„œ μš°λ¦¬λŠ” λͺ¨λ“  μ½”λ“œκ°€ κ³΅κ°œλ˜μ–΄ μžˆλ‹€λŠ” μ‚¬μΉ˜λ₯Ό 가지고 μžˆμœΌλ―€λ‘œ 그것에 λŒ€ν•΄ 많이 κ±±μ •ν•˜κ±°λ‚˜ μŠ€νƒ€μΌ μ§€μΉ¨μœΌλ‘œ μ‹œν–‰ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.)

λ°˜λ©΄μ— max<T: Comparable> 의 일뢀 ν˜•μ‹μ€ O(1)이며 ν•˜λ“œμ›¨μ–΄λ₯Ό ν™œμš©ν•˜κΈ° μœ„ν•΄ νŠΉν™”λ  κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€. (ν™•μΈν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ κ°€λ³€ν˜• 버전 외에 두 개의 λ§€κ°œλ³€μˆ˜ 버전이 μžˆλŠ” 것도 κ·Έ λ•Œλ¬ΈμΈ 것 κ°™μŠ΅λ‹ˆλ‹€.)

μ–΄λ–€ κ²½μš°λ“ , λ‚˜λŠ” 우리 λͺ¨λ‘κ°€ 자유 κΈ°λŠ₯이 λ“œλ¬Όκ²Œ μ‚¬μš©λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 데 λ™μ˜ν•œλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ €λŠ” _μ ˆλŒ€_ λ°˜λŒ€ν•  κ²ƒμž…λ‹ˆλ‹€. μ‚¬μš©λœ μ˜ˆμ œλŠ” ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ κ°€μ Έμ˜¨ κ²ƒμž…λ‹ˆλ‹€. ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ zip κΈ°λŠ₯을 μ œκ±°ν•˜μžλŠ” μ œμ•ˆμ„ λ³Έ 적이 μ—†μŠ΅λ‹ˆλ‹€. @JRG-Developer의 단어 λ³€κ²½ λ˜λŠ” ν˜„μž¬ λ³‘ν•©λœ pull μš”μ²­ λͺ¨λ“ˆμ˜ 이 단어 변경에 λŒ€ν•œ μ΄μ˜κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

더 λ…Όμ˜ν•΄μ•Ό ν•  사항이 μžˆλ‹€κ³  μƒκ°λ˜λ©΄ μ–Έμ œλ“ μ§€ λ‹€μ‹œ μ—΄μ–΄ μ£Όμ‹­μ‹œμ˜€. (μ—…λ°μ΄νŠΈ λΈŒλžœμΉ˜μ— λ³‘ν•©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰