2014-07-01 2 views
0

나는 스위프트 언어를 공부하고 있고, github.com에서 나는 SwiftHelper을 발견했다.속성을 사용하는 대신 메서드 호출을 사용하지 않는 이유는 무엇입니까?

extension Int { 
    var isEven: Bool { 
     let remainder = self % 2 
     return remainder == 0 
    } 

    var isOdd: Bool { 
     return !isEven 
    } 
} 

이유 isEvenisOdd이 기록 된 속성으로하지 메서드 호출 : 그것에서
내가 코드를 아래에있는, IntHelper.swift 파일입니까?

이 경우 속성 사용은 메서드 호출을 사용하는 것보다 이점이 있습니까?

답변

2

순전히 기술적 인 측면에서 보면 메서드에 대한 속성 사용에는 이점이나 단점이 없으며 그 반대의 경우도 마찬가지입니다. * : 유일한 차이는 가독성입니다.

이 특별한 경우에는 확장 속성을 사용하면 메서드 호출을 사용하는 것보다 가독성을 향상시킬 수 있다고 생각합니다. 들은 영어와 동일한 순서 즉 유지 대

if myInt.isOdd() { 
    ... // Do something 
} 

if isOdd(myInt) { 
    ... // Do something 
} 

제 (속성) 및 제 (방법) 코드 부분

if myInt.isOdd { 
    ... // Do something 
} 

비교 약간의 가독성 향상에 기여합니다. 그러나 두 번째 것은 불필요한 괄호 쌍을 추가합니다. 완성을 위해 동일한 작업 (기능)을 수행하는 세 번째 방법은 다른 두 가지 방법보다 읽기 쉽지 않습니다.

* 이는 Objective-C 및 C#과 같은 속성을 지원하는 다른 언어에도 적용됩니다. 많은 방법에 이 방법처럼을있는 :)에서 그들이 어떤 상태 자체를 저장, 오히려하지 않는 것이 - 확장에 사용

+0

감사합니다 아주 많이! 그리고 예제도 명확하고 이해하기 쉽습니다. –

+0

'isOdd'가'Int'의 확장 메소드로 구현되면 메소드 호출은'isOdd (myInt)'가 아니라'myInt.isOdd()'가됩니다. –

+0

@MartinR 네 말이 맞아. 아마도 OP는 'myInt.isOdd()'를 의미했을거야. 나는 그것도 언급했다. 감사! – dasblinkenlight

0

특성은 '계산 된 속성'로 알려진 무엇인가 계산 된 값을 반환하십시오.

이런 식으로 '속성'과 '방법'을 구현하는 것은 의미 론적으로 생각할 수 있습니다. 여기에서 값이 계산 되더라도 객체를 예상하는 방식으로 객체 상태에 대한 정보 (기술적으로 '구조체'인 경우)를 나타낼뿐입니다. state는 자신이나 의존성을 수정할 것을 요구하지 않습니다. 가독성의 측면에서

, 스위프트의 메소드 (인수하지 않고 심지어는) 여전히 괄호가 필요 -이 예제에서 만드는 차이를 볼 수 있습니다 빠른 답변

// as a property 
if 4.isEven { println("all is right in the world") } 

// as a method 
if 5.isEven() { println("we have a problem") } 
관련 문제