在2017和2018其实已经对Kotlin的基础语法进行了一些学习,但是!!如今已经是2019年,中间间断时间已经很长了,所以准备接下来从0再次出发深入系统完整的来审视一下该语言,毕境如今它的地位是越来越重要的,公司商用项目用Kotlin也越来越流行的,所以学好它是势在必行。

初识Kotlin:

首先还是上Kotlin的官网先对它有个大概的认识:

先来看一下为啥要学习Kotlin的官方说明,其实也就是看一下它的优势:

先来看第一个“Concise”特点,直接感受一下官方针对这个特点的代码说明:

Concise

Create a POJO with getters, setters, equals()hashCode()toString() and copy() in a single line:

data class Customer(val name: String, val email: String, val company: String)

【说明】:对于我们平常编写的Java实体对象,通常都会有getters,setters,equals(),hashcode(),toString(),通过自带的IDE工具生成,代码比较多,但是!!在Kotlin里面对于这样的常规代码一句话就可以搞定了,会自动为我们生成这些需要的代码,简洁么?

Or filter a list using a lambda expression:

val positiveNumbers = list.filter { it > 0 }

【说明】:利用Lambda表达式来从集合中来过滤元素,当然Java8中也有Lambda,但是相比之下Kotlin的更加的简洁。

Want a singleton? Create an object:

object ThisIsASingleton {
val companyName: String = "JetBrains"
}

【说明】:对于Java中单例的编写,通常都会有一个私有方法,然后再对外暴露一个getInstance()方法,比较繁锁,而在Kotlin中,爽!!

接着来看“Safe”,也就是该语言用起来比较安全:

下面具体来看一下安全体现在哪?

Get rid of those pesky NullPointerExceptions, you know, The Billion Dollar Mistake

var output: String
output = null // Compilation error【看到没,如果是用var声明的变量,被赋值为null的语会直接编译错误,将错误避免出现在生产环境中】

Kotlin protects you from mistakenly operating on nullable types

val name: String? = null    // Nullable type
println(name.length()) // Compilation error【也是像name有可能为null,所以这句话也是直接在编译期间就标志出来错误了,而不是在运行才能知识】

And if you check a type is right, the compiler will auto-cast it for you

fun calculateTotal(obj: Any) {
if (obj is Invoice)
obj.calculateTotal()
}

继续看第三个特点:“Interoperable互操作”:

具体表现:

Use any existing library on the JVM, as there’s 100% compatibility, including SAM support.【对于JVM已经存在的库都是100%兼容的】

import io.reactivex.Flowable
import io.reactivex.schedulers.Schedulers Flowable
.fromCallable {
Thread.sleep(1000) // imitate expensive computation
"Done"
}
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.single())
.subscribe(::println, Throwable::printStackTrace)

Target either the JVM or JavaScript. Write code in Kotlin and decide where you want to deploy to

import kotlin.browser.window

fun onLoad() {
window.document.body!!.innerHTML += "<br/>Hello, Kotlin!"
}

最后一个就是工作的代码提示做得比较好,这个了解下既可:

另外官网对有很好的学习指南,可以上这来自行学习:

另外开方工具我们采用IntelliJ IDEA,Android Studio就是用的它,而自己学Kotlin的目的就是为了写Android程序,所以。。官网也介绍了其它的开发工具:

好!对于Kotlin官方的了解先到这,下面则先编写一个非常简单入门的示例来直观的感受一下Kotlin的语言魅力。

编写入门示例:

首先打开IntelliJ IDEA,如下:

然后新建一个工程:

直接点完成我们的第一个Kotlin就创建好了:

其中在扩展库中除了有JDK之外,还多了一个kotlin相关的包,如下:

好,工程结构比较简单,接下来则新建一个kotlin的文件,如下:

接下来写个能运行的HelloWorld,具体程序的含义先不用管:

咋一看,跟我们熟悉的Java相比,貌似没有class了,而且System.out.println()也木有了,其实是有的,不过是在未来深入学习时才能知晓,先深究这么多。此外还有一有一个直观的区别,就是编写一行语句时后面没有“;”号了。

好,接着再来改一下,来遍历一下集合中的元素,咋写呢?

