switch語法的盲點

switch語法在項目使用的頻率很低,今天看到一個相關的例子引起一些思考,,同時本身也寫了一些簡單的例子以下:javascript

    實例1:html

int dayOfWeek = 5;
		switch (dayOfWeek){
			default:
				System.out.println("default");
			case 1:
				System.out.println("1111");
			case 2:
				System.out.println("2222");
			case 4:
				System.out.println("3333");
		}

  運行結果:java

default
1111
2222
3333

  實例2:python

int dayOfWeek = 5;
		switch (dayOfWeek){
			default:
				System.out.println("default");
			case 1:
				System.out.println("1111");
			case 2:
				System.out.println("2222");
			//diff
			case 5:
				System.out.println("3333");
		}

  運行結果:oracle

3333

  實例3:this

int dayOfWeek = 5;
		switch (dayOfWeek){
			case 1:
				System.out.println("1111");
			//diff
			case 5:
				System.out.println("5555");
			case 2:
				System.out.println("2222");
			default:
				System.out.println("default");

		}

  運行結果:spa

5555
2222
default

  爲了弄清楚這是怎麼回事,首先從JDK文檔入手。從文檔能夠了解一下幾點。code

https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.11htm

1.若是switch表達式中的值與case常量其中一個相等,能夠說與case的標籤是匹配的,在switch塊中,在當前匹配的case的後面的語句,無論是否匹配都將會執行。
2.若是沒有與case標籤相匹配的,可是存在default標籤,在switch塊中,default以及default後面的語句都將會順序執行。
3.既沒有case標籤匹配也沒有default標籤,switch中的語句將不會執行。blog

實例1對應狀況是2,實例3對應狀況3.

如何來避免這種狀況?使用break。

繼續看一下其餘語言的狀況。

1、JavaScript

var dayOfWeek = 5
                switch (dayOfWeek){
                    default:
                       console.log("default javascript")
                    case 1:
                       console.log("1111")
                    case 2:
                        console.log("2222")
                    case 4:
                        console.log("4444")
                } 

  運行結果:

default javascript
1111
2222
4444

  

var dayOfWeek = 2
                switch (dayOfWeek){
                    
                    case 1:
                       console.log("1111")
                    case 2:
                        console.log("2222")
                    case 4:
                        console.log("4444")
                    default:
                       console.log("default javascript")
                } 

  運行結果:

2222
4444
default javascript

  2、C

int day_week = 5;
    switch(day_week){
        default : printf("%s\n", "default c");
        case 1: printf("%s\n", "1111");
        case 2: printf("%s\n", "2222");
        case 3: printf("%s\n", "3333");

    }

  運行結果:

default c
1111
2222
3333

  

int day_week = 2;
    switch(day_week){
        case 1: printf("%s\n", "1111");
        case 2: printf("%s\n", "2222");
        case 3: printf("%s\n", "3333");
        default : printf("%s\n", "default c");
    }

  運行結果:

2222
3333
default c

  3、Python並無switch

Why isn’t there a switch or case statement in Python?

You can do this easily enough with a sequence of if... elif... elif... else. There have been some proposals for switch statement syntax, but there is no consensus (yet) on whether and how to do range tests. See PEP 275 for complete details and the current status.

連接https://docs.python.org/2/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python

 

總結

  這些語言對switch的詞法分析都是同樣的。switch這東西用的少,可是用的時候不要忘了break。

相關文章
相關標籤/搜索