• 在线客服

  • 扫描二维码
    下载博学谷APP

  • 扫描二维码
    关注博学谷微信公众号

  • 意见反馈

原创 Kotlin是什么 干货讲解

发布时间:2019-07-29 19:10:48 浏览 8545 来源:博学谷资讯 作者:照照

    Kotlin是什么?本文就这个问题,从Kotlin的定义、应用领域、特点、发展趋势、优势以及函数六个方面。全面为大家讲解Kotlin。

     

    Kotlin是什么

     

    一、Kotlin是什么

     

    Kotlin 是一个用于现代多平台应用的静态编程语言 ,由 JetBrains 开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。Kotlin已正式成为Android官方支持开发语言。

     

    二、Kotlin的就应用领域

     

    学完kotlin能成为全栈工程师。

     

    不仅能编写web前端,web后端,Android移动端,还可以编写server脚本,桌面游戏。

     

    三、Kotlin的特点

     

    静态强类型性语言

     

    运行在JVM上

     

    可编译成JavaScript代码

     

    与Java100%兼容

     

    四、Kotlin的发展趋势

     

    2011年进行开源,2017年在github上star数量已经达到17k。目前 花瓣、豆瓣 APP 以及 JetBrains 全线编辑器都在使用 Kotlin,国内很多初创公司也都

     

    在使用 Kotlin(尤其是应用于 Android 开发)

     

    五、Kotlin的优势

     

    全面支持Lambda表达式

     

    数据类(Data classes)

     

    函数字面量和内联函数(Function literals & inline functions)

     

    函数扩展(Extension functions)

     

    空安全(Null safety)

     

    智能转换(Smart casts)

     

    字符串模版(String templates)

     

    主构造函数(Primary constructors)

     

    类委托(Class delegation)

     

    类型推断(Type inference)

     

    单例(Singletons)

     

    声明点变量(Declaration-site variance)

     

    区间表达式(Range expressions)

     

    六、Kotlin中的函数

     

    内联函数

     

    Android开发中,打印信息一般我们会用到Log类,Log中每个方法我们都要传两个参数,第一个tag参数在Kotlin中我们可以像下面封装一下,这样就只需要传一个参数。

     

    inline fun <reified T> T.debug(log:Any)

     

    {

     

    Log.d(T::class.simpleName, log.toString())

     

    }

     

    它可以通过泛型参数 T 来获取到T的具体类型,并且拿到它的类名——当然,如果你愿意,你甚至可以调用它的构造方法来构造一个对象出来——为什么 Kotlin 可以做到呢?因为这段代码是 inline 的,最终编译时是要编译到调用它的代码块中,这时候T的类型实际上是确定的,因而 Kotlin 通过 reified 这个关键字告诉编译器,T 这个参数可不只是个摆设,我要把它当实际类型来用。

     

    在高阶函数前增加inline注解可以指定函数內联,inline 标记即影响函数本身也影响传递进来的 lambda 函数:所有的这些都将被关联到调用点。内联可能会引起生成代码增长,但我们可以合理的解决它(不要内联太大的函数)。也可以使用noinline来指定某些函数不进行內联。

     

    inline fun foo(inlined: () -> Uint, @noinline notInlined: () -> Unit) {

     

    //...

     

    }

     

    可以内联的 lambda 表达式只能在内联函数内部调用或者作为可内联的参数传递, 但是 noinline 的可以以任何我们喜欢的方式操作:存储在字段中、传送它等等。

     

    单表达式函数

     

    如果一个函数的函数体只有一个表达式,函数体可以直接写在 “=”之后,也就是这样:

     

    fun double(x: Int): Int = x * 2

     

    fun eval(expr: Expr): Double = when(expr) {

     

    is Expr.Const -> expr.number

     

    is Expr.Sum -> eval(expr.e1) + eval(expr.e2)

     

    Expr.NotANumber -> Double.NaN

     

    // the `else` clause is not required because we've covered all the cases

     

    }

     

    这里使用了when关键字,类似于java中的switch,但比之更强大。

     

    匿名函数

     

    /**

     

    * 匿名函数,没有名字,其他语法和常规函数类似

     

    *

     

    * 声明一个匿名函数,这里用表达式来表示函数体,也就是单表达式函数

     

    */

     

    var test3= fun(x:Int,y:Int):Int=x+y

     

    /**

     

    * 声明一个匿名函数,这里用代码块来表示函数体

     

    */

     

    var test4= fun(x:Int,y:Int):Int {

     

    return x+y

     

    }

     

    /**

     

    * 声明一个匿名函数,当返回值类型可以推断出,可以省略

     

    */

     

    var test5= fun(x:Int,y:Int)=x+y

     

    fun main(args: Array<String>) {

     

    println(test3(1,2))

     

    println(test4(1,2))

     

    println(test5(1,2))

     

    }

     

    高阶函数与lambda表达式

     

    高阶函数就是可以接受函数作为参数或返回一个函数的函数。比如 lock() 就是一个很好的例子

     

    fun lock<T>(lock: Lock, body: () -> T ) : T {

     

    lock.lock()

     

    try {

     

    return body()

     

    }

     

    finally {

     

    lock.unlock()

     

    }

     

    }

     

    以上就是Kotlin的全部讲解内容,相信大家都已经明白了“Kotlin是什么”,还有不明白的同学可以上博学谷官网在线学习。

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

上一篇: 电脑编程入门自学规划 电脑编程如何学习 下一篇: APP开发一个人能完成吗?需要哪些流程?

相关推荐 更多

热门文章

  • 前端是什么
  • 前端开发的工作职责
  • 前端开发需要会什么?先掌握这三大核心关键技术
  • 前端开发的工作方向有哪些?
  • 简历加分-4步写出HR想要的简历
  • 程序员如何突击面试?两大招带你拿下面试官
  • 程序员面试技巧
  • 架构师的厉害之处竟然是这……
  • 架构师书籍推荐
  • 懂了这些,才能成为架构师
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码