其中for循环的变量都不需要声明变量类型了,好简洁,这是因为该类型是可以推断出来的,很明显集合元素是Sring类型嘛。好,以前我们在JDK8中学习过Lambda表达式,所以还可以改用这种方式来遍历,如下:

其中构造Consumer的方式好奇怪,跟Java还是不太一样的,之后会详细学习,对于Lambda表达式还可以用方法引用的方式,所以程序可以进一步改造之:

HelloWorld这块就编写到这,里面有很多的疑问,木关系,未来会深挖,反正给人一个直观的认识就是感觉写Kotlin比写Java代码要简洁。

Kotlin重新学习及入门示例的更多相关文章

  1. 【Netty源码学习】入门示例

    Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.        也就是说,Netty ...

  2. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  3. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  4. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  5. Velocity魔法堂系列一:入门示例

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  6. Linq to NHibernate入门示例

    Linq to NHibernate入门示例 NHibernate相关: 09-08-25连贯NHibernate正式发布1.0候选版 09-08-17NHibernate中一对一关联的延迟加载 09 ...

  7. HTC脚本介绍和入门示例

    一.简介 HTC脚本全称是Html Companent即html组件,个人认为它是为了在开发动态HTML中实现代码重用和页面共享目的,主要是把“行为”作为组件封装,可以在很大程度上简化DHTML的开发 ...

  8. Velocity魔法堂系列一:入门示例(转)

    Velocity魔法堂系列一:入门示例 一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本 ...

  9. Kotlin协程第一个示例剖析及Kotlin线程使用技巧

    Kotlin协程第一个示例剖析: 上一次https://www.cnblogs.com/webor2006/p/11712521.html已经对Kotlin中的协程有了理论化的了解了,这次则用代码来直 ...

随机推荐

  1. iOS-打印控件

    20.UIPrintFormatterUIPrintFormatter时打印格式化的抽象基类:展示了传统的可打印的内容对象可以跨页边界.由于打印格式化,打印系统,可以自动打印与打印格式化的内容相关联的 ...

  2. linux 文件描述符表 打开文件表 inode vnode

      在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数.Linux中规定每个进程能最多能同时使用NR_OPEN个文件 ...

  3. LeetCode 404. 左叶子之和(Sum of Left Leaves)

    404. 左叶子之和 404. Sum of Left Leaves LeetCode404. Sum of Left Leaves 题目描述 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 ...

  4. [转帖]ARM发布Ethos-N57/N73 NPU、Mali-G57 Valhall GPU和Mali-D37 DPU

    ARM发布Ethos-N57/N73 NPU.Mali-G57 Valhall GPU和Mali-D37 DPU https://www.cnbeta.com/articles/tech/902417 ...

  5. 处理Oracle 监听文件listener.log

       如果连接时候变得较慢 查看Oracle日志记录,可能是因为此文件太大,超过2G, 需要定期清理,(如果多用户,记得用root,可能没权限) 查看listener.log? find / -nam ...

  6. Web基础和servlet基础

    TomCat的目录结构 Bin:脚本目录(存放启动.关闭这些命令) Conf:存放配置文件的目录 Lib:存放jar包 Logs: 存放日志文件 Temp: 临时文件 Webapps: 项目发布目录 ...

  7. php数组指针函数

    数组指针函数有reset(),prev(),current(),next(),end(),key(),each() 其中reset(),prev(),current(),next(),end(),都是 ...

  8. 08 IO流(五)——文件字符流FileWriter/FileReader

    对比文件字节流的优势 对于文本文件的数据传输,使用文件字符流,就不用考虑编码转码的问题. 对比文件字节流,在方法上的不同有哪些 文件字符流有append方法: Writer append(char c ...

  9. 应用编排服务之ELK技术栈示例模板详解

    日志对互联网应用的运维尤为重要,它可以帮助我们了解服务的运行状态.了解数据流量来源甚至可以帮助我们分析用户的行为等.当进行故障排查时,我们希望能够快速的进行日志查询和过滤,以便精准的定位并解决问题. ...

  10. springcloud 1.5 与 springcloud 2.0 配置区别

    eureka配置区别: 1.5:${spring.cloud.client.ipAddress}:${server.port} 2.0:${spring.cloud.client.ip-address ...