Java程序员在使用Ruby编程时会有一种解放的感觉,一种从Java那繁琐的语法环境进入一个无拘无束、自由国度的感觉。随着Clojure和Scala等新语言的出现,这种对比的感觉会越来越强烈。Ruby在很短的时间里异军突起,很大的原因在于它的简洁和自由,比如下面一句代码:

File.new("testfile").each {|line| puts line[-1] }

如果用Java来写,不知道要写多少行。Bruce Tate在《七周七种语言》这本书中谴责Java说:“我的手指在流血,因为我不得不打出这样多的代码;我的眼睛在流血,因为我还要去读它们。”呵呵,说的很形象。

其实,Java并不是诚心在为难程序员,它一直在改进。而Eclipse基金会推出的一种叫做Xtend语言正是为了要简化Java的语法,减轻Java程序员的负担。

又一种新语言?不要担心。Xtend更像是一种模板语言。它紧密的和Eclipse IDE捆绑在一起,要使用它,你需要安装Eclipse的Xtend插件,Xtend代码并不是直接编译成JVM字节码的,当你在IDE编辑、保存Xtend代码时,它会自动的编译成相对应的Java代码。

在上图的右边窗口里,你可以检查生成的Java代码是不是符合你的预期,并可以通过它调试你的程序。

那Xtend究竟能帮助Java程序员做什么呢?面面俱到的介绍一种新语言是一种很复杂的事,我也不想考验各位的耐心。这里只举例说明几个大家一眼就能看出这种语言存在的价值的例子。

1.类型推测

在Java里很多的表达式中,根据语句的右边的代码完全可以推导出左边的类型,比如下面的Java语句:

//Java

List names = getTheListOfNames()

而在Xtend语言里,你就不必再声明左边的类型,直接写成:

val names = getTheListOfNames()

在for循环里可以写成这样:

for (name : getTheListOfNames())

2.对象属性访问方式的简化

在Java里,对象属性的访问一般都是借用set和get方法实现的,在Xtend里,你可以直接这样写:

person.name

而不需要写成:

person.getName()

赋值方法也是:

person.name = "Foo"

等同于

person.setName("Foo")

还有一个特征很像Ruby里的用法,对于一个方法的调用,你可以写成这样:

obj.compute

而不需要写成:

obj.compute()

3.Switch语句

这条我不说,估计大家也都会明白。Java里的switch语句只能接受数字或char类型的判断参数,而在Xtend里,没有这种限制:

val Shape shape = ...

switch (shape) {

Rectangle case shape.width == shape.height :

"Square ("+shape.width+")"

Rectangle :

"Rectangle ("+shape.width+" x "+shape.height+")"

Circle :

"Circle ("+shape.diameter+")"

default :

"Don't know"

}

4.模板表达式

在Xtend里,定义一个字符串,你可以写成这样:

val msg = 'This is some multi line

text with "double quotes" in it'

请注意,这个字符串可以是多行的。

而在使用这个变量时, 你可以写成:

def print_line(String msg)'''

<>

'''

变量直接嵌入文本里!很像PHP或Ruby里的写法。

5.闭包

我最后介绍的当然也是最强大的一个功能了,闭包。据说Java会在xxxx(xxxx <=3000)年之前加入闭包功能,不过你不用等了。我们来看看Xtend里如何实现闭包:

val predicate = [ Person person | "Hans" == person.name ]

persons.filter(predicate)

这个闭包是用来实现过滤persons集合里person.name=”Hans”的功能的。怎么样,有点函数式编程语言的感觉吧。

Xtend里还有很多的语言特征,这里就不一一叙述了,有兴趣的朋友可以阅读官方网站提供的HTML在线文档,或下载PDF版的文档。

通过上面的介绍,你的Xtend的感觉如何?

