Questions tagged «switch-statement»

3
中断默认情况下的开关
我break常常不愿在最后一个案例之后加上或不包括在内default。 switch (type) { case 'product': // Do behavior break; default: // Do default behavior break; // Is it considered to be needed? } break我的唯一目的是阻止代码在其余的switch-case中运行。 那么,break由于一致性而导致的最后一个是否更合乎逻辑,或者由于不break进行任何功能性使用而跳过了它是否更合逻辑?我认为两者在逻辑上都是不同的。 这可以在某种程度上与以结尾的.php文件进行比较?>。我?>之所以从不结束,主要是因为有输出空白的风险,但有人可能会认为以文件结尾是合乎逻辑的事情。

17
为什么使用OO方法而不是巨大的“ switch”语句?
我在.Net,C#商店工作,并且我有一位同事一直坚持认为,我们应该在代码中使用带有大量“案例”而不是更多面向对象方法的巨型Switch语句。他的论断始终可以回溯到以下事实:Switch语句会编译为“ cpu跳转表”,因此是最快的选择(即使在其他情况下,我们的团队被告知我们不在乎速度)。 老实说,我对此没有争议……因为我不知道他在说什么。 是吗 他只是在说他的屁股吗? 只是想在这里学习。

12
避免使用“ goto”伏都教?
我有一个switch可以处理几种情况的结构。对进行switch操作会enum通过组合值引起重复代码的问题: // All possible combinations of One - Eight. public enum ExampleEnum { One, Two, TwoOne, Three, ThreeOne, ThreeTwo, ThreeOneTwo, Four, FourOne, FourTwo, FourThree, FourOneTwo, FourOneThree, FourTwoThree, FourOneTwoThree // ETC. } 当前,该switch结构分别处理每个值: // All possible combinations of One - Eight. switch (enumValue) { case One: DrawOne; break; case Two: DrawTwo; …


10
我应该使用switch语句还是if ... else链较长?
通常,当我听说switch语句时,将它推迟以替换长if ... else链。但是似乎当我使用switch语句时,我正在写更多的代码,而如果...否则我会写。您还遇到其他问题,例如将所有调用的所有变量都保持在同一范围内。 这是一些代表我通常编写的流程的代码(感谢diam) String comment; // The generated insult. int which = (int)(Math.random() * 3); // Result is 0, 1, or 2. if (which == 0) { comment = "You look so much better than usual."; } else if (which == 1) { comment = "Your work is up …

8
为什么Clang / LLVM在覆盖所有枚举情况的switch语句中警告我使用default?
考虑以下枚举和switch语句: typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; 我是一个Objective-C程序员,但是我已经用纯C语言编写了此文档,以供更广泛的读者使用。 带有-Weverything的Clang / LLVM 4.1在默认行警告我: 开关中的默认标签,涵盖所有枚举值 现在,我可以看到为什么会出现这种情况:在理想情况下,参数中唯一输入的值theMask将在枚举中,因此不需要默认值。但是,如果出现一些hack并将未初始化的int放入我的漂亮函数中怎么办?我的功能将作为库中的一部分提供,我无法控制其中的内容。使用default是处理此问题的一种非常简洁的方法。 为什么LLVM众神认为这种行为不符合他们的地狱装置?我应该在前面加上if语句来检查参数吗?

6
重构转换语句,转换语句是否真正有用?
我正在阅读本文,并想知道,是否通过用Dictionary或Factory替换它们来摆脱所有switch语句,以便我的项目中根本没有switch语句。 有些东西加起来还不够。 问题是,switch语句是否有任何实际用途,还是我们继续将其替换为字典或工厂方法(当然,在使用工厂方法时,将最少使用switch语句来创建对象)使用工厂...但仅此而已)。

