快速业务通道

Java.next:第一部分——共同点 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
0).map(x => x*x).filter(x => x%2 == 1) res20: Seq.Projection[Int] = RangeMF(1, 9, 25, 49, 81)

对哈希表(字典)有着同样便利的操作。

函数式编程

上面集合类的便利使用只是函数式编程的一个特殊情形。Java.next中函数作为一等公民,支持将函数作为参数,将函数作为返回值,以及支持闭包。举一个简单的例子:创建一个函数adder,使得能计算与一个运行时指定的值之和:

; clojure (defn adder [x] (fn [y] (+ x y))) // groovy adder = { add -> { val -> val + add } } # ruby def adder(add)   lambda { |x| x + add } end // scala def sum(a: Int)(b: Int) = a + b

Java.next:第一部分——共同点(3)

时间:2011-01-29 译: 梦幻泡影露电

运算符重载

在Java中,你不能重载运算符。因此你只能像这样操作BigDecimal:

// Java math balance.add(balance.multiply(interest));

Java.next允许你重载运算符。这样你能够创建新的类型并使得它像内建类型一样工作。譬如你能够新建一个ComplexNumber或RationalNumber,使其支持+,-,*,/运算符:

; Clojure (+ balance (* balance interest)) // Groovy balance + (balance * interest) # JRuby balance + (balance * interest) // Scala balance + (balance * interest)

可维护的异常处理

检查型异常(Checked Exception)是一个失败的试验。检查型异常的处理代码使得Java代码变得臃肿并掩盖了问题的关键。更糟糕的是,检查型异常使得代码的维护变得困难。

Java.next不要求你声明检查型异常,也不要求你显式的处理检查型异常。这表明Java平台的其他语言完全可以避免Java语言中丑陋的检查型异常。

给已有类增加新方法

在Java中,你不能给已有类添加方法。这使得面向对象模型变得很荒谬,开发者需要创建一些工具类,而这是与OO相违背的。

// Java (from the Jakarta Commons) public class StringUtils {   public static boolean isBlank(String str) {    int strLen;    if (str == null || (strLen = str.length()) == 0) {     return true;    }     for (int i = 0; i < strLen; i++) {    if ((Character.isWhitespace(str.charAt(i)) == false)) {     return false;    }   } }

在Java.next中,你能够给已有类增加方法:

; Clojure (defmulti blank? class) (defmethod blank? String [s] (every? #{\space} s)) (defmethod blank? nil [_] true) // Groovy String.metaClass.isBlank = {   length() == 0 || every { Character.isWhitespace(it.charAt(0)) } } # Ruby (from Rails) class String   def blank?    empty? || strip.empty?   end end // Scala implicit def strWrapper(s :String) = new {    def isBlank = s.forall{ _.isWhitespace } }

Java.next:第一部分——共同点(4)

时间:2011-01-29 译: 梦幻泡影露电

创建新的语言结构

Java包括Java语言以及API库,这两部分是截然不同的:你能够创建新的API库,但你不能够添加新的语言特性。

而在Java.next中,API库与语言特性没有明显的界线。你能够创建新的语言结构使得它像核心语言特性一样工作。例如,Clojure提供了一个and函数:

; clojure (and 1 2) => 2

你需要解决的不一定都是这样二元化的问题。你可能需要一个most函数,当它参数中大部分真时返回true。Clojure中没有这个,但你可以自己动手写一个:

; clojure (most 1 2) => true (most 1 2 nil) => true (most 1 nil nil) => false

这里的关键之处不是“我的语言是否需要一个most条件?”,而是不同的领域有不同的需求。在Java.next中,语言与库的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号