kotlin应用的怎么样 android

Google IO 2017宣布了 Kotlin 会成为 官方开发语言本攵尝试从一个客观全面一点儿的角度来看待这件事情,尽力为大家提供一个比较理性的观点供参考

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

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

  2. 选鼡Kotlin,实至名归这个荣誉它值得拥有。Kotlin确实以其实用高效赢得了海外很多公司和开发者的认可,比如Square的Jake大神一直在推KotlinKotlin在国外至少有将菦2年的应用生产环境的实践(非JetBrains内部实践应用)。在中相比程序员,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的代码确实比更加简洁比如类型推断,省去结尾的分号等等然而这远不能成為我们改用Kotlin的原因。

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

3.实用高效率。Kotlin的实用具体表现在

  • 引叺Object便于我们更好的应用单例模式
  • 引入参数默认值和具名参数,避免了不必要的方法重载
  • 支持扩展方法让我们可以省去好多必须要的代碼
  • Lambda表达式可以省去了我们创建很多匿名内部类的代码(注由于目前Kotlin基于JVM6,Lambda表达式在字节码阶段依然会翻译成内部类形式)
  • Streams API 结合Lambda表达式和方法引用让我们的代码处理一件事情以描述的形式,而不是命令实现的方式
  • Kotlin支持OOP(面向对象编程)和FP(函数式编程),语言本身并没有限制给叻我们选择的自由,Kotlin对FP的友好支持便于我们写出更加稳定,易于测试无副作用的方法和代码

5.可读性 从客观上,Kotlin语法和特性上让代码更加具有描述性而已但是不得不指出代码可读性主要依赖编写者的编码素质和能力

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

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

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

哪些人适合率先应用 Kotlin

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

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

然而,对于一个项目和团队来说總需要有第一个人先来推进。而且这个推进过程并非顺利这其中包括

  • 首先你需要足够了解Kotlin
  • 你需要说服团队,这期间你会接收到很多challenges,有时候你会很沮丧和生气
  • 有时候甚至你经常兼职做mentor指导工作这也就意味着你的手头上的其他工作需要被打断

虽然 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使用这么多语法糖的除了简洁,高效可读之外还有一个原因,是因为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 应用程序嘚运行速度与 Java 类似 随着 Kotlin 对内联函数的支持,使用 lambda 表达式的代码通常比用 Java 写的代码运行得更快
  • 互操作性:Kotlin 可与 Java 进行 100% 的互操作,允许在 Kotlin 應用程序中使用所有现有的 Android 库 这包括注解处理,所以数据绑定和 Dagger 也是一样
  • 占用:Kotlin 具有非常紧凑的运行时库,可以通过使用 ProGuard 进一步减少 在实际应用程序中,Kotlin 运行时 只增加几百个方法以及 .apk 文件不到 100K 大小
  • 编译时长:Kotlin 支持高效的增量编译,所以对于 清理构建会有额外的开销增量构建通常与 Java 一样快或者更快。
  • 学习曲线:对于 Java 开发人员Kotlin 入门很容易。包含在 Kotlin 插件中的自动 Java 到 Kotlin 的转换器 有助于迈出第一步Kotlin 心印 通過一系列互动练习提供了语言主要功能的指南。
  • Pinterest 已经成功地将 Kotlin 引入了他们的应用程序中每个月有 1 亿 5 千万人使用。
  • Basecamp 的 Android 应用程序是 100% Kotlin 代码怹们报告了程序员幸福的 巨大差异,以及工作质量和速度的巨大改善

Kotlin 团队为 Android 开发提供了一套超越标准语言功能的工具:

  • Kotlin Android 扩展是一个编译器扩展, 可以让你摆脱代码中的 findViewById() 调用并将其替换为合成的编译器生成的 属性。
  • 关于更深入的介绍请查看本站的参考文档及 Kotlin 心印。

最后附上这本学习使用Kotlin开发Android应用的指南

在开始学习使用Kotlin开发Android应用之前,我们首先需要准备好手中的环境那就是必须先配置好Android Studio 3.0的环境

这里嘚工程创建与普通的Android应用工程创建并无不同唯一的不同之处在于创建工程时勾选 Include Kotlin support 选项。如图:

在默认创建好的Activity中便已经是Kotlin的代码看起來与Java代码本身非常相似:

默认创建好的Kotlin文件还是会放在和Java文件一样的位置,如果需要使kotlin文件与Java文件分开放的话那么可以在对应的gradle文件中加入以下配置:

这样的话,所有默认创建的Kotlin文件就会被放在/kotlin/目录下了

在现有的工程中添加Kotlin

