窃以为switch语句的设计是败笔

阅读: 评论:0

窃以为switch语句的设计是败笔

窃以为switch语句的设计是败笔

前天做到一个题,是测试java switch语句的.结果很出我意料.

 

 

public class Test {public static void main(String[] args) {char c = 'c';switch (c) {default:case 'a':System.out.println('a');break;case 'b':System.out.println('b');break;}}
}

     输出'a',这代码带着点邪气.

     再看一段,如果有case 'c'呢?

 

switch (c) {default:case 'a':System.out.println('a');break;case 'b':System.out.println('b');break;case 'c':System.out.println('c');break;}
   

   输出'c'.

   所有switch有两个原则:1,default语句不管放在那里都是最后才执行. 2,case/default之间是"or"的执行关系,形象点描述的话就像是一只找桃子的贪心猴子从树的分枝上一根根往下跳,不被人打一棍就舍不得放弃下一个可能的桃子,即便它已经捡到了.

 

     个人感觉switch的这种case语法本身就不属于良好设计,违反了"least surprise ",这也是为什么所有教程都淳淳告诫:记得要加break啊!这语法太违反人类直觉了.

 

     统计一下所有用到switch的代码,大概会发现case后会带着break的占绝大多数,所以更好的设计是以break作为默认行为,用"continue"告诉case需要向下连续,而不是把continue作为默认行为.

 

     有时间的话倒是可以研究一下switch语法最早是哪门语言设计出的,一路怎么演化,一定很有意思.呵呵.

     在java中为了性能考虑,switch只能对有限的类型进行判断(int,char,byte,enum和包装类)也极大限制了它的使用,大概在一些算法类的程序中才有用武之地了.

 

@see .html

 

本文发布于:2024-01-31 14:15:59,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668176229121.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:败笔   语句   switch
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23