Kotlin学习总结(1)——Kotlin快速入门

“近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上。一旦出在了那个位置,即使不做任何事,也可以随着波浪顺顺当当地向前飘个十年甚至更长时间。在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。”                                                

—— 吴军 《浪潮之巅》

正如作者吴军所言,“在工业史上,一种新技术代替旧的技术是不以人的意志为转移的。”浪潮和巨头以一种相辅相成的关系一次次推动IT行业的进化,这样看来,“寻找下一个谷歌”,就是在“寻找下一个浪潮”。
对于互联网的基础——编程语言而言,一个语言的发展,影响着所使用编程语言的程序员的从业率和开发效率,间接影响着一个软时代的发展效率。快而优雅,Kotlin语言就是为此而生。
起源
万物皆有起源,要说起Kotlin的起源,我们不妨先看看他的前辈,同为JVM语言Java的起源。
1991年4月,由James Gosling博士领导的绿色计划(Green Project)开始启动,此计划的目的是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java语言的前身:Oak(橡树)。
1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上正式发布Java 1.0版本。Java语言第一次提出了“Write Once,Run Anywhere”的口号。
1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境。JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。JDK 1.0版本的代表技术包括:Java虚拟机(JVM)、Applet、AWT等。
1997年2月19日,Sun公司发布了JDK 1.1,Java技术的一些最基础的支撑点(如JDBC等)都是在JDK 1.1版本中发布的,JDK 1.1版的技术代表有:JAR文件格式、JDBC、JavaBeans、RMI。Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。
1998年12月4日,JDK迎来了一个里程碑式的版本JDK 1.2,工程代号为Playground(竞技场),Sun在这个版本中把Java技术体系拆分为3个方向,分别是面向桌面应用开发的J2SE(java 2 Platform, Standard Edition)、面向企业级开发的J2EE(Java 2 Platform, Enterprise Edition)和面向手机等移动终端开发的J2ME(Java 2 Platform, Micro Edition)。
2004年9月30日,JDK 1.5发布,工程代号Tiger(老虎)。从JDK 1.2以来,Java在语法层面上的变换一直很小,而JDK 1.5在Java语法易用性上做出了非常大的改进。例如,自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK 1.5中加入的。
2006年12月11日,JDK 1.6发布,工程代号Mustang(野马)。在这个版本中,Sun终结了从JDK 1.2开始已经有8年历史的J2EE、J2SE、J2ME的命名方式,启用Java SE 6、Java EE 6、Java ME 6的命名方式。
2011年7月28日,Oracle公司发布java se 1.7。由于金融危机影响,SUN公司被oracle公司所收购,让开发者整整等了5年才迎来了1.7版本的发布。
2014年3月18日,Oracle公司发表Java SE 1.8
Java 的创造是为了完成 WORA(Write Once Run Anywhere 一次编写到处运行) 的理念,它的平台独立性,使得它必须构建一个基于操作系统之上的虚拟及其,Java虚拟机——JVM。也正由于JVM的存在,使它在企业应用中获得了巨大成功。

最开始对于基于JVM的语言来说,只存在Java,它是用于在JVM上编程的唯一选择。但是这个行业很早就满足不了对在JVM上面编程的更多和潜在的选择需求。在脚本领域首先出现了Jython,JVM的一种Python实现,还有Rhino和JavaScript的JVM引擎,它们出现在1997年,跟着就是2000年的BeanShell和2011年的JRuby,以及著名的Scala和Groovy。
Kotlin是由JetBrains在2011年JVM语言峰会上发布的语言,Kotlin是JVM家族中年纪最小的一位新成员。它从Groovy及scala等前辈身上继承了不少优秀基因,同时还加入了一些别出心裁的原创要素。它的设计思路是提供同Java一样快捷的编译效果,并获得本地Java二进制内容的处理速度。这两大优势使其从头一个发布版起,就成为开发人员们解决编译及执行速度问题的首选JVM语言。
什么是Kotlin
Kotlin来自于著名的IDE IntelliJ IDEA(Android Studio基于此开发) 软件开发公司 JetBrains(位于东欧捷克)。Kotlin起源来自JetBrains的圣彼得堡团队,名称取自圣彼得堡附近的一个小岛(Kotlin Island),是一种基于JVM的静态类型编程语言。

2017年召开的Google IO大会上,Google将Kotlin语言取代JAVA作为android开发的一级编程语言,这意味着Kotlin语言的优势,将能够率先在移动设备上发挥出它的优势,Google的大力支持也将为Kotlin的发展起到推动作用。


