【本人秃顶程序员】从Java到Kotlin,然后又回到Java!

←←←←←←←←←←←← 快,点关注!

最近Java与kotlin语言之争又有点小热,大概是因为某位当初吹捧Java的大神来华兜售其kotlin新书有关,但是与此同时相反观点也是不断涌现,Allegro团队就在他们的博客发表这篇文章,从Java到Kotlin,然后又回到Java的"折腾"过程。

我们过去尝试Kotlin,但现在我们正在用Java 10重写。

我有我最喜欢的一组JVM语言:Java是主打,Groovy用于测试,这是表现最好的二人组合。2017年夏季,我的团队开始了一个新的微服务项目,和往常一样,我们谈论了语言和技术。在Allegro有几个已经采用了Kotlin的团队,我们想尝试新兴事物,所以我们决定这次试一下Kotlin。由于Kotlin没有对应的Spock框架,我们决定还是使用Groovy /test (Spek不如Spock)。在2018年采取Kotlin几个月后,我们总结了正反优缺点,并得出Kotlin反而使我们的生产力下降的结论。我们开始用Java将这个微服务重写。

这是为什么呢?

从以下几个方面谈原因:

Name shadowing名称遮蔽

这是Kotlin让产生最大惊喜的地方。看看这个函数:

fun inc(num : Int) {
    val num = 2
    if (num > 0) {
        val num = 3
    }
    println ("num: " + num)
}
<p>

当你调用inc(1)会输出什么呢?在Kotlin中,方法参数是不变的值,所以你不能改变num这个方法参数。这是很好的语言设计,因为你不应该改变方法输入参数。但是你可以用相同的名称定义另一个变量名并将其初始化为任何你想要的。现在在这个方法作用域中您有两个num命名的变量。当然,你一次只能访问其中一个num,但是num值是会被改变的。怎么办?

在if正文中,又再添加另一个num,这不太令人震惊(作用域是在块内)。

好的,在Kotlin中,inc(1)输出打印数字 “2”。

Java中的等效代码如下,但是无法通过编译:

void inc(int num) {
    int num = 2; //error: variable 'num' is already defined in the scope
    if (num > 0) {
        int num = 3; //error: variable 'num' is already defined in the scope
    }
    System.out.println ("num: " + num);
}
<p>

名字遮蔽不是Kotlin发明的。这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值