[scala] Scala 메서드 선언에서 등호를 언제 사용해야합니까?

등호 사용 :

object HelloWorld {
  def main(args: Array[String]) = {
    println("Hello!")
  }
}

등호없이 :

object HelloWorld {
  def main(args: Array[String]) {
    println("Hello!")
  }
}

위의 두 프로그램은 모두 동일한 방식으로 실행됩니다. Scala에서 내가 싫어하는 블로그 게시물 에서 등호가 없으면 메소드가 Unit(Java와 동일 void) 반환되므로 값을 반환하는 메소드는 등호를 사용해야한다고 읽었습니다 . 그러나 값을 반환하지 않는 메서드는 어느 쪽이든 작성할 수 있습니다.

값을 반환하지 않는 Scala 메서드에서 등호를 사용하는 가장 좋은 방법은 무엇입니까?



답변

나는 실제로 다니엘에게 매우 동의하지 않습니다. 나는 비와 동일한 구문을해야한다고 생각 절대 사용하지. 메서드가 API로 노출되고 실수로 잘못된 유형을 반환 할 우려가있는 경우 명시 적 유형 주석을 추가합니다.

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello!")
    123
  }
}

같지 않은 구문은 더 짧고 “더 깔끔하게”보일 수 있지만 혼란의 가능성을 추가한다고 생각합니다. 나는 때때로 등호를 추가하는 것을 잊고 실제로 Unit을 반환 할 때 내 메서드가 값을 반환한다고 믿었습니다. 비동 등 및 동일 유형의 유추 유형 구문이 시각적으로 유사하기 때문에이 문제를 놓치기 쉽습니다.

약간의 작업 비용이 들지만 중요한 경우 명시 적 유형 주석 (즉, 노출 된 인터페이스)을 선호합니다.


답변

업데이트 : Scala-2.10부터 등호를 사용하는 것이 좋습니다. 이전 답변 :

반환하는 메서드 Unit항상 같지 않은 구문을 사용해야합니다. 이렇게하면 구현시 API로 넘어갈 수있는 잠재적 인 실수를 방지 할 수 있습니다. 예를 들어 실수로 다음과 같은 작업을 수행했을 수 있습니다.

object HelloWorld {
  def main(args: Array[String]) = {
    println("Hello!")
    123
  }
}

물론 사소한 예이지만 이것이 어떻게 문제가 될 수 있는지 알 수 있습니다. 마지막식이 반환 되지 않기 때문에 Unit메서드 자체는 Unit. 이는 공용 API에 노출되며 향후 다른 문제를 일으킬 수 있습니다. 같지 않은 구문을 사용하면 마지막 표현식이 무엇인지는 중요하지 않습니다. Scala는 반환 유형을 Unit.

또한 두 글자 더 깨끗합니다. 🙂 나는 또한 non-equals 구문이 코드를 읽기 쉽게 만든다고 생각하는 경향이 있습니다. 문제의 메서드가 Unit유용한 값보다 반환된다는 것이 더 분명합니다 .

관련 메모에서 추상 메서드에 대한 유사한 구문이 있습니다.

trait Foo {
  def bar(s: String)
}

메서드 bar에는 서명이 String=>Unit있습니다. 스칼라는 추상 멤버에 대한 유형 주석을 생략 할 때이를 수행합니다. 다시 한 번, 이것은 더 깨끗하고 (내 생각에) 더 읽기 쉽습니다.


답변

당신은 해야한다 단위를 반환 정의를 제외하고 호출 선언에서 등호 기호를 사용합니다.

후자의 경우 등호를 무시할 수 있습니다 . 이 구문은 더 이상 사용되지 않을 수 있으므로 피하는 것이 가장 좋습니다. 등호를 사용하고 반환 유형을 선언하면 항상 작동합니다.


답변

메서드의 경우 Scala Style Guide 는 프로 시저 구문이 아닌 equals 구문을 권장합니다.

절차 구문

프로 시저 구문은 간결함을 얻기 위해 혼동되는 경향이 있으므로 피하십시오.

// don't do this
def printBar(bar: Baz) {
  println(bar)
}
// write this instead
def printBar(bar: Bar): Unit = {
  println(bar)
}


답변

한 가지 : Unit을 반환해야하는 메서드의 마지막 문장이 Unit을 반환하지 않는다고 상상해보십시오. 같지 않은 구문을 사용하는 것이 매우 편리합니다. 여러 사용 사례를 볼 때 더 이상 사용되지 않기를 바랍니다.


답변

시간이 지남에 따라 기본 스타일이 변경되었으며 답변에 대한 많은 주석에서 언급되었으므로 공식 스타일 가이드 에서 =함수 선언에 구문 을 사용하는 것이 좋습니다 .


답변

반환 값이없는 메서드의 경우 이러한 메서드를 표현하는 방법은 중괄호로 묶인 블록이있는 메서드 다음에 결과 유형과 등호를 생략하는 것입니다. 이 형식에서 메서드는 부작용에 대해서만 실행되는 메서드 인 프로 시저처럼 보입니다.