如何看待 Kotlin 成为 Android 官方支持开发语言?

HIL硬件在环测试全流程解析:从Simulink建模到实时仿真实践 硬件在环仿真(HIL)是连接真实ECU与虚拟被控对象的关键测试技术,它通过实时仿真机运行离散化模型,配合IO板卡和故障注入单元,弥补了纯软件仿真无法覆盖电气接口与异常工况的盲区。其核心价值在于高可重复性和故障注入能力,可广泛应用于整车控制器、BMS及底盘控制器的开发与回归测试。在实践路径上,需从Simulink建模入手,关注模型降阶、离散化与定步长求解,再通过代码生成与部署完成实时机环境搭建。结合自动化测试工具,可大幅提升测试效率。本文围绕硬件在环仿真系统的架构选型、建模要点、代码生成及高频问题排查,梳理出 阅读详情

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

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

为什么会选用Kotlin

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

  1. 为了逐渐摆脱专利流氓Oracle。从去年的转向OpenJDK,到现在的支持Kotlin作为官方语言,某种意义是为了摆脱藉由9行代码敲诈获取天价赔偿的Oracle。

  2. 选用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 应用的文章,分享等这些有实质性意义的行动。

更多关于Kotlin 和 Android 内容,请访问我的独立博客 技术小黑屋 或者扫描下方的二维码关注我的公众号获取最及时的内容推荐。

qr code

浅析Kotlin——新Android官方语言 写在前面: 在不久前Google io开发者大会上面,Google突然发出大招–Kotlin成为Android开发的官方语言。一夜间,大多数全球的Android开发者们一脸懵逼,绝大多数人之前压根不知道Kotlin是个什么东西。而这就意味着,在之后的Android项目开发中将逐步从Java语言转变为Kotlin语言,而在以后新增的代码文件将不再以Java代码的形式出现,而是以 Kotlin 代码... 阅读详情

相关推荐

430单片机实现三人投票表决器_基于单片机的五人表决器的设计

姚海云+马野摘要:本设计利用51单片机,按键开关模块,数码管显示模块和LED模块来实现一个简单的五人表决器的功能。按键开关模块中的键2~键6表示五个人,由5个人来投票,当同意的票数大于或者等于3人时,数码管显示同意的人数,说明表决通过。当表决的人数小于3时,数码管显示同意的人数。关键词:表决器;单片机;流水灯;数码管;矩阵键盘;时钟中图分类号:TP391 文献标识码:A 文章编号:1009-304...

weixin_33277215的博客 2559

Android为什么选择Java作为开发语言?

Android系统基于Linux,内核和驱动都是使用C/C++语言做开发,为什么又设计一个 Dalvik JVM,然后在SDK 层面选择Java作为开发语言? 首先我们需要选用一个语言来开发本地App。 那么,我们第一步干啥了。 在现有的语言中挑选语言。 那么首先考虑的条件是不火的语言和没前途的语言是不在选择范围的。 ---因为没人用,那么库就会少。因为库少就不会好用。因为不好用

天生爱赞美的博客 1万+

Python爬取腾讯视频m3u8加密流实战(附完整代码)

本文提供了一份详细的Python实战教程,指导如何通过抓包分析、模拟请求头与载荷,破解腾讯视频的m3u8加密流防盗链机制,并附上完整代码实现视频片段的下载与合并。教程涵盖从侦察到代码实现的完整流程,并包含参数动态化、多线程下载等高级技巧与避坑指南,旨在帮助开发者掌握流媒体下载的核心技术。

weixin_29090089的博客 1641

Android开发都需要使用什么语言?

Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面。那么,Android系统都能使用哪些语言来开发呢?      在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过Android N

m13286282的专栏 2万+

嵌入式学习笔记- 关于电容的纹波电流

纹波电流是导致电解电容发热、影响其寿命的关键交流电流成分。它不是一种特殊的电流,而是电路中必然存在的现象。要重视,不能忽视。必须保证电路中的纹波电流 < 电容的额定纹波电流。电容鼓包爆浆,要怀疑是否是纹波电流过大或电容ESR变大所致。希望这个解释能帮助您彻底理解这个概念!二 电容纹波电流与频率的关系在大多数情况下,频率越高,电容所能承受的额定纹波电流值越大。【个人理解:因为频率越低ESR越大,具体见第三节ESR与频率的关系】下面我为您详细解释为什么会这样,以及在实际应用中如何考虑。

qq_35771411的博客 2199

IGBT基础知识及应用电路仿真(Multisim)

本文系统介绍了IGBT(绝缘栅双极晶体管)及其应用电路。首先详细解析了IGBT的基本结构、工作原理和特性参数,重点阐述了其五层半导体结构、电导调制效应和电压驱动特性。随后通过Multisim仿真展示了IGBT在四种典型功率变换电路中的应用:半桥驱动电路实现隔离式互补驱动;全桥逆变电路完成DC-AC转换;三相桥式逆变电路生成三相交流电;直流斩波电路(BUCK/BOOST/BUCK-BOOST)实现电压升降变换。文章通过理论分析与仿真波形相结合,全面呈现了IGBT在中高压大功率场景下的优异性能和灵活应用。

XU157303764的博客 1221

Android 应用开发概述与环境搭建指南

Android 是由 Google 主导开发的基于 Linux 内核的开源移动操作系统,主要用于智能手机、平板电脑、智能电视、穿戴设备等移动设备。Linux 内核层:提供底层硬件驱动、内存管理、进程管理等基础功能系统运行库层:包含 C/C++ 库(如 SQLite、OpenSSL)和 Android 运行时(ART)应用框架层:提供开发 Android 应用的核心组件(Activity、Service、ContentProvider 等)应用层:预装的系统应用(如相机、浏览器)和用户安装的第三方应用。

