热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavatoKotlin(1)就决定是你了

2017年,Kotlin的发展可谓十分迅猛,稍微关注it界的人都知道谷歌宣布kotlin成为安卓的一级语言,不过那时候我并没有关注,因为我不是搞安卓的哈哈开个玩笑,其实之前也

2017年,Kotlin的发展可谓十分迅猛,稍微关注it界的人都知道谷歌宣布kotlin成为安卓的一级语言,不过那时候我并没有关注,因为我不是搞安卓的... 哈哈开个玩笑,其实之前也有听说过这个语言的名字,但当时对我来说就真的是一个名字而已。

直到前几周我无意间看了一篇为什么我要改用XXX语言这种系列的文章,接着花了几天的时间去了解了一下之后,我突然意识到,oh my god, kotlin, 这就是我一直想要的。

用相见恨晚这个词来形容我觉得还挺贴切的,为什么呢?我喜欢函数式编程,我认为用函数式的思维去解决问题可以让复杂的问题变得十分简单,这就好像以前读小学初中做数学题有直接一步一步解决的思路,也有列方程然后求函数方程的解法,后者在描述与解决问题上十分清晰与简单,列出了方程式之后只需要求方程的解就行了。

我平常使用的语言是java,在java7时代我使用guava来进行一些少量的函数式编程(因为大量的匿名内部类真的无比难看),好在java8引入了lambda让表述清晰了很多,不过java8中的还不够。于是随着兴趣,我学习了lisp,一门超级简洁的语言,可我发现,在实际工作中的作用微乎其微,更多的是思想上的提升。我开始寻找能够切合我自身实际情况的函数式语言,于是乎很自然的就想到了jvm平台上有没有这种语言呢,果然是有的,例如ClojureScala,这两个前者是lisp在jvm上的方言,后者听说是强化版java,身为一个java并想着实践的人,我更倾向于scala,又是一个偶然我看到了scala实现一些经典算法的例子,大部分的实现只需要1行或者2行,着实让我惊了个呆,于是马上开始学习...可是渐渐的我发现,scala是不是有一些太复杂了,例如类型系统与各种符号组合,我再次惊了个呆。惊叹完我在想:哎还是老老实实搞java吧,为什么总是想这些有的没的呢?

对于java,我个人最喜欢的有2点,一是生态环境非常良好,开源,拥有大量而又成熟的类库,框架,解决方案并持续更新。二是我喜欢静态语言,而java是强类型的静态语言,虽然这使得你要多写很多字符,不过这样编译器会让你少犯很多低级错误,同时对于维护来说,java把语法规范的很死,大大降低了维护的难度,因为大家写的代码都是长的差不多的(在同一种编程范式下),当然你也丧失了一定程度的***:) 与之成为鲜明对比的就是scalascala同一种解决问题方式的写法有NNN种,并且总有你看不懂并且不怎么想看的....

扯的有点远,不过总结上文,从我个人情况来说,在我心目中对我来说最合适的语言是这样的

  • 支持函数式编程,不要求像严格函数语言那样(例如lisp,haskell),但至少要more than java
  • JVM平台上的,能够享受JVM生态资源
  • 静态语言,这样可以减少很多不必要的错误
  • 语法有***度但不能太***(例如scala),语法***度应当是大于java小于scala
  • 拥有良好的生态环境与成熟解决方案,这样不用什么东西都自己造
  • 学习成本低,可以很容易的上手

我一直觉得这样的要求会不会是一种奢求,然而并不是... kotlin完美的符合我所希望的所有要求(这就是我为什么觉得相见恨晚的原因),对比上面几点,kotlin都是符合甚至超出的

  • 支持函数式编程,并且因为扩展函数的特性,可做的事比java多
  • 不仅仅是JVM平台上的语言,并且编译后的字节码就是java的字节码
  • 是静态语言
  • 语法比java简洁,但又没有像scala那么开放,例如只能重写有限的操作符,中缀函数必须声明(scala默认所有的都是)
  • 可以和java完美兼容,因此可以享受到java良好的生态环境
  • 和java代码可以互相调用与转换,本质上可以看成java的扩展版,上手十分快,熟悉java的语法一般1,2天就可以用Kotlin开发了

除此之外,kotlin还拥有

  • 强大的ide-idea的支持,不需要换ide就可以直接编写(idea目前就是Kotlin编写的)
  • java工程的转换十分容易
  • 非常棒的dsl系统
  • fun 有趣,我只能这么来形容了,就是有趣,有很多地方都值得研究,并且毫不枯燥。

我目前的工作是独立负责一块内核模块,因此我的***度还是挺高的,于是在我花了大约一周的时间(得益于idea的自动转换,大部分时间都在重构上,因为本身就是函数式的写法所以重构也很快),将代码转换成了Kotlin版本的,过程非常流畅,运行起来的效果也丝毫没有受到影响。

所以如果你和我一样有上面的这些苦恼的话,不妨试试Kotlin,真的很不错。


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
xiao15387977702
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有