实战Kotlin勘误

Kotlin 资源大全

Kotlin主要特征

目标平台

  • 编写服务器端代码(典型的代表是Web应用后端)
  • 创建Android设备上运行的移动应用(Android开发)
  • 其他:可以让Kotlin代码运行在iOS设备上及编译成JavaScript,允许你在浏览器中运行Kotlin代码等

    静态类型

    Kotlin和Java一样是一种静态类型的编程语言。这意味着所有表达式的类型在编译期就已经确定了。与Java不同的是Kotlin不需要你在源代码中显示的声明每个变量的类型。很多情况下,变量类型可以根据上下文来自动判断,编译器这种根据上下文推断变量类型的能力被称作类型推导。

val i = 1  // 这里可以不用像下面那样显示的声明i为Int类型,编译器根据类型推导可以自动推导出i为Int类型
//val i:Int = 1 //这里和上面代码是等效的

静态类型带来的好处:

  • 性能 — 方法调用速度更快,因为不需要在运行时才来判断调用的是哪个方法。
  • 可靠性 — 编译器验证了程序的正确性,因而运行时奔溃的概率更低。
  • 可维护性 — 陌生代码更容易维护,因为你可以看到代码中用到的对象的类型。
  • 工具支持 — 静态类型使IDE能提供可靠的重构、精确的代码补全及其他特性。

函数式和面向对象

函数式编程的核心概念如下:

  • 头等函数  — 把函数当作值使用,可以用变量保存它,把它当作参数传递,或者当作其他函数的返回值。
fun main(args: Array<String>) {
    val a = test03(test())
    //将test04()函数作为run函数的参数传递
    run(::test04)
}

fun test(): Int {
    //定义一个函数,并返回一个Int类型的值
    val a = 1
    return a
}

fun test02(): KFunction0<Int> {
    //将test()函数作为test02()函数的返回值
    return ::test
}

fun test03(i: Int) {
    println("test03 i=$i")
}

fun test04() {
    println("test04")
}

2. 不可变性: 使用不可变对象(用val修饰,相当于Java中的final),这保证了它们的状态在其创建后不能再改变。

3. 无副作用: 使用的是纯函数。此类函数在输入相同时会产生同样的结果,并且不会修改其他对象的状态,也不会和外面的世界交互。

免费并开源

Kotlin是免费和开源的,全面支持主流的IDE和构建系统。

Kotlin的设计哲学

务实

Kotlin没有强制使用某种特定的编程风格和范式。当你开始学习这门语言的时候,可以使用熟悉的来自Java经验的风格。然后,你会渐渐发现更多强大的Kotlin特性,并学习把它们应用到你的代码中,让代码更简洁、更符合语言习惯。很多情况下,IDE会发现那些可以用更简洁的结构来替换的通用代码模式,并给你提供修正这些代码的选择。

简洁

在Kotlin中,我们努力地保证你写的代码都具有实际的意义,而不是仅仅为了满足代码结构的需要。许多标准的Java样板代码,例如getter、setter以及将构造方法的参数赋值给字段的逻辑,在Kotlin中都是隐式的,并不会使你的源代码变得混乱。

安全

作为面向JVM的静态类型语言,Kotlin还保证了应用程序的类型安全。这比使用Java的成本要更低:不需要指定所有的类型声明,因为许多情况下编译器会自动地推断出类型。更重要的一点是,Kotlin努力地从你的程序中消除NullPointerException。Kotlin的类型系统跟踪那些可以或不可以为null的值,并且禁止那些运行时可能导致NullpointerException的操作。这所带来的额外的成本是极小的:把类型标记为可空的只要一个字符,就是在类型尾部加一个问号:

val s: String? = null //可以为null
val s2: String = "" //不可以为null

除此之外,Kotlin还有助于避免的另一种异常类型就是ClassCastException。在Java中,当你把一个对象转换成一种类型,而没有事先检查它是否是正确的类型时,就会发生这个异常。而在Kotlin中,检查和转换被组合成了一次操作:一旦检查过类型,不需要额外的转换(Java中还需要强制转换)就能直接引用属于这个类型的成员。

if (value is String) //检查类型
    println(value.toUpperCase()) //调用该类型的方法

互操作性

Kotlin工具也对跨语言项目提供了全面支持。它可以编译任意混合的Java和Kotlin源码,不管它们之间是怎样互相依赖的。IDE的特性也能跨语言工作,允许:

  • 自由地在Java和Kotlin源文件之间切换
  • 调试混合语言的项目,可以在不同语言编写的代码之中单步调试
  • 重构Java方法的时候,Kotlin代码中的对它们的调用也会得到正确的更新,反之亦然

总结

  1. Kotlin是静态类型语言并支持类型推导,允许维护正确性与性能的同时保持源代码的简洁。
  2. Kotlin支持面向对象和函数式两种编程风格,通过头等函数使更高级别的抽象成为可能,通过支持不可变值(val修饰)简化了测试和多线程开发。
  3. 在服务器端应用程序中它工作得很好,全面支持所有现存的Java框架,为常见的任务提供了新工具,如生成HTML和持久化。
  4. 在Android上它也可以工作,这得益于紧凑的运行时、对Android API特殊的编译器支持以及丰富的库,为常见Android开发任务提供了Kotlin友好的函数。
  5. 它是免费和开源的,全面支持主流的IDE和构建系统。
  6. Kotlin是务实的、安全的、简洁的,与Java可互操作,意味着它专注于使用已经证明过的解决方案处理常见任务,防止常见的像NullPointerException这样的错误,支持紧凑和易读的代码,以及提供与Java无限制的集成。

    ---恢复内容结束---

最新文章

  1. plist文件、NSUserDefault 对文件进行存储的类、json格式解析
  2. .net WebClient发送请求实例:
  3. Cordova for iOS[ PhoneGap]
  4. 学习之路三十九:新手学习 - Windows API
  5. JS 瀑布流布局
  6. hostapd源代码分析(二):hostapd的工作机制
  7. tableView中的“点击加载更多”点击不到
  8. android开发之路01
  9. Floyd 算法 打印路径模板
  10. ajax 调用后台接口示例
  11. Linux 互斥锁的实现原理(pthread_mutex_t)
  12. Flink升级到1.4版本遇到的坑
  13. (NO.00001)iOS游戏SpeedBoy Lite成形记(二)
  14. 在Windows上安装配置MongoDB
  15. 解决SSH远程执行命令找不到环境变量的问题
  16. python 二叉树实现带括号的四则运算
  17. SQL 数据开发(经典)转贴
  18. UI行业发展预测 &amp; 系列规划的调整
  19. java-启动和关闭.exe程序
  20. MySQL数据库一个字段对应多个值得模糊查询和多个字段对应一个模糊查询

热门文章

  1. unity 四叉树管理场景
  2. 02.Mybatis的动态代理方式实现增删改查
  3. Zookeeper的命令行操作(三)
  4. 使用python画3D线条
  5. struts的上传下载
  6. Opengl_入门学习分享和记录_01_Graphics Pipeline(图形渲染管线)
  7. Flutter学习笔记(18)--Drawer抽屉组件
  8. [WPF自定义控件库] 给WPF一个HyperlinkButton
  9. 终于跑通分布式事务框架tcc-transaction的示例项目
  10. GCN和GCN在文本分类中应用