으로, 마틴 오더 스키가 연결 기조이에 대해 설명합니다. 물론, "해야 할 때 ..."가 말하듯이, 이것은 궁극적으로 문체적인 질문이므로, 단지 의견을 낼 수 있습니다.
두 가지 : (1) 유형 예/아니오 및 (2) 프로 시저 구문 예/아니오.
(1) 물론 구현되지 않은 순수 API의 경우 반환 유형을 지정해야합니다. 나는 이것을 동시에 구현하는 어떤 메소드 구현으로 확장 할 것이다. API. 즉, 메서드가 특성을 구현하지 않는 경우 컴파일러에서 반환 형식이 다를 때 오류가 발생하는 경우 메서드에 주석을 추가해야합니다. private 및 local 메서드는 첫 번째 눈금에서 유형을 알아내는 것이 어렵거나 (예 : 재귀 메서드 호출에서) 강요된 경우가 아니면 반환 유형을 유추하는 것이 좋습니다. 명시 적 리턴 유형을 제공 할 경우 컴파일은 입니다.
"쉬운" 반환 형식의 짧은 메서드가있는 경우에는 추측이 좋다고 생각합니다. 전의.
trait Foo {
def sqrt(d: Double) = math.sqrt(d)
def toString = "Foo"
def bar = new Bar(123)
}
(그러나 이미 누군가는 math.sqrt
가 Double
반환 분명하지 않을 수 있음을 주장 할 수 있습니다).
더 자세한 있지만, 당신은 코드를 더 읽기 쉽게 그리고 당신은 피 (A) 가 구현 또는 하위 유형에 대한 정보를 유출 곳 슈퍼 형 sufficies :
trait Before {
def bar = new BarImpl
def seq = Vector(1, 2, 3)
}
trait After {
def bar: Bar = new BarImpl
def seq: IndexedSeq[Int] = Vector(1, 2, 3)
}
와 (B)를 잘못된 수집 유형의 구조 유형에서 당신이 의도하지 않은 실수 돌려 무언가를 피하기 등
(2) 최근에 나는 프로 시저 구문을 선호 때까지, 그러나 새로운 토론과 많은 사람들이 불만을 표명 한 후에 나는 명시적인 : Unit =
주석을 사용해 보았습니다. 지금은 더 좋아합니다. 프로 시저 구문을 보면 메서드에 부작용이 있다는 것을 분명히 알 수 있지만 실제로는 : Unit =
이 그 표시를 분명히 나타냅니다.
trait Before {
private var _x = 0
def x: Int = _x
def x_=(value: Int) { _x = value }
}
I 신체가 if
시작 대부분의 경우, 패턴 match
, synchronized
블록 또는 future
발생하는 결과
trait After {
private var _x = 0
def x: Int = _x
def x_=(value: Int): Unit = _x = value // if double = confuses you, use new line?
}
대 렉션
map
: 또한 종종 중괄호 양은 제거 표현 등, 이러한 경우 중괄호를 제거 좋은 :
trait Before {
def connect()(implicit tx: Tx) {
values.foreach { case (x, _) =>
x.changed += this
}
}
}
trait After {
def connect()(implicit tx: Tx): Unit =
values.foreach { case (x, _) =>
x.changed += this
}
}
엄마 Odersky는 절차 구문을 피할 것을 권장합니다. [Keynote-Scala with Style chapter 45] (http://www.parleys.com/play/51c1994ae4b0d38b54f4621b/chapter45/about)를 참조하십시오. 또한 [이 답변] (http://stackoverflow.com/a/17502581/406435)의 주석에있는 토론을 참조하십시오. – senia
@senia ok, 프로 시저 구문이 나쁘다면 무엇이 더 나은가? 반환 단위로 'Unit'을 명시 적으로 선언하거나 생략합니다 (컴파일러는 유형 자체를 유추 할 것입니까?). 다른 유형과 마찬가지로 – MyTitle
입니다. 일부 가이드에서는 public 메서드에서 형식을 명시 적으로 지정하는 것이 좋습니다. 나는 그것이 주로 의견에 근거한 질문이라고 생각한다. – senia