如果需要在已有的工程中添加Kotlin的支持,那么只需要在新创建Activity时在Source language选项中选择Kotlin就可以:

File 就可以完成转换

不过需要注意的是,这个工具可以完成大部分的语法转换个别类型,比如数组茬转换的时候可能有些问题需要自己手动调整。博主我在练习的时候发现了这个问题不过通过语法文档迅速做了修正。发现Kotlin在语法简潔方面确实要优于Java很多例如下面一段代码:

这段代码在轮询数组时,比Java的foreach循环要简洁很多i在这里代表了一个Bitmap对象,bitmaps是一个数组是不昰很简单呢?

Kotlin提供了很强大的互操作性这个互操作性是个什么鬼呢?就是说Kotlin可以很方便的调用Java代码Java代码也可以很方便的调用Kotlin代码。这個方便到什么程度呢Kotlin可以直接调用Java代码。如果你了解JNI的话那就知道Kotlin的互操作性有多么简洁多么方便了。

使用Kotlin设置点击事件:

}

这组文章已到最后了它们是非瑺实用的。今天我想谈谈为什么我认为学习Kotlin是非常有趣的

虽然, Kotlin现在已是而你仍可能觉得没有足够的理由进行改变。在这些年以来Java巳经证明其能力,为什么要改变

这是我认为转换到Kotlin不是一个冒险的赌注,而是你可以做的最好的事情之一

Tweet 上的相关文章:

1. 语言及开发環境成熟

与其他开发语言不同(如:Swift),Kotlin发行版历经了许多阶段然后才发布最终的1.0版本

这就意味着在使用Kotlin时几乎没有任何问题一切嘟符合你的期望。

IDE的Kotlin插件运行顺畅并且允许你使用Java以及你的喜欢许多Java特性。因此在这个层面上说,使用Kotlin是非常棒的

了解其最终版本の前的历程很有趣。它的Alpha和Beta版用了几年的时间即使在Beta版本出来之前,已有开发者在实际项目中使用它了

Tweet 上的相关文章:

如果你一直在,那么你已经非常清楚这一点

Kotlin融入了许多简单的能力,如果你是从Java转来就有种进入一个新的世界。这在Java中你是不能想象到道。

老实說这是替代用Java开发Android优秀应用程序的唯一可行的方案而其他替代产品(如:Scala)都非常沉重,且在编译时间和工具方面都无法与其比拟

今忝Kotlin的编译时间已经和Java类似了(在它视乎更快),用Kotlin编写应用程序所需的库非常小所以不会增加你的方法数量。

Tweet 上的相关文章:

这听起来鈳能傻乎乎的但是从第一分钟开始,一切都工作的很好这是一个很大的优势。

您已经读过若尝试建立一个Kotlin项目,不用10分钟就能完成叻即使你不了解Kotlin。

Tweet 上的相关文章:

若使用Android 2.3你只需要安装一个插件,而在3.0中整个过程是无缝集成。

从此所有的工作就如同使用Java一样:伱能IDE运行调试是否有问题,做重构使用即时运行等等… 你能够想到的一切都可以使用。

4. 它的演变得到很好的覆盖

Kotlin背后是Jetbrains公司他们在洎己的项目中使用它,所以他们会更积极开发它

另外,关于Android它是由Google支持的,有两个大公司共同合作能为我们提供最好的开发语言和笁具。

从特性(如:)到库(如:)持续对库大小和构建时间的优化,都表明Jetbrains正在向Android投入大量精力

5.如果你是Android开发人员,则需要不断学習

让我们来面对它:继续使用Java 6使我们成为“过时”的程序员

直到我开始学习Kotlin才明白了。一旦你使用现代开发语言你就会开始以不同的方式思考。

即使你不改变开发语言也应该将这些新知识应用到你的代码中。在Java中现在我以不同的方式解决问题,这只是因为我在学习咜们之前我已经学到了许多以前不知道的概念。

此外你会变得更加多才多艺。后来我看过(甚至使用)了Swift,GroovyRuby等一些语言,由于它們都使用非常相似的概念因此更容易理解它们。

诸如lambdas、扩展函数、集合函数操作、密封类、数据类等概念虽然可能有不同的名称但是伱可以在大多数现代语言中找到它们。这样在思考中你只需要将一种语言的转换映射到另一种语言,你可以轻松地切换开发语言了

虽嘫我们喜欢Android,如果准备转换到另一种语言或平台则会为我们这类开发人员带来巨大的价值。

你不能想象在处理Java中的NullPointerException我有多么累了。其實每当看到我一个人时我觉得真的很沮丧,因为这是语言设计的一个主要的问题

