主要因为这位童鞋的帖子,http://www.iteye.com/topic/1118016
所以想写下个人对Java/Groovy和Js的一些语言层面的比较和理解,如果作为一个Javaer而对Js有偏见的,若是从事Web开发,不妨多多深入去了解下Js。
***** *****
本文以一个例子开头:
createFn : function(tag){
return (function(tagIn){
return function(text, attr){
var attrStr = '';
if(attr){
for(key in attr)
attrStr += key + '="' + attr[key] + '" ';
}
return '<{0} {1}>{2}</{0}>'.format(tagIn, attrStr, text);
}
})(tag);
},
这段代码是一个我常用的为了生成html dom的基础方法
后面可以这么定义:
var tdFn = createFn('td');
用来生成<td></td>之类——完全就是Javaer眼中的template的模式,貌似在Fn programming里有个专有名词:可里化。
这个例子很简单,有些Jser可能很熟悉JQuery式的实现$("td").attr({}).click(function(){}).append("");
这都没关系,我只是通过这个例子想表达,面对类似的问题,不同语言可能有不同的解决方法,一些Javaer不要总抱有“在Java中是这么写代码的”的思想去看其他的语言开发方式。
关于Js的入门和进阶学习个人推荐先看看“博客园李战的‘唔透Javascript'”和“Iteye上Js core系列”。
***** *****
***** *****
第二个话题就是语言层面的基础api对比——这一点估计Javaer会更满意点,毕竟Java sdk的基础api(基本类型和数据结构的处理和操作)已经很强大了,更不用说n多第三方的库,尤其是commons-lang/collection***。而Js呢,看下参考手册的size就能看出来,没多少,但是用过js的都会有感触——js太灵活了,尤其是其对象机制。
同样Js的开源库中也有类似Java的sdks,比如dojo/extjs,还有一些可能开发者用的不多的,如JsClass,Google Closure Tools——Javaer不要只以为Js更关注Html控件,漂亮的UI等,除了这些,基础api一样很丰富,原生态的Js足够灵活,通过设计和扩展,它可以变得很强大。
另外不得不说的是Js同时具备OO和Fn Programming的特点,闭包这点特性还是很有用途的。
***** *****
***** *****
然后再和题目挂钩,谈谈Groovy/Js的对比,就不拿Java来比较了——Groovy sdk的api比Java强大些。
关于类系统方面就不多说了,这方面坛子里写的文章很多
先说闭包:
Groovy语言中的闭包以Closure类实现,编译一个Groovy文件,会发现中间出现的闭包都是**$Closure.class单独的类的,定义闭包也很简单
def closure1 = {param1, param2 ->
}
和Js定义函数一样
var fun1 = function(param1, param2){
};
调用时候Groovy为了方便,可以不用(),如Sql的用法db.eachRow({row ->
println row['name']
})
简写了
db.eachRow{row ->
println row['name']
}
所以Groovy语言里基础函数涉及到闭包的一般把闭包作为最后一个参数
这个和Js也一样
如:(JQuery)
$([1,2,3,4,5]).each(function(){
console.log(this);
});
其中对List(Array)的操作方法Js的一些库远远没有象Groovy一样考虑那么多:any/every/grep***,但这些方法在Js中都很容易实现:如JQuery
var llEven = $([1,2,3,4,5]).filter(function(i){
return i % 2 == 0;
}).get();
如果直接在prototype上实现也可以——至少不用Groovy要考虑下你要实现的方法是不是final的
再说正则:
正则部分其实Java语言做得不好,不支持/^***/这样直接定义正则对象,Js好些,String可以直接match(//)
Groovy个人感觉有一点用着不方面就是//m or g之类的情况,多行或不区分大小写,Groovy里是这么定义的
/{?i}/标示的,不知道是不是为了不同而不同了。
PS,关于Groovy语言层面的推荐先看看这个blog,然后再看Groovy in action/Mining Groovy等书
http://blog.csdn.net/hivon/article/details/4256296
还有就是Groovy在switch语句上更延伸一步,switch的对象貌似什么类型都支持,可以case正则,List,Closure回调
要是Js,就不得不写成if了。。。
再说函数参数:
Java/Groovy中有可以变参数,但都是同一类型,编译后也是数组形式实现的,Js较灵活,arguments是一个专门的对象,定义方法时候甚至不用显示写具体参数,可能是设计时候一个偏向灵活,一个偏向OO多态想法吧,我就碰到一个Php的DB操作的一个类库,其中公用了一些参数很多的方法,而方法实现中会有大量的if分支,如果在Java中设计,应该会对应很多独立的方法。
再说基本数据类型之间的转换:
Js相关的null/undefine 1 == true 0 == false '0' == true之类的都不列举了
Java就相当死板,必须if(obj != null) ****
Groovy好点,和Js类似,也有===的运算符,和Js区别的是:
1. 只有null,没有undefine***等复杂
2. if([] && [:])是false的,Js里空对象和空数组是true
3. typeof ****的结果
因为Js的对象永远是{},不管里面怎么定义,所以不会想Java一样会可以的去对应一个“Bean",如
class Person{
def String name ***
}
在JavaBean方面,Groovy的基础类型和JavaBean的转换比较容易,一般as即可——在Groovy的程序里中,我个人是偏向基本数据结构而非Beans。(这方面http://blog.csdn.net/hivon/article/details/4256296里讲得较详细)
关于这方面还有很多细节的,尤其是Js的浏览器兼容性问题
其他的尤其是非Js涉及的功能,如socket/thread,如果拿来比较就太欺负Js了,关于node.js等服务端js的确了解太少,我个人的看法是,既然都是c的库,用python/ruby去调用应该比js更擅长。Web客户端就别折腾了,只愿各浏览器厂商多多标准化,别把js弄得太臃肿。
欢迎大家来讨论和拍砖
分享到:
相关推荐
用于soapui中,groovy语言开发的插件之一用于soapui中,groovy语言开发的插件之一
Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法简洁,减少了代码...
java、groovy、C#、Javascript的运行效率到底如何? 通过实验比较,Javascript的运行效率解决java,看来基于javascript的html5前途远大。 C#的Release版的运行性能也相当高,和C++相差不大,值得推荐。 文件内部...
Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有...
Groovy脚本语言是一种强大的、动态的编程语言,它与Java平台紧密集成,可以在Java虚拟机(JVM)上运行。Groovy结合了面向对象编程(OOP)、函数式编程和脚本语言的特性,提供了简洁、易于阅读的语法,使得开发人员...
标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...
与Java代码比较起来,Groovy语言的另一个主要优势是,Groovy代码编写量相对小些。在一般情况下,Java代码过于复杂,难于理解和维护。这是因为Java需要大量的模板文件或者转换代码,而Groovy却不需要。 本书是...
标题和描述提到的是从已熟悉的Java和JavaScript出发,学习Haskell和Groovy这两门不同的编程语言,特别是关注它们的动态语言特性和函数式编程特性。标签为"安全",虽然这个主题没有直接涉及安全技术,但我们可以推测...
Groovy代码可以被Java编译器理解,并且在运行时,GroovyShell或GroovyClassLoader等工具能够即时编译和执行Groovy脚本,这为动态加载和执行提供了便利。 当我们需要在Java程序中调用Groovy脚本时,可以使用以下步骤...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个扩展,可以无缝集成到Java项目中。Groovy的语法简洁,支持面向对象编程、函数式编程,并提供了许多现代语言特性,如闭包和动态类型。这使得Groovy成为快速...
Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...
Groovy结合了Java的静态类型系统和Python、Ruby等动态语言的灵活性,使得开发者可以更加高效地编写代码。本篇文章将深入探讨Groovy语言的关键特性和应用场景。 一、Groovy简介 Groovy是2003年由James Strachan创建...
Groovy是一种灵活的面向对象的编程语言,它运行在Java平台上。由于其语法简洁且与Java高度兼容,因此对于Java开发者来说非常容易上手。Groovy不仅支持传统的面向对象编程特性,还融合了函数式编程和元编程的特性,这...
Groovy是一种动态、开源的编程语言,它是Java平台上的一个JVM(Java Virtual Machine)语言。Groovy结合了Python、Ruby和Perl等脚本语言的简洁性和灵活性,并且完全兼容Java,可以无缝地与Java代码集成。在"groovy-...
, 与Java代码比较起来,Groovy语言的另一个主要优势是,Groovy代码编写量相对小些。在一般情况下,Java代码过于复杂,难于理解和维护。这是因为Java需要大量的模板文件或者转换代码,而Groovy却不需要。, 本书是有关...
标题和描述均提到了对五种编程语言——Scala、Erlang、Groovy、Python以及它们各自的原理、比较和分析。这些语言各自拥有独特的特性和应用场景,在编程领域扮演着不同的角色。下面,我们将深入探讨每种语言的关键...
Groovy SDK 4.0.3 是一个针对Groovy编程语言的软件开发工具包,它包含了Groovy语言的运行环境和开发所需的各种组件。Groovy是一种动态、灵活的面向对象编程语言,它与Java语法兼容,但提供了更简洁的语法和更强的...
Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有...