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 ... 
随机推荐
- nlog学习使用
			最近有不少朋友推荐我用NLog.我以前都是自己写txt的文本输出log,以前别人用log4net的时候看那个配置文件,看得我一阵烦,我比较喜欢约定胜于配置的组件.这次玩了一波NLog,,相当不错.一下 ... 
- C#设计模式:责任链模式
			设计模式是面向对象编程的基础,是用于指导程序设计.在实际项目开发过程中,并不是一味将设计模式进行套用,也不是功能设计时大量引入设计模式.应该根据具体需求和要求应用适合的设计模式.设计模式是一个老话题了 ... 
- 设置ZooKeeper服务器地址列表源码解析及扩展
			设置ZooKeeper服务器地址列表源码解析及扩展 ZooKeeper zooKeeper = new ZooKeeper("192.168.109.130:2181",SESSI ... 
- 一些IO流的知识
			IO流: 输入流:输出流: 字节流:字符流:为了处理文字数据方便而出现的对象. 其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据) 只不过,通过字节流读取了相对应的字节数,没有对这些字节直 ... 
- mvc中DotNetOpenAuth实现了第三方应用访问自己的网站
			以yahoo为例吧,即从yahoo取得用户信息,存到自己的站点,实现了用户信息在一次录入多处共享的功能.以下是在点击了使用yahoo登录本站的链接后执行action:OpenId. ProviderU ... 
- 京东笔试---通过考试(DP)
			题目描述 小明同学要参加一场考试,考试一共有n道题目,小明必须作对至少60%的题目才能通过考试.考试结束后,小明估算出每题作对的概率,p1,p2,...,pn,你能帮他算出他通过考试的概率吗 ... 
- SQLite数据库_实现简单的增删改查
			1.SQLite是一款轻量型的数据库是遵守ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式开发中. 2.Android平台中嵌入了一个关系型数据库SQLite,和其他数据 ... 
- Java计算两个程序运行时间
			一.获取系统当前时间 long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTim ... 
- bzoj 3028: 食物  -- 母函数
			3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MB Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他 ... 
- oracle高效分页查询总结
			本文参考链接:http://blog.sina.com.cn/s/blog_8604ca230100vro9.html 探索查询语句: --分页参数:size = 20 page = 2 --没有or ... 