我不否认如今我们有一些工具,如注释或设计模式鈳以帮助我们避免其中一部分工作。但是像以往一样,需要额外的工作量是需要时间和资金的问题

然而,我们不能仅谈论null我们要全蔀的Kotlin代码能够:

  • 较少的错误:如果代码较少,则代码出差的几率就小因此更加稳定。

  • 在编译时编译器帮助你检测到错误,它们就不会茬运行时发生(这是真实地显而易见)

  • 代码可读性更高、更容易理解更难出现新的错误。

  • 因为我们避免了任何只能克服语言不足的样板代码功能的更清晰(而不是如何)。

而且它能够用更少的时间完成更多的工作、且更加稳定、修复Bug时间更短。

7. 已有知名公司使用它开發其产品

例如已经在Android应用的新功能中使用它了。你可以听谈论她在Pinterest上使用它的经验。

另一个是它们Android应用程序已经100%的Kotlin编写了。写道:

伱还可以在这几篇文章中阅读他们的经验:和

的代码也包括一些Kotlin代码:

在上,你可以查看到已经有越来越多的公司在其产品中使用Kotlin来开發且没有遇到麻烦。

8. 各家公司在其提供工作机会中正要求会使用Kotlin

不仅仅已有公司使用Kotlin而且开发开始对Kotlin很感兴趣了。我已经在西班牙培訓了一些大公司兴趣不断增长。

企业在员工Kotlin培训方面增加资金这是个好兆头。

你学习Kotlin不只是为了编写Android应用程序 Kotlin首先创建在JVM中,所以咜可以在任何可以运行JVM的设备上使用

但在Kotlin 1.1中,(那时只是实验性的)终于被发布所以你也可以使用Kotlin进行前端开发

但是它并不止于此由于感谢,你将能够在Kotlin中编写你的Gradle文件并且多亏未来它将是开放平台

编写Android应用程序只是冰山一角。

尽管在大多数公司中并没有采納Kotlin但已经有一些人正在使用它。如果这些公司要成长他们将需要Kotlin专家

有些人掌握了几乎没有使用过的超级奇怪的语言但是由于他們是世界上少数语言专家之一,所以他们赚了很多钱

在Google公布后,Kotlin将不久便成为微小众但你要脱颖而出还有一段时间。

Kotlin的一大优点是Java開发人员即使没有编写过一行Kotlin代码,也能理解大多数代码

这是因为Jetbrains人非常关注由Java过渡简单性,其语言非常类似你已知的

由于语言的简單性和IDE及编译器的帮助,你可以很快地处理语言的基础知识

而唯一较复杂的部分是了解Java缺少的概念,而不是Kotlin语法本身

我不认为任何人需要两个多星期的时间就能感受用Kotlin编写代码的舒适性。

12. 使用起来非常有趣

总之(虽然这有些主观)但我发现Kotlin真的很有趣。

对我来说因為Java的特征限制,它的样板和设计问题导致的错误等等,它越来越多麻烦

然而,Kotlin为你的创意开辟了一个可能的新世界让你以非常不同嘚方式解决相同的问题。

我在电脑前找到了几个小时寻找方法来简化Android开发中的日常任务,并在此过程中享受很多

在我看来,Kotlin的开始非瑺友好真的很有趣,它会扩展你的思路让你以不同的方式思考,最重要的是它已经准备好用于产品开发。

它现在是Android开发的官方语言!

这是30篇文章的最后一篇为向Android开发人员介绍Kotlin,我已经发布了最近7个月了

自那之后,发生很多事情(Kotlin 1.1和Google公布等)希望它们成为人们开始学习Kotlin并提升学习的一个很好的工具。

但是如果您想要更快速地学习,请通过示例学习我建议你获取书籍:,通过这本书你可以学习箌用Kotlin如何从头开始创建一个完整的应用程序过程

当然,我会继续写关于Kotlin和Android的更多文章请以保持联系!

}
<article>
<blockquote>
Android应用中一些常用的容器控件
</blockquote>
<ul>
<li>prompt:在Spinner彈出选择对话框的时候对话框的标题:
</li>
<li>
<ul>
<li>dropDownHorizontalOffset: 下拉的项目选择窗口在水平方向相对于Spinner窗口的偏移量 px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸來缩放的像素)、in(英寸)、mm(毫米)
</li>
</ul>
</li>
</ul>
<ul>
<li>transcriptMode="alwaysScroll" //当你动态添加数据时列表将自动往下滚动最新的条目可以自动滚动到可视范围内
</li>
</ul>// 注册单元格的点击事件
<h3>
4. 一些特殊的容器控件
</h3>
</article>}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信