하나의 조건 만있는 IF 문을보다 스위치를 선호 할 이유가 있습니까?

StackOverflow https://stackoverflow.com/questions/1638241

문제

팀 프로젝트에서 다음 코드를 찾았습니다.

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message)
    isRemoteDisconnectMessage = False
    Select Case (m.Msg)
        Case WM_WTSSESSION_CHANGE
            Select Case (m.WParam.ToInt32)
                Case WTS_REMOTE_DISCONNECT
                    isRemoteDisconnectMessage = True
            End Select
    End Select
End Function

이 함수에는 리턴 유형이 없다는 것을 신경 쓰지 마십시오 ( '부울'으로 쉽게 추가 할 수 있습니다). 내가 궁금해하는 것은 다음 (나에게 훨씬 더 읽기 쉬운) 코드보다 위의 것을 선호 할 이유가 있습니까?

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message) As Boolean
    Return m.Msg = WM_WTSSESSION_CHANGE AndAlso _
           m.WParam.ToInt32() = WTS_REMOTE_DISCONNECT
End Function

일반적인 용어로 질문을 제시하려면 : 사용하는 것이 합리적입니까? switch (또는이 경우, Select Case) 단일 조건을 테스트하기 위해 블록 및/또는 중첩 블록? 이것은 아마도 간단한 것보다 더 빠릅니다 if?

도움이 되었습니까?

해결책

성능이 걱정된다면 ... 프로필. 그렇지 않으면 가독성 측면에서 잘못 잘못 생각할 수 없습니다 ...

다른 팁

나는 그것이 속도 측면에서 실제로 중요하다고 생각하지 않으며, 컴파일러는 그것을 최적화 할 수 있어야합니다.

나는 그것이 단지 선호의 문제 일 것이라고 생각합니다.

내 규칙은 IF/Else 조건의 수가 3보다 큰 경우 스위치 문을 사용하는 것입니다. IF/다른 조건의 수가 증가함에 따라 가독성/유지 가능성 외에 다른 의미가되는 이유 뒤에는 데이터가 없습니다.

나는 당신이 주어진 특정 사례의 대답은 아니오라고 생각합니다. 다른 답변에서 제안한 것처럼 컴파일러가 실질적인 차이를 최적화하기를 희망합니다.

나는 이것에 약간의 컷, 붙여 넣기 및 삭제 코딩에 돈을 넣었다 - 일반화 된 중첩 케이스 문장을 가져 와서 필요한 예/아니오 결과를 제공하는 한 비트를 추출합니다.

이것이 유사한 인라인이거나/또는 반환 플래그가 설정된 기능 호출이 있었다면, 아마도 그것을 정당화하기 시작할 수는 있지만 그렇지 않은 지점에있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top