如何看待 kotlin 成为 android 官方支持开发语言? -欧洲杯足彩官网

引用
作者:技术小黑屋
来源:

google io 2017宣布了 kotlin 会成为 android 官方开发语言。一时间朋友圈和android圈被各种刷屏。当然我也顺势而为发布了一篇的文章,着实狠狠地蹭了一波热度(尽管这样会被鄙视)。眼下android圈已经躁动了,甚至严重到如果对kotlin视而不见就显得自己不像一个合格的android程序员。

本文尝试从一个客观全面一点儿的角度来看待这件事情,尽力为大家提供一个比较理性的观点供参考。

为什么会选用kotlin

关于 google 为什么会选择 kotlin,我认为有两方面的原因。

  • 为了逐渐摆脱专利流氓oracle。从去年的转向openjdk,到现在的支持kotlin作为官方语言,某种意义是为了摆脱藉由9行代码敲诈获取天价赔偿的oracle。
  • 选用kotlin,实至名归,这个荣誉它值得拥有。kotlin确实以其实用,高效赢得了海外很多公司和开发者的认可,比如square的jake大神一直在推kotlin。kotlin在国外至少有将近2年的应用生产环境的实践(非jetbrains内部实践应用)。在移动开发中,相比ios程序员,android程序员总是很幸运,因为我们有很多优秀好用的工具(android studio等),选用kotlin,则是google 为开发者提供高效的开发工具的一贯作风。
成为 android官方开发语言意味着什么

  • 官方:工具支持(android studio 3.0附带kotlin),官方的宣传(教学视频,主题演讲等)
  • 对于社区来说,kotlin版本的库和框架如雨后春笋般涌现
  • 对于java,曾经借助android这场春风,着实让迟暮的它再度辉煌,现在和将来在android领域可谓是棋逢敌手,java的在android开发语言市场份额会降。但是这也并不一定是坏事,有竞争才能更好进步。
  • 对于android 开发者,我们多了一种开发android的语言选择,那些对于之前由于前景不明朗却对kotlin跃跃欲试的人可以放心使用了。有了kotlin意味着开发效率应该会有所提升。
  • 对于团队,这往往带来了一个选择的问题,use kotlin or not, that’s a question. 团队中总有人想要尝试kotlin,而另一些人则兴致不那么高。由于历史包袱,团队成员兴趣,对于已有项目采用kotlin和java长期并存是实际可行的方案。而新项目则应该鼓励使用kotlin,但具体还需要结合团队的能力和其他因素。
kotlin的魅力究竟在哪里

kotlin的有很多特点,比如简洁,安全实用,开发效率高和提升可读性,更好的函数式编程支持。

1.简洁,kotlin的代码确实比java更加简洁,比如类型推断,省去结尾的分号等等,然而这远不能成为我们改用kotlin的原因。

2.安全,这是kotlin的一个很重要的特性。kotlin是空指针安全的,jetbrains做了一件很聪明的事情,它们将运行时才能空指针的检测提前到了编译时,主要方式是增加了any?这种可为空的类型,使用kotlin之后,我们程序的空指针会得到明显的改善。

3.实用,高效率。kotlin的实用具体表现在
  • 引入object,便于我们更好的应用单例模式
  • 引入data class, 避免了我们手写getter/setter/tostring等方法
  • 引入参数默认值和具名参数,避免了不必要的方法重载
  • 支持扩展方法,让我们可以省去好多必须要的代码
4.kotlin引入了lambda,streams api 和函数式编程支持。
  • lambda表达式可以省去了我们创建很多匿名内部类的代码(注由于目前kotlin基于jvm6,lambda表达式在字节码阶段依然会翻译成内部类形式)
  • streams api 结合lambda表达式和方法引用,让我们的代码处理一件事情以描述的形式,而不是命令实现的方式。
  • kotlin支持oop(面向对象编程)和fp(函数式编程),语言本身并没有限制,给了我们选择的自由,kotlin对fp的友好支持,便于我们写出更加稳定,易于测试,无副作用的方法和代码
5.可读性 从客观上,kotlin语法和特性上让代码更加具有描述性而已。但是不得不指出代码可读性主要依赖编写者的编码素质和能力。

对我个人而言,高阶函数和方法扩展这两个特点着实真心受用。方法扩展会让我有一种创造感,这是java种的util方法所无法比拟的。

kotlin是否会取代java

