Tag: 编码式

为什么Swift语言指南build议使用Int“即使已知值是非负数”?

这是一个关于Swift编程风格的问题,特别是Int vs UInt 。 Swift编程语言指南build议程序员使用generics有符号整数typesInt即使variables已知是非负数。 从指南 : 只有当您特别需要一个与平台的本机字大小相同的无符号整数types时才使用UInt。 如果不是这种情况,则即使要存储的值已知为非负数,Int也是优选的。 Int一致地使用整数值有助于代码的互操作性,避免了在不同数字types之间转换的需要,并匹配整数types推断,如types安全和types推断中所述。 但是, UInt在32位体系结构上是32位无符号的,在64位体系结构上是64位无符号的,所以在UInt上使用Int没有性能优势。 相比之下,Swift指南给出了后面的例子: 让年龄= -3 断言(年龄> = 0,“一个人的年龄不能小于零”) //这会导致断言触发,因为年龄不是> = 0 在这里,如果代码被写为: 编译时会遇到运行时问题。 let age:UInt = -3 // this causes a compiler error because -3 is negative 还有很多其他的情况(例如任何索引集合的东西),在使用UInt会在编译时而不是运行时遇到问题。 所以问题是:Swift编程语言指南中的build议听起来是这样的,使用Int的好处是“即使要存储的值是非负的”也超过了使用UInt的安全优势? 附加说明:已经使用Swift几个星期了,现在明确要求与Cocoa UInt互操作性。 例如, AVFoundation框架在任何需要“计数”的位置使用无符号整数(样本数/帧/通道数等)。 将这些值转换为Int可能会导致严重的错误,其值大于Int.max

打破在一个情况下返回..和默认

我的OCD使我在编写case语句时添加“break”,即使它们不会被执行。 考虑下面的代码示例: switch(option) { case 1: a = 1; b = 7; break; case 2: a = 2; b = 4; return (-1); break; default: a = -1; break; } 我的两个问题是: 对于“情况2:”,我并不需要rest,但无论如何,它是一个好主意吗? 对于“默认:”。 这是纯粹的强迫症,还是有真正的理由在这里rest?

在Python中强制命名参数

在Python中,你可能有一个函数定义: def info(object, spacing=10, collapse=1) 可以通过以下任何方式调用: info(odbchelper) info(odbchelper, 12) info(odbchelper, collapse=0) info(spacing=15, object=odbchelper) 感谢Python允许任何顺序的参数,只要它们被命名。 我们遇到的问题是随着我们的一些更大的function的增长,人们可能会在spacing和collapse之间添加参数,这意味着错误的值可能会变成未命名的参数。 另外,有时候并不总是很清楚需要进入哪些内容。我们正在迫使人们指定某些参数 – 不仅仅是编码标准,而是理想的标志或者pydev插件。 所以在上面的4个例子中,只有最后一个会通过检查,因为所有的参数都被命名了。 几率是我们只会打开它的某些function,但任何build议如何实现这一点,或者如果甚至可能,将不胜感激。

有没有办法避免多年来的意大利面代码?

我有几个编程工作。 每个人有20-50个开发者,项目持续3 – 5年。 每一次都是一样的 一些程序员是光明的,有些是平均的。 每个人都有自己的CS学位,每个人都读devise模式。 意图是好的,人们正在努力编写好的代码,但在几年后,代码变成意大利面。 模块A中的变化突然中断了模块B.除了写它的人之外,总是有这些代码部分是人们无法理解的。 改变基础设施是不可能的,向后兼容性问题阻碍了良好function的进入。一半时间你只是想从头开始重写所有的东西。 比我更有经验的人把这视为正常。 是吗? 它必须是? 我可以做些什么来避免这种情况,或者我应该接受它作为生活的事实? 编辑:伙计们,我对这里的回应的数量和质量印象深刻。 这个网站和它的社区摇滚!

你能容忍多less重复的代码?

在最近的代码审查中,我发现了一个类(less于15行)的几行重复的逻辑。 当我build议作者重构代码时,他认为代码更易于理解。 再次阅读代码后,我必须同意提取重复的逻辑会伤害可读性一点。 我知道DRY是指导方针,而不是一个绝对的规则。 但总的来说,你是否愿意以DRY的名义伤害可读性?

如果你打破了长的代码行,你怎么缩进下一行的东西?

有时候,你必须用源代码写出更好的分界线。 你怎么缩进这个东西。 你可以缩进它一样的: very long statement; other statement; 这使得难以区分下面的代码,如示例所示。 另一方面,你可以将它缩进一层: very long statement; other statement; 这使得它更容易,但是它可能发生,长行是嵌套块的开始,你想缩进,如下所示: if ((long test 1) && (long test 2) && (long test 3)) { code executed if true; } 在这种情况下,它很难阅读。 我能想到的第三种可能性就是不要排长队,现代编辑们可以处理它,并创造出柔和的线条。 但是另外一名编辑则需要横向滚动,而且不能影响职位,编辑会打破你的长处。 你更喜欢什么样的可能性? 你有其他的想法来解决这个问题吗? 你可以支持你的偏好有一个很好的理由?

为什么一个expression式而不是一个常量,在C for-loop的条件?

在许多编程竞赛中,我看到人们为这种for回旋”编写了这种types for(i = 0; i < (1 << 7); i++) 除非我失去了一些东西,那就是一样的 for(i = 0; i < 128; i++) 为什么要使用(1 << 7)版本? 是不是每次都计算不必要的开销?

为HTML属性使用单引号是否正确?

最近我已经看到很多这样的: <a href='http://widget-site-example.com/example.html'> <img src='http://widget-site-example.com/ross.jpg' alt='Ross's Widget' /> </a> 在HTML中使用单引号是否有效? 正如我上面强调,这也是有问题的,因为你必须逃避撇号。

为什么使用for循环而不是while循环?

可能重复: 迭代for循环或while循环? 循环在C – for()或while() – 这是最好的? 什么时候应该使用for循环而不是while循环? 我认为下面的循环是相同的,除了它们的语法。 如果是这样,那为什么select一个呢? int i; for (i = 0; i < arr.length; i++) { // do work } int i = 0; while (i < arr.length) { // do work i++; }

使用try / catch来防止应用程序崩溃

我一直在研究一个经常使用try/catch的Android应用程序,以防止在没有需要的地方崩溃。 例如, 带有id = toolbar xml layout的视图被引用如下: // see new example below, this one is just confusing // it seems like I am asking about empty try/catch try { View view = findViewById(R.id.toolbar); } catch(Exception e) { } 这个方法在整个应用程序中使用。 堆栈跟踪没有打印,真的很难find出了什么问题。 应用程序突然closures,不打印任何堆栈跟踪。 我问我的前辈向我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意 。 对我来说,这不是防止应用程序崩溃的方法。 这表明开发人员不知道他/她在做什么,并且有疑问。 这是在业界用来防止企业应用崩溃的方法吗? 如果try/catch是真的,那么我们真的需要使用UI线程或其他线程来附加一个exception处理程序,并抓住所有东西? 如果可能的话,这将是一个更好的方法。 是的,空try/catch是不好的,即使我们打印堆栈跟踪或日志exception到服务器,在try/catch随机地包装代码块对所有的应用程序是没有意义的,例如,当每个函数被封闭try/catch 。 UPDATE 由于这个问题引起了很多的关注,有些人误解了这个问题(也许是因为我没有清楚expression出来),我将会重新解释这个问题。 这里是开发人员在这里做的 […]