一般我們在做錯誤檢查的時候,會用到不少的條件判斷,以此導向我們要的結果或不符合的
結果處理。但如果當下的檢查太過於繁雜,就會造成巢狀似的判斷,在程式碼的可讀性上顯
得有些複雜! 因此在這邊主要是引用Java重構 - 結城浩先生書內提到的概念,並舉個例子
做個紀錄!
首先,利用條件判斷的例子如下:
,都是以hard code的型式表示,由於只是想呈現概念囉!
再來是利用例外處理的形式,程式碼改寫如下:
主要是另外自訂了一個Exception class,再來改寫checkError method,若條件不符的話,就
丟出一個例外,並且在呼叫端的地方才進行catch,因此必須在該method做
throws LoginCheckException,如此一來,在呼叫端的method若有問題,就集中在此被catch
,也不必做巢狀判斷式,一旦其中一個method有問題,就會立即被捕捉印出錯誤訊息!
結果處理。但如果當下的檢查太過於繁雜,就會造成巢狀似的判斷,在程式碼的可讀性上顯
得有些複雜! 因此在這邊主要是引用Java重構 - 結城浩先生書內提到的概念,並舉個例子
做個紀錄!
首先,利用條件判斷的例子如下:
public class ErrorCode {
static String account = "Ben1";
static String password = "1234";
static String certification = "8888";
static String errorMsg = null;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(!checkError1()){
if(!checkError2()){
if(!checkError3()){
System.out.println("Login success!");
}else{
System.out.println(errorMsg);
}
}else{
System.out.println(errorMsg);
}
}else{
System.out.println(errorMsg);
}
}
public static boolean checkError1(){
if(!account.equals("Ben")){
errorMsg = "account error!";
return true;
}
return false;
}
public static boolean checkError2(){
if(!password.equals("1234")){
errorMsg = "password error!";
return true;
}
return false;
}
public static boolean checkError3(){
if(!certification.equals("8888")){
errorMsg = "certification error!";
return true;
}
return false;
}
}
例子很簡單,表示當執行程式時做三層的條件判斷,依序為帳號檢查、密碼檢查、認證碼等,都是以hard code的型式表示,由於只是想呈現概念囉!
再來是利用例外處理的形式,程式碼改寫如下:
public class ReplaceErrorCode {
static String account = "Ben1";
static String password = "1234";
static String certification = "8888";
static String errorMsg = null;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
checkError1();
checkError2();
checkError3();
} catch(LoginCheckException e){
System.out.println(e.getMessage());
}
}
public static void checkError1() throws LoginCheckException{
if(!account.equals("Ben")){
throw new LoginCheckException("account error!");
}
}
public static void checkError2() throws LoginCheckException{
if(!password.equals("1234")){
throw new LoginCheckException("password error!");
}
}
public static void checkError3() throws LoginCheckException{
if(!certification.equals("8888")){
throw new LoginCheckException("certification error!");
}
}
}
class LoginCheckException extends Exception{
public LoginCheckException(String msg){
super(msg);
}
}
主要是另外自訂了一個Exception class,再來改寫checkError method,若條件不符的話,就
丟出一個例外,並且在呼叫端的地方才進行catch,因此必須在該method做
throws LoginCheckException,如此一來,在呼叫端的method若有問題,就集中在此被catch
,也不必做巢狀判斷式,一旦其中一個method有問題,就會立即被捕捉印出錯誤訊息!
留言
張貼留言