在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
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是什么”,还有不明白的同学可以上博学谷官网在线学习。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Vue实例分析 学习干货
存放数据的data是vue实例的对象,且data的数据变化也会被Vue框架检测到,自动更新到html上。本文是一篇实实在在的学习干货,将从实例化Vue、el参数和定义数据对象三方面分析Vue实例。
6362
2019-07-31 18:42:01
五个常用的Bash历史记录操作方式
众所周知,Bash历史记录里有许多快捷方式的记录,让人眼花缭乱。其实这些快捷方式使用起来,可以极大的提高我们学习和工作的效率。如果大家觉得这些方式很难记,可以循序渐进,每天只学一点内容,这样就能轻松掌握。下面小编将选五个最常用到的Bash历史记录操作方式为大家介绍。
5992
2019-11-08 20:01:38
2019年流行的DevOps工具推荐
对于还是DevOps的新手来说,“2019年流行的DevOps工具有哪些”无疑是第一位要解决的问题。众所周知,DevOps不仅可以看成一种技术或工具,还是一种强调不同硬件和计算机协同工作的文化。DevOps可以帮助团队从整个编程中获益,因此掌握一些好用的DevOps工具显得格外有必要。本文我们将向大家推荐八款DevOps工具。
7049
2019-12-05 13:02:24
安卓被曝的严重漏洞是什么?
相信涉及用户隐私的网络安全问题,一直都是大家关注的焦点。近来,安卓被爆存在严重漏洞。那么,安卓被曝的严重漏洞到底是什么呢?原来,在安卓系统的相机App中,以色列的一家安全公司发现恶意软件可以通过存储访问的权限,调用用户的摄像头和麦克风。这一消息的发布,可谓是一石激起千层浪,要知道如果是真的这将对数亿用户都造成影响。事实果真如此吗?让我们一起来看看最新的事件详情。
6351
2019-11-21 18:03:08
迎复工潮 办公室内口罩戴多长时间?多久更换一次?
口罩佩戴的时间要适宜。医用无纺布口罩持续应用6~8小时,遇紧急情况应及时更换:呼吸困难,口罩有破损或毁坏,口罩与面部无法密合,口罩受污染,染有血渍或飞沫等异物时,曾使用于隔离病房或病患接触,有异味需要及时更换
9287
2020-02-24 15:32:34
