Tag: 编码风格

.toArray(new MyClass )或.toArray(new MyClass )?

假设我有一个ArrayList ArrayList<MyClass> myList; 我想打电话给arrays,有没有一个性能的原因使用 MyClass[] arr = myList.toArray(new MyClass[myList.size()]); 过度 MyClass[] arr = myList.toArray(new MyClass[0]); ? 我更喜欢第二种风格,因为它不那么冗长,我认为编译器会确保空数组并不真正被创build,但是我一直在想这是不是真的。 当然,在99%的情况下,这种方式并没有什么不同,但是我希望在我的正常代码和优化的内部循环之间保持一致的风格。

如果你总是用C语言中的“int”作为数字,即使它们是非负数?

我总是使用unsigned int值永远不应该是负值。 但今天我注意到了我的代码中的这种情况: void CreateRequestHeader( unsigned bitsAvailable, unsigned mandatoryDataSize, unsigned optionalDataSize ) { If ( bitsAvailable – mandatoryDataSize >= optionalDataSize ) { // Optional data fits, so add it to the header. } // BUG! The above includes the optional part even if // mandatoryDataSize > bitsAvailable. } 我应该开始使用int而不是unsigned int来处理数字,即使它们不能为负数?

Java修饰语法和格式

我发现自己对访问和非访问修饰符的顺序感到困惑。 例如 abstract void go() abstract public void go() public final void go() void final go() final class Test{} class final Test{} final abstract class Test{} abstract final Test{} 我永远不知道正确的顺序是什么,有时我错了,因为有这么多可能的组合。 有一个明确的指导,哪一个应该先于另一个呢? 对代码中显示的格式和顺序是否有任何描述? 我试图拿出一个语法指南,但我不知道它是否是100%正确的。 这里是: Methods: [access modifier | nonaccess modifier] return-type method-name Classes: [access modifier | nonaccess modifier] class class-name Interfaces: [access modifier | nonaccess […]

柯里减法

如果我们想要映射一个将范围的每个元素增加1的函数,我们可以写出来 map (\x -> x + 1) [1..5] 但我想大多数人只会去 map (+1) [1..5] 代替。 但这显然不适用于(-1),因为这是负面的。 所以首先想到的是 map (+(-1)) [1..5] 考虑如何在Prelude( x – y = x + negate y )中定义减法是有意义的,但是对我来说看起来有点奇怪。 然后我想出了 map (flip (-) 1) [1..5] 这对我来说好像不错,但也许有点太复杂了。 现在我知道这没有什么大不了的,但是我想知道如果我错过了一个更明显的写法呢? 如果不是,你会select哪两种方式? 我真的只是问,因为经常是这样的小细节,使您的代码更习惯,因此需要阅读它的其他开发人员愉快。 解 现在我得到了一些答案,我认为我个人最喜欢的是 map (subtract 1) [1..5] 其次是 map pred [1..5] 主要是因为第一个是非常明确的,没有人需要猜测/查找pred含义(前任)。

任何理由清理Java中的未使用的导入,而不是减less混乱?

有没有什么好的理由来避免Java中的未使用的导入语句? 据我所知,他们在那里的编译器,所以很多未使用的导入不会对编译的代码有任何影响。 只是为了减less混乱,避免命名冲突? (我问,因为Eclipse给出了一个关于未使用的导入的警告,当我正在开发代码时,这是一种讨厌的事情,因为我不想删除导入,直到我确定我已经完成了devise类的devise。

具有最小圈复杂度的条件logging

在阅读完“ 你对圆形复杂性有什么限制? ”之后,我发现很多同事对我们项目的这个新的质量保证政策非常恼火:每个function不会超过十个循环复杂性。 含义:不超过10个“if”,“else”,“try”,“catch”等代码工作stream分支语句。 对。 正如我在“ 你testing私有方法吗? ',这样的政策有很多好的副作用。 但是:在我们(200人 – 7年)的项目开始时,我们愉快地进行了日志logging(不,我们不能轻易将它委托给日志的某种“ 面向方面编程 ”方法)。 myLogger.info("A String"); myLogger.fine("A more complicated String"); … 当我们系统的第一个版本上线时,我们遇到了很大的内存问题,而不是由于日志logging(这是closures的),但是由于总是计算的日志参数 (string),然后传递给'info()'或'fine()'函数,只能发现日志级别为“OFF”,并且没有发生日志logging! 所以QA回来了,并且敦促我们的程序员做条件logging。 总是。 if(myLogger.isLoggable(Level.INFO) { myLogger.info("A String"); if(myLogger.isLoggable(Level.FINE) { myLogger.fine("A more complicated String"); … 但是现在,由于每个函数的限制不能被移动10圈复杂度,他们认为他们放入函数的各种日志被认为是一个负担,因为每个“if(isloggable())”是算作+1圈复杂度! 因此,如果一个函数有8个“if”,“else”等等,在一个紧密耦合的不容易共享的algorithm中,以及3个关键的日志动作……即使条件日志可能不是真的该function的复杂性的一部分… 你将如何处理这种情况? 在我的项目中,我已经看到了一些有趣的编码演变(由于这个“冲突”),但是我只想把你的想法放在第一位。 谢谢你所有的答案。 我必须坚持认为,问题不是“格式化”相关的,而是“论证评估”相关的(评估在做一个什么都不会做的方法之前可能是非常昂贵的) 所以当写上面的“一个string”时,我实际上是指一个函数(),用一个函数()返回一个string,并调用一个复杂的方法来收集和计算logging器显示的所有types的日志数据。或不(因此问题和使用条件日志的义务 ,因此人为地增加“圈复杂性”的实际问题…) 我现在得到你们中的一些人提出的“ 可变函数”的一点(谢谢约翰)。 注意:在java6中的一个快速testing表明,我的varargs函数在被调用之前确实评估了它的参数,所以它不能被应用于函数调用,而是被应用于“日志search器对象”(或者“函数包装器”),其中toString )只会在需要的时候被调用。 得到它了。 现在我已经发表了关于这个话题的经验。 我会把它留在下个星期二投票,然后我会select你的答案之一。 再次,谢谢你的所有build议:)

轨道上的ruby/ruby内存泄漏检测

我在rails上使用ruby编写了一个小型web应用程序,其主要目的是上传,存储和显示来自xml(文件可以高达几MB)文件的结果。 运行了大约2个月后,我注意到这个杂种进程使用了​​大约4GB的内存。 我做了一些关于debuggingruby内存泄漏的研究,但是找不到太多内容。 所以我有两个问题。 有什么好的工具可以用来在Ruby / rails中查找内存泄漏? 什么types的编码模式导致ruby中的内存泄漏?

方便地在enum和int / String之间映射

当处理只能采用有限数量值的variables/参数时,我试着总是使用Java的enum ,如 public enum BonusType { MONTHLY, YEARLY, ONE_OFF } 只要我留在我的代码,这工作正常。 但是,我经常需要与其他代码使用纯int (或String )值为同一目的,或者我需要读/写/到数据库的数据存储为数字或string。 在这种情况下,我想有一个方便的方法将每个枚举值与一个整数,这样我可以转换两种方式(换句话说,我需要一个“可逆的枚举”)。 从枚举到int很容易: public enum BonusType { public final int id; BonusType(int id) { this.id = id; } MONTHLY(1), YEARLY(2), ONE_OFF(3); } 然后我可以访问int值为BonusType x = MONTHLY; int id = x.id; BonusType x = MONTHLY; int id = x.id; 。 但是,我不能看到相反的方法,即从int到enum。 理想情况下,像 BonusType […]

为什么Android教程中的大多数字段(类成员)都以`m`开头?

我知道骆驼案例规则,但是我对这条规则感到困惑。 它代表什么? 我是一名PHP开发人员。 “我们”使用variables的第一个字母作为types的指示,比如“b”表示布尔型,“i”表示整数等等。 是“Java”的东西吗? 它代表移动? 混合使用吗?

如何检查平等? (0 == i)或(i == 0)

好的,我们知道以下两行是相同的 – (0 == i) (i == 0) 另外,过去也鼓励第一种方法,因为如果不小心使用了'='而不是'==',编译器会给出错误信息。 我的问题是 – 在今天这一代非常漂亮的IDE和智能编译器中,你还推荐第一种方法吗? 特别是,当我看到下面的代码时,这个问题突然出现在我的脑海里: if(DialogResult.OK == MessageBox.Show("Message")) … 在我看来,我绝不会推荐以上。 任何第二个意见?