Kotlin由JetBrains公司开发一个基于JVM的新的编程语言,Kotlin正是为弥补Java那些缺憾而生的。它极大简化代码,使我们节省编写大量的样板代码工作,它的最大特点之一就是与Java 100%互通,并具备诸多Java尚不支持的新特性。Google称还将与JetBrains公司合作,为Kotlin设立一个非盈利基金会。Android Studio 3.0版本将全面的对Kotlin语言提供支持。
新旧对抗,Kotlin vs Java?
计算机语言是上一大分水岭就是高级程序语言的诞生,早期的汇编语言严重一依赖于硬件设备,学习门槛高、移植性极差、理解起来很困难、开发效率也很低下。为了让编程语言更贴近人类的真实思维模式,人们开发了高级语言,让整个程序代码变得可读、易用、稳定、可移植、开发高效。
除了极少数非常底层的领域直接使用汇编外,如今早已是高级程序语言的天下。程序员可以将自己的精力花在,创造设计与抽象高层次的事物上,而不是机器的翻译者。
Kotlin毫无疑问就是一门高级语言,它拥有高级语言的特性。Kotlin不仅继承了Java语言的优点,还拥有Groovy和Scala等语言的简洁和易用性。
Kotlin VS Java

Kotlin语言相比于Java语言,最主要的特点就是其的,优雅与简洁性。如,官方给出了一张关于Kotlin特性结构图:


简化了package引入的写法
将Array可以作为类型参数
每一行代码不在以“;”作为结束符,而是换为了回车
那么,kotlin的优势就只有这些吗?当然不是,下面我们主要介绍一下kotlin语言在使用上相比Java的几点便捷性。
Kotlin与Java混合编程
Kotlin完美解决了与Java直接相互调用的问题。意味着,你不用担心使用了Kotlin之后,无法再使用自己熟悉的框架库。
数据类,让代码更加简洁
在使用Java开发Android应用程序过程中,我们经常会遇到使用数据类。如
public class User {
    private long id;
    private String userName;
    private String avatar;


    public long getId() {
        return id;
    }


    public void setId(long id) {
        this.id = id;
    }


    public String getUserName() {
        return userName;
    }


    public void setUserName(String userName) {
        this.userName = userName;
    }


    public String getAvatar() {
        return avatar;
    }


    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", avatar='" + avatar + '\'' +
                '}';
    }
}
许多冗余的代码,无意义的getter、setter和toString。如果使用Kotlin呢?需要多少代码?
data class User (
    var id: Long,
    var userName: String,
    var avatar: String
)
空安全,告别NullPointException
在Java开发的过程中遇到的最多的异常就是NullPointException(NPE),空异常的问题很多是不可预见的。一直以来,NullPointException空指针异常在开发中是最低级也最致命的问题。我们往往需要进行各种null的判断以试图去避免NPE的发生。Kotlin基于这个问题,提出了一个空安全的概念,即每个属性默认不可为null。
如,这里我们使用Java语言来获取一个字符串b的长度,我们通常这样写:
if (b != null && b.length > 0) {
    System.out.print("字符串长度为:" + b.length);
} else {
    System.out.print("空字符串");
}
如果我们使用kotlin语言,我们可以这样:
    b?.length
扩展函数
可以为任何类添加新函数。在项目中,替代已有的典型实用程序类可使代码更具可读性。例如,为fragment添加新函数,用于显示toast:
fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(getActivity(), message, duration).show()
}
定义好后,现在可以这样做:
fragment.toast("Hello world!")
Lambdas表达式
在写View事件的时候,我们通常会监听每一个View的操作,如OnClick、OnTouch等。在Java代码中,我们常会这么写:
view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // do Something
    }
});
没有意义而重复的OnClickListener每次都需要new一个,是不是感觉很累赘。如果,使用Kotlin的Lambda表达式,我们就可以这么写:
view.setOnClickListener({ 
    // do Something
})
简化代码的插件
在Android的整体项目开发中,避免不了对一些视图数据做一些处理。通常,我们寻找将一个View都会调用系统的findViewById的方法。Java写法入下:
TextView textView = (TextView) findViewById(R.id.message);
textView.setText("Hello World");
而,如果我们使用了kotlin-android-extensions插件之后,我们就能够在Kotlin代码上更简化的书写此逻辑:
message.setText("Hello World")
Kotlin的特性远远不止上述这几点,这里,我们不再做过多的举例。书写的代码优雅、可读、简便,让开发者将自己的精力聚焦在应用的设计而不是代码本身,真正的将程序员从体力工作者转化成为脑力工作者。也许,在学完所有的Kotlin教程之后,你也能够面向传统累赘的开发语言,大声的说:“人生苦短,我用Kotlin”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯甜酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值