5
函数调用中的多个参数与单个数组
我有一个函数,它接受一组参数,然后将它们作为条件应用于SQL查询。但是,尽管我赞成包含条件本身的单个参数数组: function searchQuery($params = array()) { foreach($params as $param => $value) { switch ($param) { case 'name': $query->where('name', $value); break; case 'phone': $query->join('phone'); $query->where('phone', $value); break; } } } 我的同事更喜欢显式列出所有参数: function searchQuery($name = '', $phone = '') { if ($name) { $query->where('name', $value); } if ($phone) { $query->join('phone'); $query->where('phone', $value); …

6
功能图与switch语句
我正在处理一个处理请求的项目,该请求有两个组件:命令和参数。每个命令的处理程序非常简单(<10行,经常<5)。至少有20条命令,可能会超过50条。 我提出了一些解决方案: 一个大的开关/ if-else命令 命令到功能的映射 命令到静态类/单的映射 每个命令都进行一点错误检查,唯一可以抽象的位是检查为每个命令定义的参数数量。 什么是解决此问题的最佳解决方案,为什么?我也愿意接受我可能错过的任何设计模式。 我为每个提出了以下优点/缺点列表: 开关 优点 将所有命令保持在一个功能中;由于它们很简单,因此使其成为可视化查找表 不需要使用大量只会在一个地方使用的小功能/类来弄乱源代码 缺点 很长 难以以编程方式添加命令(需要使用默认大小写进行链接) 映射命令->功能 优点 一口大小的小块 可以以编程方式添加/删除命令 缺点 如果在线完成,则外观与开关相同 如果没有在线完成,很多功能只能在一个地方使用 映射命令->静态类/单例 优点 可以使用多态来处理简单的错误检查(仅3行,但仍然) 与map类似的好处->功能解决方案 缺点 很多非常小的班级将使项目混乱 实施并非都在同一个地方,因此扫描实施并非易事 额外说明: 我正在用Go编写此代码,但是我认为解决方案不是特定于语言的。我正在寻找一个更通用的解决方案,因为我可能需要用其他语言做一些非常相似的事情。 命令是字符串,但是如果方便的话,我可以轻松地将其映射为数字。函数签名类似于: Reply Command(List<String> params) Go具有顶级功能,而我正在考虑的其他平台也具有顶级功能,因此第二个和第三个选项之间的区别。

8
在Java 7中打开字符串有什么好处?
当我开始用Java编程时,switch语句不带字符串的事实使我感到沮丧。然后,在使用Enums时,我意识到与它们相比,您所获得的好处而不是传递原始值-类型安全性(这使得重构更容易),同时也使其他开发人员更清楚。 我正在努力思考一种情况,在SE7中,我现在决定使用带有字符串而不是Enums作为输入的开关。如果通过打开整个字符串(例如,而不是部分匹配或正则表达式匹配)来实现它们,则似乎并没有提供更少的理由来更改代码。 借助IDE工具和编码的读写比率,我会比传递字符串值更快乐地自动生成一个额外的Enum。 他们作为程序员给我们带来什么好处?更少的样板? 似乎该功能并未让该语言大声疾呼。尽管可能有一个我忽略的用例。

2
语言为什么不对switch语句使用显式的穿透?
我在看为什么我们要用break在switch?,这使我想知道为什么某些语言(例如PHP和JavaScript)允许隐式掉线,而没有支持(AFAIK)的显式掉线。 这并不是continue完全需要的,而是需要创建一个新的关键字,并且可以解决任何有关作者是否打算通过案子的模棱两可的问题。 当前支持的形式是: switch (s) { case 1: ... break; case 2: ... //ambiguous, was break forgotten? case 3: ... break; default: ... break; } 而将其写为: switch (s) { case 1: ... break; case 2: ... continue; //unambiguous, the author was explicit case 3: ... break; default: ... break; } …


4
处理模型和视图时切换与多态
我想不出更好的解决方案。我有一个显示元素列表的视图控制器。这些元素是可以作为B,C,D等的实例并从A继承的模型。因此,在该视图控制器中,每个项目都应转到应用程序的不同屏幕,并在用户选择其中的一个时传递一些数据。 。我想到的两个选择是(请忽略语法,它不是特定的语言) 1)开关(我知道那很烂) //inside the view controller void onClickItem(int index) { A a = items.get(index); switch(a.type) { case b: B b = (B)a; go to screen X; x.v1 = b.v1; // fill X with b data x.v2 = b.v2; case c: go to screen Y; etc... } } 2)多态 //inside …

7
用OO语言实现对象状态?
我已经看过一些Java代码,它可以模拟赛车,其中包括基本状态机的实现。这不是经典的计算机科学状态机,而仅仅是一个可以具有多个状态并且可以基于一系列计算在其状态之间进行切换的对象。 为了描述问题,我有一个Car类,它带有一个嵌套的枚举类,该类为汽车的状态定义了一些常量(例如OFF,IDLE,DRIVE,REVERSE等)。在同一个Car类中,我有一个update函数,该函数基本上由一个大的switch语句组成,该语句打开汽车的当前状态,进行一些计算,然后更改汽车的状态。 据我所知,Cars状态仅在其自己的类中使用。 我的问题是,这是处理上述性质的状态机的最佳方法吗?听起来确实是最明显的解决方案,但过去我一直听说“ switch语句不好”。 我在这里看到的主要问题是,随着我们添加更多状态(如果认为必要),switch语句可能会变得非常大,并且代码可能变得笨拙且难以维护。 有什么更好的解决方案?

6
如何在switch语句中减少switch?
因此,我正在基于数据库中的两个人创建一种称呼行的方法。 有四个参数:两个名称(name1和name2)和两个性别(gender和gender2)。 对于每种性别组合,我都有不同的输出。 例如:如果性别1为M(man)且性别2也为M,则输出应为: Dear Sir name1 and Sir name2, 此时,我的开关如下所示: switch(gender1){ case 'M': switch(gender2){ case 'M': printf("Dear Sir %s and Sir %s", name1, name2); break; case 'W': printf("Dear Sir %s and Madame %s", name1, name2); break; case 'R': ... } break; case 'W': switch(gender2){ case 'M': printf("Dear Madame %s …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.