这个很难说,因为这个世界上并不是一件事物好,就会必然得到广泛应用的。一件事物的推广开来靠的是一群人,但阻力也往往也来自一群人,只不过和前者不是相同人群。

从个人主观来看这个问题,我更加愿意看到这种现象发生。原因并不是因为我更喜欢kotlin,而是在于我更愿意看到事物在进步,在变得优秀,所以即便某一天kotlin被更加优秀的语言取代,我也是很欢迎的。

哪些人适合率先应用 kotlin

kotlin适用于多个平台,并没有对学习者做限制。任何有学习意愿的人都可以习得这门语言。

但是考虑到国内 kotlin 资源不够丰富,网络不够畅通等问题,所以导致了很多人变成了吃瓜群众进行观望。

然而,对于一个项目和团队来说,总需要有第一个人先来推进。而且这个推进过程并非顺利,这其中包括
  • 首先你需要足够了解kotlin
  • 你需要说服团队,这期间你会接收到很多challenges,有时候你会很沮丧和生气
  • 你需要提供一系列的资料或分享,比如如何配置,sample code, troubleshooting等等
  • 有时候甚至你经常兼职做mentor指导工作,这也就意味着你的手头上的其他工作需要被打断
上述推进 kotlin 观点部分参考自life is great and everything will be ok, kotlin is here (google i/o ‘17) 中 christina lee(pinterest software engineer,国外 kotlin 美女布道师之一)的分享内容。

虽然 kotlin 很优秀,但是推动在项目中推动 kotlin 应用并非易事,因为这对于新事物来说在正常不过了,就像明治维新一样看起来很光鲜,成功,但是它的变革进程并非顺利,先是血雨腥风的倒幕运动,再到明治六年爆发的标志武士时代结束的西南战争,经过数十年的努力才算取得成功。

因此关于哪些人适合率先应用 kotlin,我认为需要具备以下几点
  • java 技术和基础要好,这一点很重要
  • 英语要好,因为目前 kotlin 的资料几乎都是英文的,当然也推荐看英文的
  • 愿意承担在项目团队推进工作,有耐心,敢挑战,负责任
关于kotlin 项目应用中 的一些顾虑

目前想到了一些关于 kotlin 应用在项目中的一些顾虑。这些顾虑目前并非全面,但是提出来,希望大家可以规避和改善。

1.写出来的代码并不是 kotlin style。解决这个问题,还是需要多学习和思考

2.扩展方法的滥用,kotlin 的扩展方法很好,我们可以扩展很多方法,弥补framework的一些不完善,但是扩展时我们需要谨慎,一定要把合适的方法放到合适的类型上,不可为了简单增加不符合某些类不应该具备的职责。 具体需要最好以下两点
  • 选择在合理范围内的最抽象类增加方法,比如我们想为activity增加一个longtoast,应该想一想是不是放在更加抽象的context会更好一些
  • 同时也不能为了便利,增加和当前类不相关的方法,比如我们想为每个context增加显示一个简单dialog的扩展方法,这显然不是很合理,因为对于非ui的context这是有问题。
android 程序员的核心竞争力在哪里

kotlin出来之后,听到了两种不同的声音:
  • 太好了,终于可以有理由改用kotlin了,写代码更加高效了。可以逐渐开始放弃java了。
  • wtf,又要学新的语言,感觉好累,会不会以后面试不会kotlin就被pass掉呢。

出现以上两种不同的声音,不得不引起我们对于 android 程序员的核心竞争力的思考。那么到底什么才是 android 程序员的核心竞争力呢?

android程序员和其他程序员甚至其他职业并无二致,我认为这种竞争力表现在解决问题的能力。想要具备这种能力,极其依赖我们对问题和技术的准确认识和扎实的基础。

编程语言本质上还是工具,好的工具能带来更好的效果,但是如何运用好,将效率和质量提升到最高,则还是更主要的依赖于开发者的能力。

选用好的工具,更侧重夯实基础和加强对事物本质认识的能力,我想这样才能让我们的竞争力更强。

总结而言,kotlin是一个更好的工具,没有它,并不影响我们日常的 android 开发工作。但是我还是建议开发者和团队去尝试这种语言,抓住这个近在咫尺的小确幸。

额外的话

事情的发展越来越显得不可控了,推介kotlin和不看好kotlin的人逐渐分化出来,更准确的说,甚至这件事已经快要演变成了从对事变成了对人。

