5月18号,goole宣布Kotlin成为官方支持的开发语言以来,Kotlin语言社区,公众号,qq群等全面轰炸,本文是一篇译文,来自国外的一个用户,将给大家介绍,基础语法部分Kotlin和java之间的差异,对于使用java开发android的大牛们来说可以做个基本的比较。

1. Kotlin,do less,get more

Kotlin的一个主要优点是它的简洁。 你用更少的代码获得更多的功能。 而你写的代码越少,你犯的错误就越少。 这很简单。 让我们看看Kotlin的基础知识,从类开始。

上面是一个通常的Java类。 它做的不多。 它只包含一些数据。 但是,当你意识到它给表带来的不足时,看看这段代码有多大是很痛苦的。 为了鼓励你,我们会给你一个等同的类写在Kotlin。

是的,你会为你的数据类自动获取需要的getters,setters,e  quals(),hashcode(),toString()和copy()函数! 当然,你可以轻松地重写这些函数,但在大多数情况下,只需声明类及其属性就足够了。

这正是我们的意思,当我们说Kotlin简洁。

2. avoid NullPointerException

现在我们想提醒你在许多编程语言中最大的痛苦 - 空指针异常。 我们几乎不能想象自从托尼·霍尔在1965年发明它之后,有多少开发者遭受了空指针,同时试图使事情更简单一些。

可悲的是,我们不能及时回来,防止Tony犯这个错误。 但是使用Kotlin,我们现在可以轻松地转义NullPointerException。

如果变量是可空的,编译器将不允许你访问它没有适当的检查。 Kotlin强迫你使用? 运算符。 这可以防止应用程序自动崩溃。
它如何在引擎盖下工作? 让我们回顾一下生成的字节码。

正如你所看到的,我们在这里有相同的空检查。 JetBrains的开发人员(创建Kotlin)知道每次检查我们的变量是避免NullPointerException的唯一方法。 但他们也知道Android开发人员不想在他们的项目中处理NullPointerException。 他们可能想:“为什么不自动生成这个检查如果变量是可空的?

JetBrains的开发人员只是这样,让我们的生活更容易了!

3. cast off utils(摆脱工具类)

让我们来讨论一下有关使用util类的丑陋事情。 你有没有一个项目没有他们? 我们几乎不记得这一切。 Kotlin有一个聪明的解决方案 - 扩展功能 - 帮助你摆脱所有的util类一劳永逸。

扩展函数几乎是一个通常的Kotlin函数。 但是当你声明它,你需要指定的实例将具有扩展功能的类。

注意'this',我们作为参数传递给makeText()方法? 它不是类的一个实例,我们声明这个函数,而是一个Context实例。 现在你可以直接从你的Activity或任何其他Context实例调用这个函数。 例如:

你应该记住,扩展函数不以任何方式修改它扩展的类。 那么它如何工作而不改变原来的类? 让我们再次看到字节码。

哈! 您的函数隐式接收它作为第一个参数扩展的类的实例。 因此,在字节码中,对函数体中“this”的任何访问都将替换为对第一个参数的访问。 没有魔法真的。 您可以在项目的任何位置使用此函数。
时间删除你的util包!

4. 你可以忘记视图绑定

你还记得findViewById()method()吗? 我们相信你不喜欢它。 我们也不是。 此外,我们不想为我们需要访问的每个视图声明变量和Butterknife注释。

你可以忘记与Kotlin Android Extensions的视图绑定。 不再需要创建变量和绑定视图。 您可以使用在xml布局中声明的标识符直接访问您的视图。

这太简单了,不是吗?

基本上,findViewById()方法仍在使用中。 但是没有必要自己写。 Kotlin会为你做。

当您使用Android扩展时,findCachedViewById()函数和HashMap实例将会自动生成。 每次通过其标识符访问您的视图将被一个新的函数调用替换。 如果是第一次访问视图,此函数将调用通常的findViewById()函数,并将接收的视图添加到HashMap中,以便在下次访问视图时从中检索视图。

5. 你可以更容易地使用集合

让我们谈谈Kotlin的集合。 因为我们经常需要使用数据模型集合执行困难的操作。 例如,我们可能有一个学生名单,我们需要从中检索三个A级成绩的学生和两个B成绩的学生。

看看Kotlin的解决方案:

下面是我们如何解决Java中的同样的问题:

这只是一个小例子,说明如何在Kotlin和Java中使用集合,但你可以看到差别! 你能想象如果我们处理一个大项目的集合,Kotlin会有什么区别吗?

