1 2 3 4 5 6 | if @str= 'a' @result=@result+ 'aaa' else if @str= 'b' @result=@result+ 'bbb' else if @str= 'c' @result=@result+ 'ccc' |
但現在想想,忘了原因卻還繼續堅持加上 if...else 的 begin...end 以後要求別人照做時似乎也站不住腳,因此決定追本朔源並整理出來。
首先,上述那樣的寫法並不會有問題,我當時出現的問題是發生在巢狀 if...else 之中,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | declare @var int set @var=11 if @var <= 10 if @var <=3 print '<=3' else if @var <=6 print '<=6' else print '>6' else if @var <= 20 if @var <=13 print '<=13' else if @var <=16 print '<=16' else print '>16' print 'end' -- 執行結果: -- <=13 -- end |
但如果哪天我不再需要'>6'的分支,是否將它刪掉就可以了呢?
答案是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | declare @var int set @var=11 if @var <= 10 if @var <=3 print '<=3' else if @var <=6 print '<=6' --else -- print '>6' else if @var <= 20 if @var <=13 print '<=13' else if @var <=16 print '<=16' else print '>16' print 'end' -- 執行結果: -- end |
嗯~冷靜一下,再想想 if...else 的原理,其實這邊有個誤會。
"else if" 並不是一個正式的語法,後面的 if 只是 else 的一部分內容,我再把不需要'>6'分支的內容縮排整理一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | declare @var int set @var=11 if @var <= 10 if @var <=3 print '<=3' else if @var <=6 print '<=6' --else -- print '>6' else if @var <= 20 if @var <=13 print '<=13' else if @var <=16 print '<=16' else print '>16' print 'end' -- 執行結果: -- end |
所以,再回到原來的問題,不再需要'>6'的分支時,該怎麼寫呢?
請明確的標示出 begin...end
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | declare @var int set @var=11 if @var <= 10 begin if @var <=3 print '<=3' else if @var <=6 print '<=6' --else -- print '>6' end else if @var <= 20 begin if @var <=13 print '<=13' else if @var <=16 print '<=16' else print '>16' end print 'end' -- 執行結果: -- <=13 -- end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | declare @var int set @var=11 if @var <= 10 begin if @var <=3 begin print '<=3' end else if @var <=6 begin print '<=6' end --else --begin -- print '>6' --end end else if @var <= 20 begin if @var <=13 begin print '<=13' end else if @var <=16 begin print '<=16' end else begin print '>16' end end print 'end' -- 執行結果: -- <=13 -- end |
感謝捧場。
One More Thing ...
難道,C# 沒這個問題嗎?試試看...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int var=11; if (var <= 10) if (var <= 3) System.Diagnostics.Debug.Write( "<=3" ); else if (var <= 6) System.Diagnostics.Debug.Write( "<=6" ); else System.Diagnostics.Debug.Write( ">6" ); else if (var <= 20) if (var <= 13) System.Diagnostics.Debug.Write( "<=13" ); else if (var <= 16) System.Diagnostics.Debug.Write( "<=16" ); else System.Diagnostics.Debug.Write( ">16" ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if (var <= 10) if (var <= 3) System.Diagnostics.Debug.Write( "<=3" ); else if (var <= 6) System.Diagnostics.Debug.Write( "<=6" ); //else // System.Diagnostics.Debug.Write(">6"); else if (var <= 20) if (var <= 13) System.Diagnostics.Debug.Write( "<=13" ); else if (var <= 16) System.Diagnostics.Debug.Write( "<=16" ); else System.Diagnostics.Debug.Write( ">16" ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int var=11; if (var <= 10) if (var <= 3) System.Diagnostics.Debug.Write( "<=3" ); else if (var <= 6) System.Diagnostics.Debug.Write( "<=6" ); //else // System.Diagnostics.Debug.Write(">6"); else if (var <= 20) if (var <= 13) System.Diagnostics.Debug.Write( "<=13" ); else if (var <= 16) System.Diagnostics.Debug.Write( "<=16" ); else System.Diagnostics.Debug.Write( ">16" ); |
(想到之前有個同事說,他寫 C# 的 if 判斷式就算是只有單行的內容,還是堅持要加大括號。該不會是相同的原因吧?
沒有留言:
張貼留言