我热衷于研究Scala,有一个基本问题我似乎找不到答案:总的来说,Scala和Java在性能和内存使用方面有区别吗?
发布于 2012-01-03 03:03:57
我是一个新用户,所以我不能在Rex Kerr上面的回答中添加评论(顺便说一句,允许新用户“回答”而不是“评论”是一个非常奇怪的规则)。
我签约只是为了回应上面Rex流行答案的影射:“嘿,Java太冗长了,工作太辛苦了”。当然,您可以编写更简洁的Scala代码,但所给出的Java示例显然是臃肿的。大多数Java开发人员会编写类似这样的代码:
List<String> bigEnough = new ArrayList<String>();
for(String s : array) {
if(s.length() > 2 && mapping.get(s) != null) {
bigEnough.add(mapping.get(s));
}
}
当然,如果我们要假装Eclipse不会为您完成大部分实际输入工作,并且每个保存的字符都会使您成为更好的程序员,那么您可以编写以下代码:
List b=new ArrayList();
for(String s:array)
if(s.length()>2 && mapping.get(s) != null) b.add(mapping.get(s));
现在,我不仅节省了输入完整变量名和大括号的时间(使我多花了5秒钟来思考深刻的算法思想),而且我还可以在混淆竞赛中输入我的代码,并有可能为假期赚到额外的钱。
发布于 2012-10-29 05:29:58
Java示例并不是典型应用程序的习惯用法。这种优化的代码可以在系统库方法中找到。但是,它将使用正确类型的数组,即File[],并且不会抛出IndexOutOfBoundsException。(计数和相加的不同过滤条件)。我的版本将是(always (!)使用大括号,因为我不喜欢花一个小时来搜索一个bug,这个bug是通过节省2秒来点击Eclipse中的一个键而引入的):
List<File> bigEnough = new ArrayList<File>();
for(String s : array) {
if(s.length() > 2) {
File file = mapping.get(s);
if (file != null) {
bigEnough.add(file);
}
}
}
但我可以从我当前的项目中带给您许多其他丑陋的Java代码示例。我试图通过分解出常见的结构和行为来避免常见的复制和修改编码风格。
在我的抽象DAO基类中,我有一个用于公共缓存机制的抽象内部类。对于每个具体的模型对象类型,都有一个抽象DAO基类的子类,其中内部类是子类,以便为从数据库加载业务对象时创建业务对象的方法提供实现。(我们不能使用ORM工具,因为我们通过专有API访问另一个系统。)
这种子类化和实例化代码在Java中一点也不清晰,在Scala中可读性很强。
https://stackoverflow.com/questions/5901452
复制相似问题