2012年10月11日 星期四

[概念分享] 精簡化

相信大家都用過『switch』這程式語法,
我想跟有看到這篇的朋友分享,如何把它做的『精簡點』

一般來說,『switch』就是用來做選擇的,...好像是廢話
講一個我過去寫的某段程式
使用者輸入了一段數字,必須把他編碼成我要的code
我必須判斷他是多長,什麼長度必須做什麼事

這段程式是要做書籍ISBN的檢查碼,所以使用者輸入的數字字串可能會有『9、10、12、13』
ISBN檢查碼有興趣的就去google一下吧,這裡不討論~
我們拿ENA10編碼檢查碼做例子
要做的事很簡單,
如果輸入的長度是12或13,就把前面的三個數字去掉,
比如說   9789866026300(13)→9866026300(10碼)
如果輸入或剩下的數字的長度是10,就在把輸入的數字字串長度變成9
可能有人會這麼做

 if(numeric.length()>=12&&numeric.length()<=13)
  numeric = numeric.substr(3,numeric.length());
 switch(numeric.length())
 {
 case 9:
  break;
 case 10:
  numeric = numeric.substr(0,numeric.length()-1);
  break;
 }

雖然達成了目的,但是並不是完美的解決方式
既然是一定會是12或13,那乾脆就把它放進switch裡吧

 
 switch(numeric.length())
 {
 case 13:
 case 12:
  numeric = numeric.substr(3,numeric.length());
 case 10:
  if(numeric.length()==10)
   numeric = numeric.substr(0,numeric.length()-1);
  break;
 }
好吧,都變這樣了,應該要滿意了吧?
但是,還可以更好,雖然是要讓他連續做到下一行,長度有可能不會是10
但是也有可能一開始輸入的字串,長度就是10,等於還要再判斷一次。
於是我們在做一次最後的修改
 
 switch(numeric.length())
 {
 case 13:
 case 12:
  numeric = numeric.substr(3,numeric.length());
  if(numeric.length()==9)break;
 case 10:
  numeric = numeric.substr(0,numeric.length()-1);
  break;
 }
於是這樣就功德圓滿了!

沒有留言:

張貼留言