1

私は2つの方法で実行できるコードを持っています:

SWITCH WITHOUT BREAK (ケースの共通コード用)

ResultCodes resCode = ResultCodes.fromResponseCode(resultCode);
switch (resCode) {
case SUCCESS:
    if(userIdentity != null)
        Logger.logInfo(MODULE, "User Authenticated Successfully, UseIdentity: " +userIdentity);
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = SUCCESS;
    break;
case REDIRECT:
    url = resultMap.get(WebinKeyConstants.REDIRECTION_URL.val);
    Logger.logInfo(MODULE, "Redirecting to URL : " + url);
    resultMessage=getText(resCode.responseCode.toString());         
    RESPONSE = REDIRECT;
    break;
case AUTHENTICATION_FAIL:           
case USER_ACCOUNT_BLOCKED:
case USER_ACCOUNT_INACTIVE:
case USER_ACCOUNT_SUSPENDED:
case USER_ACCOUNT_TERMINATED:
case USER_ACCOUNT_BLOCKED_ALERT:
case OTP_SEND_SUCCESS:
case USER_PROFILE_NOT_FOUND:
         resultMessage=getText(resCode.responseCode.toString());
         RESPONSE = ERROR;
         break;
}

上記のシナリオでは、すべてのケースで同じコードが実行されることを意味するブレークが 1 つだけあります。

WITH BREAK FOR EACH CASE(ケース共通コード用)

上記のシナリオは、以下に示すように、他の方法でも実現できます

ResultCodes resCode = ResultCodes.fromResponseCode(resultCode);
switch (resCode) {
case SUCCESS:
    if(userIdentity != null)
        Logger.logInfo(MODULE, "User Authenticated Successfully, UseIdentity: " +userIdentity);
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = SUCCESS;
    break;
case REDIRECT:
    url = resultMap.get(WebinKeyConstants.REDIRECTION_URL.val);
    Logger.logInfo(MODULE, "Redirecting to URL : " + url);
    resultMessage=getText(resCode.responseCode.toString());         
    RESPONSE = REDIRECT;
    break;
case AUTHENTICATION_FAIL:           
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
case USER_ACCOUNT_BLOCKED:
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
case USER_ACCOUNT_INACTIVE:
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
case USER_ACCOUNT_SUSPENDED:
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
case USER_ACCOUNT_TERMINATED:
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
case USER_ACCOUNT_BLOCKED_ALERT:
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
case OTP_SEND_SUCCESS:
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
case USER_PROFILE_NOT_FOUND:
    resultMessage=getText(resCode.responseCode.toString());
    RESPONSE = ERROR;
    break;
}

どちらを使用するのが良いですか?パフォーマンスの問題はありますか?

4

4 に答える 4

2

まずswitch block、コードが少なくなり、読みやすくなります。パフォーマンスの問題の場合、それは無視できます。

于 2013-10-25T05:21:07.043 に答える
2

2 番目の形式を使用すると、このコードを次に見る開発者は、個々の行を見て違いを確認するのに何時間も費やすことになります。最初の形式を使用すると、「ここでは、これら 2 つのケースに違いはありません」と明確に示されます。

これは非常に簡単です。最初のフォームを使用します。

于 2013-10-25T05:33:06.267 に答える
2

これはより明確になります。

ResultCodes resCode = ResultCodes.fromResponseCode(resultCode);
if (resCode.isError()) {
     resultMessage = resCode.getResultMessage();
     RESPONSE = ERROR;
}

public enum ResultCodes {

    OK(false), AUTHENTICATION_FAIL(true);

    public final boolean isError;

    ResultCodes(boolean error) { isError = error; }

    public boolean isError() { return isError; }
    public String getResultMessage() { return name(); }

}
于 2013-10-25T05:23:46.687 に答える