java xtend_Eclipse Xtend对Java说:我帮你瘦身相关推荐

  1. 怎么给java代码瘦身_Eclipse Xtend对Java说:我帮你瘦身

    Java程序员在使用Ruby编程时会有一种解放的感觉,一种从Java那繁琐的语法环境进入一个无拘无束.自由国度的感觉.随着Clojure和Scala等新语言的出现,这种对比的感觉会越来越强烈.Ruby ...

  2. Java加上Xtend,满足你对C#语法的所有想象

    好吧,标题言过其实了,Xtend只是在某些方面提供了与C#类似的语法.又或者作为资深Java程序猿,你根本就对这个标题感到愤怒或不屑,"我大Java何时要与屌丝C#做比较了".但无 ...

  3. 什么?超过60%的开发者都开始从Java 8 升级到 Java 11了?

    随着Java版本命名规则的改革,我们时不时的见到Java又出新版本的消息,DD这边因为长期从事Java方向的开发,所以也一直关注并与大家分享这方面的咨询. 每次说到Java升级,几乎在留言中都会看到这 ...

  4. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...

    广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池   发布时间:2018-12-22 11:20 在 ...

  5. 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题

    在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中 ...

  6. java web ubuntu_Ubuntu部署Java web项目

    登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update                     更新软件列表 输入: ...

  7. java反射最佳实践,java反射性能测试分析

    java反射性能测试分析 java有别于其他编程语言而让我着迷的特性有很多,其中最喜欢的是接口设计,他让我们设计的东西具有美感.同样反射也是我比较喜欢的一个特性,他让程序自动运行,动态加载成为了可能, ...

  8. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  9. Java常用命令及Java Dump

    线程Dump,包含所有线程的运行状态.纯文本格式. 堆Dump,包含线程Dump,幵包含所有堆对象的状态.二进制格式. Java Dump方法 1.使用Java虚拟机制作Dump 指示虚拟机在发生内存 ...

最新文章

  1. Linux创建文件自动消失,Linux中没有文件创建时间的概念
  2. java数据分析平台源码_DataGear数据可视化分析平台 v2.0.0
  3. JSTL 标签库详细介绍资料 .
  4. 540 - Team Queue
  5. 定时压缩log日志文件
  6. eclipse安装WindowBuilder Pro组件
  7. dell4528s linux_如何在戴尔PC上使用Ubuntu Linux终端
  8. python怎么一次输入两个数_python如何一次性输入多个数
  9. 石英晶振封装HC-49S HC-49U HC-49SMD(12mhz 11.0592mhz等)的关系与区别
  10. 将微信数据提取为exel表格(2022年版)免root 保姆级教程
  11. ISO4443A与ISO14443B的区别
  12. 15幅非常有创意的影子摄影作品欣赏
  13. 毕设 电脑维修_入库出库结算论文
  14. 二叉树的遍历(前序遍历,中序遍历,后序遍历)
  15. 物联网组网技术比较 NB-IoT、LoRa、ZigBee、WiFi、蓝牙等
  16. Settings学习总结(一)
  17. 《机器学习》 线性模型
  18. 手动给无线网设置一个DNS服务器地址,手动修改手机局域网无线网络的DNS地址
  19. 高阶 numpy 数组快速插值(高阶快插)算法探讨
  20. 脑残定义,超级经典!

热门文章

  1. 方法教程:如何下载网易云音乐上的视频到本地电脑
  2. js 获取手机型号和版本
  3. python和scre_python学习日志10
  4. JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
  5. Keil 5(MDK 5)中的 Pack Installer下载不了库文件包的解决替代方法(在Keil官网下载Packs库文件)
  6. 【云端软件】竞价实例(Spot instance):可节省80%-90%的云计算成本
  7. mysql节假日函数_如何在MySQL中计算不包括周末和节假日的日期差
  8. 密码学笔记1-信息安全的基本属性(机密性、认证、完整性、不可否认性)
  9. Python 斐波那契数列 及 杨辉三角
  10. 如何在App中打开设置、appstore或其他App(区别iOS 10及之前系统)