2014-10-29 5 views
4

스칼라에서 java.awt.Rectangle의 종횡비를 계산하려고합니다. 나는 "비율이 더 짧은 쪽의 짧은 쪽"의 가로 세로 비율의 정의가 아니라 가로 세로 비율의 "가로 세로 비율"유형에 대해 설명 할 것입니다.스칼라 표현식 계산 비율 단순화

다음 코드는 작동하지만 임시 변수를 피하고 한 줄로 바꾸는 방법이 있습니까? 일부 필요 두 값을 가정

val sizes = Seq(rect.getWidth, rect.getHeight) 
val aspectRatio = sizes.max/sizes.min 

답변

8

접근 방법은, 0으로 대부분의 부문에서,

Seq(rect.getWidth, rect.getHeight).sorted.reverse.foldRight(1.0)(_/_) 

당신이 제안이 코드는하지만 더 읽을 시퀀스에 추가하고, 오류로 적은 경향이있다 케어.

+3

시퀀스를 생성하고 3 가지 연산을 수행하는 것은 쉬운 작업에 비해 너무 복잡합니다. – rtruszk

5
val aspectRatio = if(rect.getWidth >= rect.getHeight) rect.getWidth/rect.getHeight else rect.getHeight/rect.getWidth 
+0

+1 비교를 한 번만하면됩니다. – Andreas

+0

올바른 형식입니다. 스타일 가이드의 마지막 단락을보십시오 : http://docs.scala-lang.org/style/control-structures.html, "사소한 조건들". 게다가, 이것은 정말로 사소한 작업입니다. 나는 여기에 if/else보다 더 많은 것을 사용해야하는 이유는 없습니다. – makingthematrix

18

최소 및 최대 값을 계산하기 위해 시퀀스를 만들 필요는 없습니다.

Math.max(rect.getWidth, rect.getHeight)/Math.min(rect.getWidth, rect.getHeight)