Kotlin初探
前几天看到新闻,Google将Kotlin语言作为Android应用开发的一级语言, 与Java并驾齐驱, 这则消息在开发界一下就炸开了锅( 好像平息的很快。。。)! 连Google的亲儿子go语言也没有这种待遇。Kotlin是什么鬼,感觉隐隐约约好像在哪里见过啊,对IDEA新建工程时可以看到。

大名鼎鼎的Java IDE IntelliJ提供商JetBrains开发的,而且是开源的。
看到这里我再也淡定不住了,决定去一探究竟,哥以前学Java可是同时打着J2EE和Android的主意,这下Java在Android平台苗头不太对,得去学习学习Kotlin才能安心。
官网的简单介绍:Kotlin是针对现代对平台应用的静态类型编程语言,100%可以与java™和Android™互操作。Kotlin可以编译成Java字节码在JVM上运行,在安卓设备上运行,也可以编译成Javascript,在浏览器运行,这是要一统江湖的节奏吗?

老规矩,Hello World!跑起来,使用IDEA2016就不用去搭建开发环境了,直接开搞了。
package com.newstart.kotlin
fun main(args: Array<String>) {
print("Hello World!")
}
和Java区别还是有一点大的,mian方法是包级别的,Java是要在类里,参数声明是:参数名:参数类型,简洁了好多。
为什么选择 Kotlin?简约、安全、互操作性、工具友好
- 简约
大大减少样板代码的数量,一行代码搞定POJO包括getters,setter,equals(), hashCode(),toString() 和copy()等方法。(copy类似clone,但是比clone强大)
data class User(var name: String, var age: Int, var sex: String)
fun main(args: Array<String>) {
var user = User("代码如此多娇", 27, "man")
println(user.name)
println(user.age)
println(user.sex)
println(user)
}
fun getUser(): User {
return User("代码如此多娇", 27, "man")
}
是不是比Java代码简洁了好多?支持lambda表达式,过滤list中等于"l"的元素。
fun main(args: Array<String>) {
var list1 = listOf("h", "e", "l", "l", "o")
var list2 = list1.filter { it != "l" }
println(list2)
}
lambda表达式Java8也有就没有什么对比啦!快速简单的构建一个单例,这个就真的是简单粗暴了。
object SingletonDemo {
var username: String = "test"
var pasword: String = "111"
}
使用object声明单例类。
安全
Kotlin对比于Java的一个最大的区别就是它致力于消除空引用所带来的危险。NullPointerException(NPE)应该是开发中遇到的最多的一种运行时异常了。
fun test1(){
var a: String = null//编译错误,默认是不可为null的
var b: String? = null //可以为空
println(b.length) ////编译错误
}
类型自动检测
//如果你在代码中已经判断类型符合了
//Kotlin编译器会自己进行类型转换
fun test2(user: Any) {
if (user is User)
print(user.age)
}
互操作性
使用跑在JVM上的任何现有库,因为有 100% 的兼容性,包括 SAM 支持,看到这个我就放心了。
package com.newstart.kotlin
import org.apache.commons.lang3.StringUtils
fun main(args: Array<String>) {
//val声明不可变变量
val str: String = "a,b,c,d,e"
val array = StringUtils.split(str, ",")
for (s in array) {
print(s)
}
}
工具友好
这个算不算JetBrains的一波强势广告?IDEA最好的Java IDE 没有之一。

其他
带返回值的方法
fun getUser(): User {
return User("代码如此多娇", 27, "man")
}
When
when (map["a"]) {
'1' -> println("1")
'2' -> println("2")
is Char -> println("Char")
!is String -> println("Not a string")
else -> println("Unknown")
}
Map
val map = hashMapOf<String, Char>()
map.put("a", '1')
map.put("b", 'b')
for ((key, value) in map) {
println("key = $key, value = $value")
}
解构声明,将类解构成变量
var user = User("代码如此多娇", 27, "man")
var (name, age, sex) = user
println("$name,$age,$sex")
属性委托-懒加载
class LazySample {
val lazy: String by lazy {
println("computed!")
"my lazy"
}
}
fun main(args: Array<String>) {
val sample = LazySample()
println("lazy = ${sample.lazy}")
println("lazy = ${sample.lazy}")
}
输出
computed!
lazy = my lazy
lazy = my lazy
属性委托-观察,Map属性委托等等等等......
想要更深入的了解可以去他的官网https://try.kotlinlang.org,官网一系列可以在线编写运行的demo和教程,如果你是Android开发者赶紧行动起来吧,Google支持的没有错。搞J2EE的就可以持观望态度了,比如说我。