xx 3277

010、Zephyr RTOS开发环境搭建(Docker)

摘要 本文分享了使用Docker搭建Zephyr RTOS开发环境的实践经验。作者通过团队新人配置环境的真实案例,指出传统安装方式存在版本冲突、缓存污染等问题,而Docker方案能确保环境一致性。文章详细介绍了自定义Docker镜像的设计思路,重点解决工具链版本匹配、Python虚拟环境隔离等问题,将镜像体积从2GB优化到800MB。提供了从拉取镜像到点亮LED的完整工作流程,并总结了USB设备直通、文件权限、缓存问题等常见陷阱。还探讨了多阶段构建、CI集成等进阶用法,同时客观分析了Docker方案的局限性

m0_50546716的博客 81

Android 中使用代码动态网格布局(2)

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 PDF(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。Java语言与原理;大厂,小厂。Android面试先看你熟不熟悉Java语言高级UI与自定义view。

2401_84121499的博客 816

国网DLT698.45协议——采集系统、数据交换(一)

对于国网698协议,是一种面向对象的通信协议,用于远程监控和控制电力系统中的设备。面向对象使得对协议的思考更趋向于正常思维,使计算机中描述的抽象世界于现实世界中能够更好的对应起来。协议中就是将各种方法和属性对应描述成类和对象。接下来是我学习该协议的一些总结和认识,欢迎大家随时在评论区或者私信我交流学习。:系统=对象+消息:程序=算法+数据对象和接口类描述:类描述了一组具有相同属性和相同方法的对象。

一个bug是bug,多个bug能work 1万+

推荐系统(一)概述

在互联网领域,推荐系统(Recommendation Systems)的应用非常广泛。在音视频方面,如抖音、快手、哔哩等;在电商平台方面,如京东、淘宝、拼多多等。推荐有助于帮助用户快速发现潜在感兴趣的内容(音视频、商品、新闻等信息流),从而提升用户体验,同时有助于提升商业效率。从本文开始,笔者将结合自身在信息流推荐领域的经验,通过系列文章对推荐系统展开介绍。

Jin_Kwok的博客 6085

Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言

在今日凌晨的 Google I/O 大会上,Google 官方正式宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。Java 占据 Android 开发绝对统治的时代一去不复返了。 ##Kotlin,东宫太子 谷歌今天宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。 谷歌在今天的声明中写道:“Android 的开发将越来越以 Kotlin 为先。”许多新的 Jetpack API 和特性将首先在 Kotlin 中提供。如果你要开始一个新项目,.

m0_66264630的博客 1422

智能车图像处理1-基础图像规格

从厂家摄像头的库函数中,我们可以直接得到完整图像的灰度数组,经过二值化之后(算力允许,可以考虑大津法),就是我们要处理的0-1二值图像了。本系列所有的文章中,我们的图像规格如下。

taiyuezyh的博客 4346

如何看待 Kotlin 成为 Android 官方支持的开发语言?

Google IO 2017 宣布了 Kotlin 会成为 Android 官方开发语言。一时间朋友圈和 Android 圈被各种刷屏。当然我也顺势而为发布了一篇的文章《为什么我要改用Kotlin》,着实狠狠地蹭了一波热度(尽管这样会被鄙视)。眼下 Android 圈已经躁动了,甚至严重到如果对 Kotlin 视而不见就显得自己不像一个合格的 Android 程序员。本文尝试从一个客观全面一点儿的...

zoe技术博客专栏 796

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

如何看待 Kotlin 成为 Android 官方支持开发语言

Google IO 2017宣布了 Kotlin 会成为 Android 官方开发语言。一时间朋友圈和Android圈被各种刷屏。当然我也顺势而为发布了一篇的文章《为什么我要改用Kotlin》,着实狠狠地蹭了一波热度(尽管这样会被鄙视)。眼下Android圈已经躁动了,甚至严重到如果对Kotlin视而不见就显得自己不像一个合格的Android程序员。 本文尝试从一个客观全面一点儿的角度来看待这件...

weixin_30726161的博客 117

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

移动周刊第 191 期:如何看待 Kotlin 成为 Android 官方支持开发语言?

写在前面谷歌在 I/O 2017 开发者大会上宣布了 Kotlin 成为 Android 开发一级语言。那么,Kotlin 会取代 Java 么,你怎么看?【相关阅读】 为什么我要改用 Kotlin 使用 Kotlin 优雅的开发 Android 应用 Kotlin初探 Kotlin 开发 Android KotlinForAndroid Kotlin从语法到安卓开发 技术文章Android如何看...

csdnvr的博客 450

如何看待 Kotlin 成为 Android 官方支持的开发语言?一线开发者这样说

Google IO 2017 宣布了 Kotlin 会成为 Android 官方开发语言。一时间朋友圈和 Android 圈被各种刷屏。当然我也顺势而为发布了一篇的文章《为什么我要改用Kotlin》,着实狠狠地蹭了一波热度(尽管这样会被鄙视)。眼下 Android 圈已经躁动了,甚至严重到如果对 Kotlin 视而不见就显得自己不像一个合格的 Andr...

weixin_34218579的博客 291
上一篇: 基于Kubernetes搭建MySQL主从集群
下一篇: 为什么我要改用Kotlin
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值