kotlin 成为 android 官方语言的消息一出来,一下子出来了很多被当做投机蹭热点的kotlin推介者,当然还出现了一些看不惯这些做法的人,他们认为前者刻意拔高了kotlin。因而讨论越来越偏向从事情到人的方面。我想要说的是,就像商人追求利润,资本家攫取剩余价值那样,投机者蹭热点,以及招致他人批评,这都是正常的事情,但是我们不能让讨论脱离问题的本质,我们需要回归。
很多人说kotlin无非就是很多语法糖,没什么突破

没错,kotlin是有很多很多的语法糖。有必要简单普及一下语法糖的概念(如下摘自)
引用
in computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. it makes the language “sweeter” for human use: things can be expressed more clearly, more concisely, or in an alternative style that some may prefer.

由定义可知,语法糖的目的就是让代码更简单,更可读。

决定kotlin使用这么多语法糖的除了简洁,高效可读之外,还有一个原因,是因为kotlin编译生成的class文件是目标到jvm 6(基于jvm 6 是一种权衡后的结果),比如我们在kotlin中使用了lambda,它是不可能编译成invokedynamic指令的,因为那样会导致在jvm6上根本无法识别,所以经常通过翻译成内部类的形式来实现。

使用语法糖又能怎样,它的目的是好的,毕竟它真真实实介绍了开发人员的代码量。

kotlin是一门实用语言,这是它的基因,它不是学术语言,它的目标是减轻开发者的负担。它很适合 android,因为大多数的 android 的程序员是做工程。

基于jvm没有什么不好

kotlin,是基于jvm的编程语言,但是基于jvm的编程语言并没有什么不好。(j)vm的出现无非也是一种平衡的结果。在牺牲部分执行效率的前提下,提供了一定的抽象,加快了开发者的效率。这种tradeoff其实更加有利于人的一侧,这也是编程语言发展的趋势和目标

