無關對錯,只是邏輯

  • 1947
  • 0

摘要:無關對錯,只是邏輯

前陣子review member的code發現一段有趣的判斷

用學校常會用的例子來說明會像是...判斷一張考卷的成績

低於60顯示D

60~79顯示C

80~89顯示B

90~99顯示A

100顯示A+

這樣,然後code就會長這樣

if( source < 60 )
{
     Console.WriteLine( "D" );
     retuen;
}
else if( source >= 60 || source < 80 )
{
     Console.WriteLine( "C" );
     retuen;
}
else if( source >= 80 || source < 90 )
{
     Console.WriteLine( "B" );
     retuen;
}
else if( source >= 90 || source < 100 )
{
     Console.WriteLine( "A" );     
     retuen;
}
else if( 100 == source )
{
     Console.WriteLine( "A+" );
     retuen;
}

看起來是符合需求,結果也是預期中的...那問題在哪呢?

問題在這個if else是平鋪直述把文字描述做出來沒有真的想想if else的判斷啊

 

在本例來說,第二個if else根本不需要判斷分數是否大於60阿

因為小於60的都一定先被第一個if處理掉了,來到第二個的一定大於60..不是嗎?

所以,最後一個100分,也一定是被篩選剩下的結果就是100分了.也不用特別去處理

if( source < 60 )
{
     Console.WriteLine( "D" );
     retuen;
}
else if( source < 80 )
{
     Console.WriteLine( "C" );
     retuen;
}
else if( source < 90 )
{
     Console.WriteLine( "B" );
     retuen;
}
else if( source < 100 )
{
     Console.WriteLine( "A" );     
     retuen;
}

 Console.WriteLine( "A+" );
     

講個無關這個範例的真實案例

某天某朋友在與客戶談需求時,客戶提到欄位A在UI顯示上

如果從資料庫撈出12個字,要縮字成12個字然後加上...

不過因為字形會有寬度不同(中英文,數字)所以他們討論了很久很久要怎樣縮才好看的邏輯

討論了許久,終於有一個兩方都能接收的妥協方案

然後UI都討論完後,要來討論資庫的設計

某朋友就問客戶....欄位A的資料在資料庫允許最大的字數是多少呢?

 

客戶: 12個字