这13位专家关于kotlin的看法,80%移动开发人员都没听过。
我究竟要不要学习Kotlin呢?
要回答这个问题,我们先把时间拨回到2017年5月18日,安卓团队在谷歌 I/O 2017 大会上宣布 Kotlin 成为官方头等支持语言。
彼时谷歌技术大牛 Steve Yegge 发表了一篇关于 Kotlin 的使用体会总结文章:“为什么说 Kotlin 比你们用的那些垃圾语言都好?”
一时间这条爆炸性资讯在引发的热议一直持续到了今天。
时间是检验真理的唯一标准,接下来我们来看看国内外技术专家,使用kotlin开发的感受!
Google Android 专家Annyce Davis:“当 Kotlin 出现时,我立刻被它吸引了,因为它的很多语法特性让我想起了 Groovy。它既整洁又精炼。”
Google Android 专家Sebastiano Poggi:“我真的真的很喜欢这门语言。我个人认为它在很多情况下使得编码变成一件愉快的事情,相比之前,同样的情况下用 Java 语言编码将会感到痛苦和繁琐。Kotlin 有时让我觉得自己就像一个 10 倍效率开发者。”
Google Android 专家Jorge Barroso:“Kotlin 迈出了 Android 开发的一大步,在这之前,Android 缺少 Kotlin 所带来的特性,相比于其他的 Java 平台,Android 平台的 Java 开发有些过时,即使现在有在推动 Java 8,但它还是不会变成我们喜欢的现代编程语言。
Google Android 专家Mark Allison:“虽然我也很喜欢 Kotlin,但我不认为它已经足够成熟到能够在线上产品中使用。成熟模式和最佳实践的缺乏,使得 Kotlin 编写的代码可能难以维护。”
Google Android 专家Dmytro Danylyk:“对于那些停留在 Android 世界的开发者而言,Kotlin 是一个真正的规则改变者,它拥有很多我喜欢的特性:空类型安全,data classes,属性和懒加载属性,扩展函数,协程,不变性等等。
我很享受使用 Koltin 来编码,因为我没有必要在项目中引入太多的第三方库,Kotlin 已经非常好的提供了大部分的支持。”
Google Android 专家Anup Cowkur:“我曾经使用过像 Haskell 和 Elixir 这样的语言进行编码,因此当我进行 Android 开发时时常在想:“为什么 Android 中不能有这样好用的特性?”。现在使用 Kotlin,我们可以做到了。”
Google Android 专家David Vávra:“在我的主要应用(Settle Up)的生产环境中我使用了 Kotlin,它已经足够成熟,而且相比 Java(任何版本) 有很多的优点。Kotlin 完全兼容现有的 Java 工具和函数库,同时能够很好的在 Android Studio 中使用。如果现在新创建一个 APP,我肯定会选择 Kotlin。”
听完了Google大牛的各种夸 ,难免有黄婆卖瓜自卖自夸的嫌疑?接下来我们看看国内移动开发领域大神对kotlin的看法:
鸿洋:“我每天都会看一些新的库或者文章,包括Google对外的一些库,已经有非常多的一部分都是用Kotlin对外输出的,如果我不会,对我学习起来有一定阻碍。所以我选择学习Kotlin,是为了更好的学习!总之,我们应该了解自己当下最需要的,而不是什么技术最热门。”
郭霖:“之前喷kotlin,觉得用了kotlin后项目的构建速度会大幅降低,现在我改真香了!”
美团团点评企业平台研发部刘自鹏:“我认为Kotlin 应用于 Android 开发相比传统 Java优势,在于依赖于 Kotlin 大量的语法糖以及更简洁易表现的语法风格能够大大提高开发效率,减少代码量,降低维护成本。
目前来看最大的劣势就是普及率太低了吧!团队开发,如果你一个人用 Kotlin ,那必定会产生某些沟通问题,或者矛盾。”
阿里水滴技术团队:“如果你用Kotlin开发过业务,很快就会意识到它相较于Java的语法更加简洁、高效。比如Kotlin做了这些改良:
在很大程度上实现了类型推导,而Java在SE 10才支持了局部变量的推导。
放弃了static关键字,但又引入了object,可以直接用它来声明一个单例。而作为比较,Java则必须依靠构建所谓的“单例模式”才能等效表达。
引入了一些在Java中没有的“特殊类”,比如Data Classes(数据类)、Sealed Classes(密封类),我们可以构建更深程度上的代数数据类型,结合when表达式来使用。”
腾讯Bugly:“我们为什么需要 Kotlin?答:消失的 Getter 和 Setter、又见空指针、Smart Cast、打日志、再见Utils、晚安ButterKnife...”
听完了上述专家们使用kotlin的感受,接下来我们再从技术层面剖析你应该完全学习Kotlin 语言的理由:
0# Java 互操作性
Kotlin是 100% 与 Java 具备互操作性的。你可以使用 Kotlin 继续你老的 Java 项目开发。所有你熟悉的 Java 框架仍然可用,任何框架,不管是 Kotlin 写的,还是你固执 Java 小伙伴写的都可以。
1# 熟悉的语法
Kotlin 不是诞生于学术界的怪异语言。其语法是 OOP 领域的任何开发者都熟悉的,可以或多或少的有一些了解。当然和 Java 还是有些不同的,例如重构后的构造函数以及使用 val 的变量声明等等。下面是一个基本的 Kotlin 示例代码:
2# 字符串插值
这相当于是更智能,更具备可读性的 Java 的 String.format() 方法的 Kotlin 实现:
3# 类型推断
4# 智能类型转换
Kotlin 编译器会跟踪你的逻辑代码并在需要的时候进行自动的类型转换,这意味着我们不需要在显示转换时做更多的 instanceof 检查:
5# 更直观的相等性比较
你不再需要调用 equals(),因为 == 操作符也可以用来比较结构的相等性:
6# 默认参数值
不需要像 Java 那样定义很多包含不同参数的相似方法:
7# 命名参数
结合默认参数值,命名参数可以消除 builders 的使用:
8# When 表达式
9# Properties
可以给公共字段自定义 set 和 get 行为,这意味着不再会因为那些没用的 getters & setters 导致代码疯狂膨胀。
10# Data 类
这是一个 POJO 类,包含 toString(), equals(), hashCode(), 和 copy()方法,和 Java 不同的是,它不会超过 100 行代码:
11# 操作符重载
可以重载预定义的一组操作符来提升代码的可读性:
12# 解构声明
一些对象是可以解构的,一个很有用的例子就是对 Map 进行迭代:
13# Ranges
14# 扩展函数
还记得你第一次用 Java 实现一个 List 的排序吗?你找不到一个 sort() 函数,然后你就四处求助,最终找到了Collections.sort()。后来你需要将一个字符串的首字符变成大写,最终你还是自己写了一个方法来实现,因为你当时还不知道有这么个东西StringUtils.capitalize().
如果只有一种方法可以向已有的类添加新的函数,这样 IDE 就可以帮助你在代码完成时找到正确的函数。在 Kotlin 里你可以这么做:
Java 是我们应该称之为是一个几乎静态类型的编程语言。Java 的 String 变量类型无法保证它不会等于 null。尽管我们已经习惯了这样的情况,但它否定了静态类型检查的安全性,导致 Java 程序员总是活在各种空指针异常的恐惧中。
Kotlin 通过区分非空类型和允许为空类型来解决这个问题。类型默认是不允许为空的,可以通过在后面加一个 ? 问号来表示允许为空,例如:
Kotlin 强制你必须在访问一个可为空的类型变量时候必须确保不会发生空指针:
虽然看起来有点麻烦,但这的确是 Kotlin 一个微小却又非常重要的特性。我们仍可以使用智能的转换,可以在需要的时候将允许为空的类型转成不允许为空:
我们也可以使用安全调用方法?. 该表达式在 b 为空时返回 null,而不是抛出空指针异常:
安全调用可以链接在一起,以避免像其他语言一样存在大量嵌套的 if-not-null 检查,如果我们想要一个默认值而不是 null 时,可以用 ?: 操作符:
如果没有适合你的,那么你应该是需要一个空指针了,你将不得不显式的进行处理:
16# 更好的 Lambdas
嘿,帅哥,这是一个很好的 Lambda 系统 —— 在完美的可读性和简洁之间取得非常好的平衡,这得益于非常聪明的设计选择。其语法简单直接:
优点体现在:
- 如果 lambda 是方法的最后一个参数或者是唯一参数的话,那么方法的括号可以移动或者省略.
- 如果我们选择不去声明单参数的 lambda 表达式的参数,那么 Kotlin 会隐式的将之命名为 it.
结合上述优点,下面的三个不同的语句效果一样:
这个可以让你编写更加简洁的函数式代码,就像下面这样优雅:
Kotlin 的 lambda 系统和扩展函数结合,可以非常棒的用来开发各种 DSL。例如 Anko 这个 DSL 的例子可以增强 Android 的开发:
17# IDE 支持
如果你打算开始使用 Kotlin 开发项目,在工具上你会有很多的选择。但我强烈推荐使用 IntelliJ ,因为它自带 Kotlin 的支持 — 它的特点展示了同一组人设计的开发工具和语言时的优势。
如何学习kotlin?
需要我们去学习官网教程 或者 google 提供的快速学习的教程,当然这里只是快速浏览就行了,主要还是得靠实践,先熟悉基本的语法,然后找时间对语法进行了解,最后在实践开发中使用高阶特性。
官网教程-中文:https://www.kotlincn.net/docs/reference/
需要上述kotlin项目实战专题资料的朋友,添加VX:13203163609,即可免费领取
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
万字深度解析,飞天大数据平台DataWorks 如何撑起阿里99%的数据开发?
作者:刘星 阿里巴巴高级技术专家 文章导读 DataWorks是阿里巴巴自主研发,支撑阿里巴巴经济体99%数据业务建设和治理,每天数万名数据开发和算法开发工程师在使用。从2010年起步到目前的版本,经历了多次技术变革和架构升级,也遗留了大量的历史包袱。技术的创新和业务的发展,相辅相成但也互为掣肘。存在需求接入慢,代码牵一发而动全身,环境复杂等问题,沉疴已久。历次迭代均未从根基上升级DataWorks,仅仅是一些性能提升、工程结构的优化,减少了重复代码等,并未促成根本性的技术革命。 本文将探讨如何通过当前大热的微服务架构,来改变DataWorks平台的现实问题,从繁杂的工程中探索出一条切实可行的技术架构变革之路。 一、痛点 让我们先来谈谈DataWorks当前遇到了哪些痛点,这些痛点是倒逼着我们进行技术变革的源动力。 1.1 沉重的历史包袱 首先要提的就是历史原因遗留的各种问题,DataWorks历史上多个版本同步开发,前后端技术栈多次变革,应用一旦上线就很难废弃,一个对外暴露的api,很可能是5年前开发的,但依然有业务在依赖,通常情况下连这些古老业务的负责人都找不到了。当我们的服务正常...
- 下一篇
Python系列之Flask框架初识
Flask是一个使用Python编写的轻量级Web应用框架,凭借更灵活、轻便、安全且容易上手的特性,成为企业常用的Python框架之一。在完成Web前端、Linux以及MySQL相关的课程之后,专业的Python培训班都会讲解Flask框架知识,以下是小编整理的相关知识点。FlaskFlask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架。开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。默认情况下,Flask不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask支持用扩展来给应用添加这些功能,如同是Flask本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask框架的特点:1)Flask自...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题