kotlin 在国内推广应用的道路可谓是 漫漫而修远兮。因此更需要真正实践,去踩坑的人开始on board,去出产更多的真正能推动 kotlin 应用的文章,分享等这些有实质性意义的行动。
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • kotlin是一门基于jvm的编程语言,它正成长为android开发中用于替代java语言的继承者。java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,java并没有像预期那样及时跟进。  ...

  • 写在前面谷歌在 i/o 2017 开发者大会上宣布了 kotlin 成为 android 开发一级语言。那么,kotlin 会取代 java 么,你怎么看?【相关阅读】 为什么我要改用 kotlin 使用 kotlin 优雅的开发 android 应用 kotlin初探 ...

  • google io 2017 宣布了 kotlin 会成为 android 官方开发语言。一时间朋友圈和 android 圈被各种刷屏。当然我也顺势而为发布了一篇的文章《为什么我要改用kotlin》,着实狠狠地蹭了一波热度(尽管这样会被鄙视)。...

  • kotlin 是一种新的编程语言,由 jetbrains 创建并于 2017 年 1 月发布。kotlin 旨在比 java 等其他语言更简洁、高效和现代。...此外,kotlin 提供了一些独特的功能,使其成为 android 开发的理想选择。...

  • 一篇简单介绍了android开发的官方首选编程语言kotlin的基本语法

  • android, kotlin语法,lambda表达式

  • 昨晚,最近一届的谷歌io大会正式将kotlin确定为了官方开发语言,作为一名android开发鸟,怎么能不及时尝尝鲜呢? kotlin的简要介绍 在开发之前,很多同学一定有很多疑问,kotlin到底有啥好处,怎么和现有的项目共存呢...

  • 在google i/o 大会上,google 官方正式宣布,kotlin 编程语言现在是 android 应用程序开发人员的首选语言。java 占据 android 开发绝对统治的时代一去不复返了。 kotlin,东宫太子 谷歌今天宣布,kotlin 编程语言...

  • 本项目采用模块化开发,降低各模块的冗余性,开发语言为kotlin,网络请求模块使用okhttp和retrofit(单例模式),数据解析使用gson。

  • 这是一个基于 mvvm 结构的练习项目,使用 kotlin 语言开发,主要尝试了 andorid jetpack 中的 databinding, viewmodel, livedata 和 room. 另外练习了一下 viewgroup 的绘制(见项目中的stoolbar和...

  • 5月18日谷歌在今日举行的i/o开发者大会上宣布,将kotlin语言作为安卓开发的一级编程语言。kotlin由jetbrains公司开发,与java 100%互通,并具备诸多java尚不支持的新特性。

  • kotlin开发androidkotlin简单语法变量1. 关键字var和val2.不必显式声明变量类型3. 变量的类型函数函数的定义语法糖 看书总是觉得都懂了,实际操作二百五,试着默写出来才是真的懂,就是写写有点累。 kotlin简单语法 ...

  • 产品会不断的迭代更新,其实编程语言也是一样的,开发android的新语言kotlin是简便了很多,我们不需要写太多无用的带来,来实现同样的功能,这来自于kotlin语言的特性,kotlin有什么简便的地方,我们后面会通过每一...

  • android studio配置kotlin开发环境详细步骤 第一步:安装kotlin插件 打开settings面板,找到plugins选项,点击browse repositories(浏览仓库),输入“kotlin”查找,然后安装即可。安装完成之后需要重启android ...

  • 两年前的 i/o 2017 年上,谷歌才宣布在其 android studio ide 中支持 kotlin,kotlin 开始成为 android 开发的一级语言,当时业界并不太看好,因为 java 在安卓的发展过程中做出了巨大的贡献,其作为安卓开发语言的...

  • kotlin-android-extensions插件可能算得上是我最喜欢的一个kotlin在android上的特性了。 这么说并不夸张,因为以前在使用java开发android程序时,我们总是要写一大堆的findviewbyid,枯燥又没什么意义。 虽然也有...

  • 管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: 用于学校或教育机构的学生信息、教职员工信息、课程管理、成绩记录、考勤管理等。学校管理系统帮助提高学校的组织效率和信息管理水平。 人力资源管理系统(hrm): 用于处理组织内的人事信息,包括员工招聘、培训记录、薪资管理、绩效评估等。hrm系统有助于企业更有效地管理人力资源,提高员工的工作效率和满意度。 库存管理系统: 用于追踪和管理商品或原材料的库存。这种系统可以帮助企业避免库存过剩或不足的问题,提高供应链的效率。 客户关系管理系统(crm): 用于管理与客户之间的关系,包括客户信息、沟通记录、销售机会跟踪等。crm系统有助于企业更好地理解客户需求,提高客户满意度和保留率。 医院管理系统: 用于管理医院或医疗机构的患者信息、医生排班、药品库存等。这种系统可以提高医疗服务的质量和效率。 财务管理系统: 用于记录和管理组织的财务信息,包括会计凭证、财务报表、预算管理等。财务管理系统

  • gb2312字符集 作用:国家简体中文字符集,兼容ascii。 位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。 范围:高字节从a1到f7, 低字节从a1到fe。将高字节和低字节分别加上0xa0即可得到编码。 gbk字符集 作用:它是gb2312的扩展,加入对繁体字的支持,兼容gb2312。 位数:使用2个字节表示,可表示21886个字符。 范围:高字节从81到fe,低字节从40到fe。 gb18030字符集 作用:它解决了中文、日文、朝鲜语等的编码,兼容gbk。 位数:它采用变字节表示(1 ascii,2,4字节)。可表示27484个文字。 范围:1字节从00到7f; 2字节高字节从81到fe,低字节从40到7e和80到fe;4字节第一三字节从81到fe,第二四字节从30到39。

  • 毕业设计,安卓app,基于java开发的学生成绩课件管理系统app,包括pc端和安卓anroid手机app,内含java完整源码 安卓andriod学生成绩课件管理系统 系统开发环境: windows myclipse(服务器端) eclipse(手机客户端) mysql数据库 服务器也可以用eclipse或者idea等工具,客户端也可以采用android studio工具! 系统客户端和服务器端架构技术: 界面层,业务逻辑层,数据层3层分离技术,mvc设计思想! 服务器和客户端数据通信格式:json格式,采用servlet方式 【服务器端采用ssh框架,请自己启动tomcat服务器,hibernate会自动生成数据库表的哈!】 hibernate生成数据库表后,只需要在admin管理员表中加个测试账号密码就可以登录后台了哈! 下面是数据库的字段说明: 班级: 班级编号,班级名称,开办日期,班主任 学生: 学号,登录密码,所在班级,姓名,性别,出生日期,学生照片,联系电话,家庭地址 老师: 教师编号,登录密码,姓名,性别,出生日期,联系电话,邮件,地址,

global site tag (gtag.js) - google analytics
网站地图