2012-05-24 2 views
1

조건부가있는 한 줄짜리 반송선을 어떻게 조작 할 수 있습니까? 예를 들어 '중간 값 반환'을하고 싶다면 :조건이있는 AS3 한 줄자

//assuming sorted input array 
return ((inputArray.length % 2) && (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1])/2) || inputArray[int(inputArray.length/2)+1]; 

어쨌든이 방법을 사용할 수 있습니까?

+0

나는 * 더 * 읽고/이해할 수있는 표현하려고하는 개념을 만들 때 모두 한 줄의 코드입니다. 하지만 그게 너가 여기서하는 일이 아닌 것 같아. 그래서 물어봐야 겠어. 세상에 왜? –

+1

"중간 값 찾기"기능을 변경할 필요가 없으며 쉽게 버그를 테스트 할 수 있다고 생각합니다. 한 줄은 안전한 공간입니다. 또한, 나는 그것을 어떻게하는지 알고 싶다. – apscience

답변

3

당신은 삼항 연산자를 사용한다 :

return (inputArray.length % 2 != 0) ? (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1])/2 : inputArray[int(inputArray.length/2)+1]; 

하는 것과 같습니다 만 &&를 사용하려면

if (inputArray.length % 2 != 0) { 
    return (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1])/2; 
} else { 
    return inputArray[int(inputArray.length/2)+1]; 
} 

을 및 ||을 사용하면 다음을 사용할 수 있습니다 (실제로 이동하지 않음). OD 프로그래밍 스타일) :

((inputArray.length % 2 != 0) || return inputArray[int(inputArray.length/2)+1]) && return (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]); 

에 해당 어떤 : 그래서

(condition || return value2) && return value1; 

, 부울 연산자의 short-circuit evaluation 덕분에 : conditiontrue입니다

  • 경우, return value2 평가되지 않고 return value1이 실행됩니다.
  • conditionfalse 인 경우 return value2이 평가됩니다.
0

수정 조건을 시도해보십시오 :

return ((inputArray.length % 2) && (((inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1])/2) || inputArray[int(inputArray.length/2)+1])); 
1

반복이 없으면서도 읽을 수있는 버전이 될 것입니다. 그러나 일부 변수가 있습니다.

var index:int = int(inputArray.length/2); 
var item1:Number = inputArray[index]; 
var item2:Number = inputArray[index + 1]; 
var median:Number = (item1 + item2)/2; 

return (inputArray.length % 2 != 0) ? median : item2;