Kotlin初探的更多相关文章
- Java进化? Kotlin初探与集成Android项目
欢迎Follow我的GitHub, 关注我的CSDN. Kotlin是基于JVM的编程语言, 由JetBrains公司开发, 眼下已经开源. IntelliJ IDEA, PyCharm, Andro ...
- kt 集合
Kotlin初探:Kotlin的集合操作符 2017年11月10日 12:40:03 笨鸟-先飞 阅读数:649 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.c ...
- 掘金 Android 文章精选合集
掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...
- 写给Android开发者的Kotlin入门
写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...
- Kotlin(2): 优雅地扩展类的方法和属性
欢迎Follow我的GitHub, 关注我的CSDN. 个人博客: http://www.wangchenlong.org/, 最新内容. Kotlin由JetBrains公司推出, 是兼容Java的 ...
- Kotlin介绍
Kotlin介绍 转 https://www.jianshu.com/p/d30406daaf25 Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Goo ...
- Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)
作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...
- 用Kotlin实现Android定制视图(KAD 06)
作者:Antonio Leiva 时间:Dec 27, 2016 原文链接:https://antonioleiva.com/custom-views-android-kotlin/ 在我们阅读有关c ...
- Kotlin与Android SDK 集成(KAD 05)
作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Ko ...
随机推荐
- 在程序加载过程中显示ProgressDialog 对话框
private ProgressDialog mProgressDlg = null; @Override protected void onCreate(Bundle savedInstanceSt ...
- python_原始_web框架
创:10_4_2017 修: 什么是web框架? -- 本质上是socket,用户请求来,业务逻辑处理,返回处理结果 -- 包含socket或者不包含socket的框架 什么是wsgi? -- web ...
- javascript原型的意义
prototype属性: 这个属性包含一个对象(以下简称"prototype对象"),所有实例对象需要共享的属性和方法,都放在这个对象里面:那些不需要共享的属性和方法,就放在构造函 ...
- net.sz.framework 框架 登录服务器架构 单服2 万 TPS(QPS)
前言 无论我们做什么系统,95%的系统都离不开注册,登录: 而游戏更加关键,频繁登录,并发登录,导量登录:如果登录承载不起来,那么游戏做的再好,都是徒然,进不去啊: 序言 登录所需要的承载,包含程序和 ...
- php最新微信扫码在线支付接口。ecshop和shopex,shopnc下完美无错
最近为客户的一个在线商城做了一个微信扫码在线支付的接口.跟大家分享一下. 1 首先可以模仿其他的接口,比如支付宝,财付通等的接口,构建模块功能文件和语言文件.2 微信提供2种扫码方式,大家可以根据自己 ...
- 1034. Head of a Gang
One way that the police finds the head of a gang is to check people's phone calls. If there is a pho ...
- 【原创】10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程)
有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc4+Dapper+Dapper扩展+Sqlserver 目前主要实现 ...
- Nodejs进阶:express+session实现简易身份认证
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 文档概览 本文基于express.express-session ...
- 这可能是php世界中最好的日志库——monolog
由于一些历史原因,php中并没有内建的日志接口,故长期以来也没一个功能完备并且应用广泛的日志库.在我的工作生涯中,如果系统需要记录一些应用日志的话,基本上就是封装一个日志类,然后把一些要记录的字段写入 ...
- js里变量的作用域
一.在js中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域.也就是说,如果变量是在某个函数中定义的,那么,它在函数以外的地方是不可见的.但是,如果该变量是定义在if或者for这样的代码块 ...