译者序:Kotlin相对于java的最大的优势,就是简洁,但是java9出来以后,一些繁琐的问题应该会得到一定的解决,同时如果现阶段使用Kotlin去开发android,常用的框架等等就不能使用了,但是学习Kotlin还是有必要的,Kotlin的语言风格更现代化,语法直接继承ActionScript,以现代化的风格,解决Java多年的陈旧问题,省去了使用各类生态工具的麻烦,将主流编程语言向前推动了一步,不再固守于C时代的语法形式。随着Kotlin的不断完善将来会成为和java相媲美的优秀的android开发语言。

Kotlin VS Java:基本语法差异(转载)的更多相关文章

  1. C#与Java的语法差异

    C#与Java的语法差异C与Java的语法差异前言程序结构基本语法数据类型字符串变量与常量运算符判断语句循环语句访问权限方法数组结构枚举类继承多态运算符重载接口命名空间预处理器指令正则表达式异常IO泛 ...

  2. Kotlin VS Java:基本语法差异

    Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的社区不断增长. 每个人都在谈论它,并说它很酷. 但为什么这么特别? 我们准备了一系列文章,分享我们在Kotlin开发Android应用 ...

  3. C++、Java语法差异对照表

    C++.Java语法差异对照表 C++ and Java Syntax Differences Cheat Sheet First, two big things--the main function ...

  4. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  5. JAVA基础语法:常用功能符以及循环结构和分支结构(转载)

    3.JAVA基础语法:常用功能符以及循环结构和分支结构 1.常用功能符 注释 ("文字"是被注释的部分) //文字 单行注释 /文字/ 多行注释 算术运算符 + - * / / 整 ...

  6. JAVA基础语法:java编程规范和常用数据类型(转载)

    JAVA基础语法:java编程规范和常用数据类型 摘要 本文主要介绍了最基本的java程序规则,和常用数据类型,其中侧重说了数组的一些操作. 面向java编程 java是纯面向对象语言,所有的程序都要 ...

  7. C++与Java的语法区别

    C++与Java的语法区别 首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别. main 函数C++//自由浮动的函数int main( int argc, char* argv[]) ...

  8. Atitti.java exp ast java表达式语法ast构造器

    Atitti.java exp ast java表达式语法ast构造器 /atiplat_cms/src/com/attilax/lang/AstParser.java 原理 分割tokens_sli ...

  9. Java-Runoob:Java 基础语法

    ylbtech-Java-Runoob:Java 基础语法 1.返回顶部 1. Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍 ...

随机推荐

  1. [转] ES6 import/export:模块导入导出方式

    export导出语法 // default exports export default 42; export default {}; export default []; export defaul ...

  2. 基于thinkphp的RBAC权限控制

    RBAC  Role-Based Access Control 权限控制在后台管理中是十分常见的,它的模型大体上是下面这张图的形式 我用的字段和上面不一样,图只是个示例 一个简易的权限控制模型只需要3 ...

  3. python常用内建模块--base64

    Base64是一种任意二进制到文本字符串的编码方法,常用于在URL.Cookie.网页中传输少量二进制数据. import base64 a = 'abcdef/+'b= base64.b64enco ...

  4. maven的三种工程pom、jar、war

    阅读数:739 maven中的三种工程: 1.pom工程:用在父级工程或聚合工程中.用来做jar包的版本控制. 2.war工程:将会打包成war,发布在服务器上的工程.如网站或服务. 3.jar工程: ...

  5. Quratz入门

    一:介绍 1.应用场景 基本上任何公司都会用到调度这个功能, 比如我们公司需要定期执行调度生成报表, 或者比如博客什么的定时更新之类的,都可以靠Quartz来完成.正如官网所说,小到独立应用大到大型电 ...

  6. 023 Spark Scheduler(调度)

    1.官网 http://spark.apache.org/docs/1.6.1/job-scheduling.html http://spark.apache.org/docs/1.6.1/confi ...

  7. Cpu 常见系列以及型号

    Intel旗下 赛扬(Celeron)——桌面低端 奔腾(Pentium)—— 桌面中端 酷睿 (Core)——桌面高端 至强(Xeon)——服务器中端 安腾(Itanium)——服务器高端 凌动(A ...

  8. 小程序使用 rpx 单位 转 px的方法(用于动画、canvas画图)

    1.需要借助的API:wx.getSystemInfoSync(); 通过API可获取的值: // 在 iPhone6 下运行: var systemInfo = wx.getSystemInfoSy ...

  9. C# 多进制转换

    public class Converter { private static String keys = "0123456789abcdefghijklmnopqrstuvwxyzABCD ...

  10. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...