garbages

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ garbages ] in KIDS
글 쓴 이(By): ciecet (_)
날 짜 (Date): 2010년 11월 20일 (토) 오전 03시 19분 59초
제 목(Title): Re: Goto-less java considered harmful..


주어진 인자가 잘못된 경우엔
IllegalArgumentException이라는 Runtime exception을 쓰는게 관례입니다.
거부감을 떠나서 그렇다는거고...

Exception이라는게 항상 좋지는 않습니다.
통상적으로 잘 동작해야 하는 것들은 Exception을 던지는게 맞지만
(InputStream.read())
실패할 확률이 높은 것들은 그냥 결과값을 받아서 검사하는게 낫거든요.
(Map.get()이나 File.delete()등등.)

그리고 try..finally는 exception과 상관없이 사용할 수 있습니다.
개인적으론 예제의 error:대신 exit:를 쓰고, 여러 label을 사용할 상황이면
flag variable등을 둬서 exit: 한곳에서 모두 처리합니다.
그래서 try..finally와 잘 대응되더군요.

do_job(param1, param2) {
    if (param1 <= 0 || param2 == null) {
        throw new IllegalArgumentException("param1 or param2 is invalid");
    }

    NativeResource buf1 = null;
    NativeResource buf2 = null;
    try {
        buf1 = NativeResource.allocate();
        buf2 = NativeResource.allocate();
        if (buf1 == null || buf2 == null) {
            log("out of native resource");
            return false;
        }
        return some_lib_func(buf1, buf2, param1, param2);
    } finally {
if (buf1 != null) {
            buf1.dispose();
        }
        if (buf2 != null) {
            buf2.dispose();
        }
    }
}

Java에선 goto와 같은 망나니(?)를 억지로 사용하려면
아래와 같은 방법을 쓸 수는 있을 것 같아요...

for (int nextRun = 1; nextRun != 0;) switch (nextRun) {
    case 1: {
        ....
        if (NG) {
            nextRun = 3; continue; // goto 3
        }
        ....
        nextRun = 0; continue; // exit loop
    }
    
    case 2: {
        ....
    }

    case 3: {
        ....
    }
}
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.