【Groovy文档翻译】有些事情你可以做,但最好不要做

Groovy是一个强大的工具。像其他强大的工具一样(想象一个链锯),它需要用户具备某些专业知识和注意,否则,后果可能很严重。

下面的代码片段在Groovy中是允许的,但是常常会导致无意的行为或者无法理解的问题。只要不这样做就可使你自己免遭一些新的和不熟练的Groovy程序员时常会经历的沮丧。

1. 像访问属性一样访问对象的类型

使用.class 而不是.getClass() 是可以的-只要你确切的知道你有什么样的对象。可是那样你根本就不需要它了。否则,你就有得到null 或者其他值的风险,而不是对象的类型。

a = [:]
println a.class.simpleName    // NullPointerException, because a.class is null.

2. 不恰当的省略方法参数前后的圆括号

除非你确定,否则最好为参数使用圆括号。
例如,一个方法名后的左括号必须永远把参数列表围起来。

println a*(b+c)     // is OK
println (a+b)*c     // NullPointer exception, because println (a+b) results in null.

3. 把一个新行放到代码中的错误位置

尽管它的原意是表示在下一行继续,但这会使得编译器假定这是一个完整的语句。而且它不会总是像下面的例子那样显而易见。

myVariable = "This is a very long statement continuing in the next line. Result is="
    + 42             // this line has no effect

4. 忘记写比较操作符的第二个等于符号

结果,一个比较表达式变成了一个赋值表达式。

while (a=b) { ... }                  // will be executed as long as b is true (Groovy-truth)
String s = "A"; boolean b = s = "B"  // b becomes true

(有一种措施是永远将常量表达式放到比较操作符的前面。)

5. 当覆写一个方法时指定错误的返回类型(只针对Groovy版本<1.5.1)

这样的方法可能会被认为是重载的(一个具有相同名字的方法)而不能按照预期被调用。

def toString() { ... }  // does not override toString() inherited from Object

6. 无视其他对象的隐私

每当访问类的方法,值域或者属性的时候,确保你没有牵涉到private或者protected的成员。目前Groovy完全不区分public,private和protected的成员,所以你自己当心了。

z = [1,2,3]
z.size = 10  // size is private; errors when trying to access z[3] to z[9], although z.size()==10

'more'.value = 'less'     // results in "more"=="less"

7. 轻率的动态编程

在用Groovy的动态能力添加或者改变类的方法或属性前,检查是否与预期的功能有冲突。

String.metaClass.class = Integer  // results in 'abc'.getClass()==java.lang.Integer

8. 字符串连接
尽管在Java中,你可以用”+“符号连接字符串。但是Java只需要”+“表达式的两项中有一个是字符串类型即可,无论是前面的还是后面的。Java会为你写的”+“表达式调用非字符串类型对象的toString() 方法。但是在Groovy中,只有在你的“+”表达式中的第一项正确实现了plus() 方法的情况下才可能是安全的,因为Groovy会搜索并使用它。在Groovy GDK中,只有Number和String/StringBuffer/Character类实现了plus() 方法来连接字符串。为避免意想不到的情况,永远使用GString。

// Java code, it works
boolean v = true;
System.out.println(" foo "+v);
System.out.println(v+" foo ");

 

// Groovy code
boolean v = true
println " foo "+v   // It works
println v+" foo "   // It fails with MissingMethodException: No signature of method: java.lang.Boolean.plus()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
探索全栈前端技术的魅力:HTML+CSS+JS+JQ+Bootstrap网站源码深度解析 在这个数字化时代,构建一个既美观又功能强大的网站成为了许多开发者和企业追逐的目标。本份资源精心汇集了一套完整网站源码,融合了HTML的骨架搭建、CSS的视觉美化、JavaScript的交互逻辑、jQuery的高效操作以及Bootstrap的响应式设计,全方位揭秘了现代网页开发的精髓。 HTML,作为网页的基础,它构建了信息的框架;CSS则赋予网页生动的外观,让设计创意跃然屏上;JavaScript的加入,使网站拥有了灵动的交互体验;jQuery,作为JavaScript的强力辅助,简化了DOM操作与事件处理,让编码更为高效;而Bootstrap的融入,则确保了网站在不同设备上的完美呈现,响应式设计让访问无界限。 通过这份源码,你将: 学习如何高效组织HTML结构,提升页面加载速度与SEO友好度; 掌握CSS高级技巧,如Flexbox与Grid布局,打造适应各种屏幕的视觉盛宴; 理解JavaScript核心概念,动手实现动画、表单验证等动态效果; 利用jQuery插件快速增强用户体验,实现滑动效果、Ajax请求等; 深入Bootstrap框架,掌握移动优先的开发策略,响应式设计信手拈来。 无论是前端开发新手渴望系统学习,还是资深开发者寻求灵感与实用技巧,这份资源都是不可多得的宝藏。立即深入了解,开启你的全栈前端探索之旅,让每一个网页都成为技术与艺术的完美融合!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值