Kotlin

开源公司:JetBrains

作品详情

中文名
科特林
展开
性质
编程语言
展开
开源协议
Apache2
展开
系统平台
输出Java虚拟机、Java字节码以及JavaScript源代码
展开
文件扩展名
kt、kts
展开
推出时间
2011年7月
展开
语言版本
1.4.30
展开
外文名
Kotlin
展开
开发公司
展开
类型系统
静态类型、类型推论
展开
操作系统
任何支持JVM或是JavaScript的解释器
展开
启发语言
Java、ScalaGroovy、C#、Gosu
展开
发布时间
2016年2月15日
展开

1基础定义

Kotlin很明显受到Java、C#、JavaScript、Scala、Groovy等语言的影响。例如Kotlin可以直接通过

()

println(")

来使用字符串模板,和古老的shell script类似。又如Kotlin中的分号是可选的,这类似JavaScript,而且Groovy、Scala也有同样的能力。Kotlin常量定义关键字是val(不同于变量定义关键字var),表示固定值,这功能来自Scala,Swift也有类似功能。

需要注意,Kotlin没有关键字new。

变量与常量

使用val(全称为value,即(固定的)值)关键字定义常量,定义后其值无法修改

val a: Int =  val b =  

使用var(全称为variable,即变量)关键字定义变量。

 x =  x =  

函数

使用fun关键字定义一个函数。

(): Int {   a + b}

上例定义了一个传入两个Int变量,并返回两数之和的求和函数。

Main进入点

Kotlin的main函数是不依赖类别的,所以main函数是一个top-level函数。支持Perl和Unix/Linuxshell script的字符串插值(String interpolation),同样也支持类型推定。

 { val scope =  println()}

函数扩展

Kotlin与C#、JavaScript类似,能够扩展类别的新功能,而无需继承该类别,或使用像装饰器(decorator)这样的任何类型的设计模式(design pattern)。扩展函数可以称为Kotlin的核心,在标准库里到处充斥着扩展函数。

扩展函数是静态分发的,也就是说,它们不是以接收者类型为准的虚拟函数。这意味着调用的扩展函数是由函数调用所在的表达式的类型来决定的,而不是由表达式运行时求值结果决定的。

在下述例子中,String类别被扩展出一个成员lastChar。

 MyStringExtensions  fun String.Char(): Char = get(length - )  >>> println(.Char())

利用函数扩展,Kotlin也支持运算符重载:

   fun Point.plus(other: Point): Point   {     Point(x + other.x, y + other.y)  }  >>> val p1 = Point(, )  >>> val p2 = Point(, )  >>> println(p1 + p2)  Point(x=, y=)

getter和setter

Kotlin像C#一样支持属性(property)。

解包引数

类似Python, 解包(unpack)指的是对实际参数的解包,只需在前面加一个星号* 即可,如test(*a):

   {     val  = listOf(, *args)    println()  }

函数嵌套

Kotlin支持函数嵌套(nested functions),允许函数内再定义函数,类似JavaScript、C#与Python语言。

(    val id:   Int,     val name:  String,     val address: String)   {          {             {         (value.isEmpty())         {           IllegalArgumentException(           )        }      }      validate(user, user.name, )       validate(user, user.address, )          }  }

解构声明

Kotlin支持解构声明,这与Python的迭代解包相似。

例如, collection object 包含析构式可分离其元素:

 ((index, element)  collection.withIndex())   {      println(: ")  }

抽象类别

抽象类别(Abstract classes)定义抽象或纯虚拟(Pure Virtual)占位函数,需要被继承。抽象类别默认是open的。

 No need  the open keyword here, its already open    abstract     {     This virtual function  already open    well    abstract fun animate()    open fun stopAnimating() { }    fun animateTwice() { }  }

类别属性

Kotlin 提供下列的关键字来限制顶层(top-level)声明,用于控制类别与成员在继承时的可见性(作用域)。它们可用于类别及其成员:

用于类别的成员声明时,含义如下:

public——全局可见。此为默认的类型。

internal——在当前模块中可见。

protected——在当前类别的一级子类中可见,如果子类再被继承,则在下一级子类中不可见。

private——在当前类别中可见。

用于顶层声明时,含义如下:

public——全局可见。此为默认的类型。

internal——在当前模块中可见。

private——在当前文件中可见。

例如:

   open   :    {          fun () = println()          fun () = println()  }

空变量及其运算

Kotlin对可以为空(nullable)的变量和不可以为空(non-nullable)的变量作了区分。所有的可空对象(nullable objects)必须在定义时加上 "?" 后置于类型之后。开发人员遇到nullable objects时要先确认: null-check 须被运行过,才能赋值。可空性是Kotlin类型系统中帮助开发者避免以往Java的NullPointerException错误的特性。

Kotlin 提供空安全(null-safe)运算符给开发人员:

.(Safe navigation operator) 可用于安全访问(safely access) 可能是空对象的函数或属性。如果 object 为空(null), the method 将不被调用,而且表达式必运算(evaluate)为空(null)。

.(Null coalescing operator) 通常称为艾维斯运算符(Elvis operator):

fun sayHello(maybe: ?, : Int) {    val name:  = maybe ?:   println()}

使用安全导引(safe navigation)运算符:

/ returns  ...  - foo() returns ,  -   foo()  non-, but bar() returns ,  -   foo()  bar() are non-, but baz() returns .  vice versa,  value  non-   only  foo(), bar()  baz() are non- foo()?.bar()?.baz()

2演绎过程

2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言,它已被开发一年之久。JetBrains负责人Dmitry Jemerov说,大多数语言没有他们正在寻找的特性,但是Scala除外。但是,他指出Scala的编译时间过慢这一明显缺陷。Kotlin的既定目标之一是像Java一样快速编译。2012年2月,JetBrains以Apache 2许可证开源此项目。

Jetbrains希望这个新语言能够推动IntelliJ IDEA的销售。

Kotlin v1.0于2016年2月15日发布。这被认为是第一个官方稳定版本,并且JetBrains已准备从该版本开始的长期向后兼容性。

在Google I/O2017中,Google宣布在Android上为Kotlin提供最佳支持。

3设计目标

创建一种兼容Java的语言

让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针

让它比Java更简洁,通过支持variable type inference,higher-order functions (closures),extension functions,mixins and first-class delegation等实现。

让它比最成熟的竞争对手Scala语言更加简单。[2]

4开放源码

其基础编译器(他们将其改为kompiler——开创了一系列以K字打头的用语——甚至连 contributors这类词他们也用改成了kontributors)可以被独立出来并嵌入到 Maven、Ant 或 Gradle 工具链中。这使得在 IDE 中开发的代码能够利用已有的机制来构建,从而尽可能的减少了在新环境中使用所受的干预,哪怕与那些没有安装 Kotlin 插件的开发人员一起合作项目也没有问题。

The IntelliJ Kotlin 插件扩展了 Java 编译器使得 Kotlin 代码能够得以编写、编译和调试。除此之外,关于基本的 Java 集合,已经有编写好的帮助函数,可以更顺畅地衔接将在 Java 8 中出现的集合扩展。

有两篇文章对 Kotlin 与 Java 以及 Kotlin 与 Scala 分别进行了比较,对各自特性和异同进行了对比。即便 Scala 可能还是更为强大些,Kotlin 还是尝试着提供比 Java 更好的函数、模式匹配、空指针预防和泛型。该语言同时也支持特征(traits)和模式匹配。

Kotlin 插件在当前版本的 IntelliJ 和 Eclipse 中均已能使用。

5文化特色

吉祥物

2023年4月26日,据JetBrains官方博客消息,编程语言Kotlin迎来新设计的吉祥物,名为Kodee。Kodee是从2021年首次发布的Kotlin吉祥物改版而来,当时的设计受到了用户的批评和反对,因此时隔两年又推出了新设计。

Kodee的造型经过了扁平化改造,颜色也从黑白配色改为黑紫配色,官方号称“创建了一个与Kotlin社区相关的平易近人且有趣的角色”。[3]

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
案例
1. 本方案面向谁,解决了什么问题? 目标用户: ​中小型企业及个体创作者:缺乏专业设计团队,需高效生成营销素材(如电商产品图、短视频)。 ​MCN机构及内容运营团队:需批量生产多平台适配内容,降低人力与时间成本。 ​数据驱动型团队:需通过内容质量分析优化投放策略,提升转化率。 核心痛点: ​内容生产效率低:传统制作依赖人工拍摄、剪辑,耗时长且成本高(如一条视频制作从3天缩短至半天)。 ​多平台分发复杂:各平台格式要求差异大,手动适配效率低且易出错。 ​数据分析滞后:缺乏实时数据看板,难以量化内容效果(如播放量、转化率)。 ​商业化门槛高:专业工具费用高昂(如Adobe Firefly企业版)
470vueUnitySAASAIswift
这是一款智能广告发布系统,包括服务器端和客户端。 我负责客户端的研发。客户端的版本包括两个版本:第一个版本是有htt和Socket进行通信,第二个版本是利用Mqtt进行通信。 客户端的大致功能:实时接收服务器发过来的xml信息或者json信息,然后根据协议进行解析,根据不同指令执行相对应的操作,例如,开机、关机、重启、下载节目文件、播放音视频、播放文本字幕、展示图片、加载网页、播放紧急通知、设置各种终端、上传各种数据等。 项目采用MVC架构;采用Glide+okhttp框架组合;使用DiskLRUCache进行缓存优化;使用线程池优化请求线程管理;自定义UI控件,满足客户端的播放需求;利用反射
是一款保护您隐私的App软件,您的私人隐私管家。 保护您的相册照片、视频。 众所周知在这个隐私几乎透明的时代,每个人恐怕都不希 望自己隐私被人看到,所有我有了做这个软件的想法。 基于开源框架轮子哥的AndroidProject基础上写的这个保护隐私的项目。 您可能会问这个软件是怎么保护隐私的,他的优势在哪里?答:这个软件没有网路权限的功能,没有网络权限、没有网络权限!! 操作说明: 在相册选择界面您可以浏览自己手机的所有照片,可以添加这照片保存在隐私相册中,而这个隐私相册的路径在当前软件的私有内存中,除了本软件,其他任何系统类的 功能都不能访问这些内容,包括您手机系统自己的相册、微信、等等一系
安卓Kotlin 的一款自定义相机 市面上安卓碎片化很严重,不同的手机有不同的相机预览界面,我当初遇到过同一款手机型号都有相同的情况,只是生产批次不同,俩部手机其中一部一开启相机进程就结束,于是我做了个这个自定义相机拍照的类,对于项目来说这就是一个view,不存在不兼容的问题。 小小demo,只为有需要的人解决痛点。
--- 800+品质服务 专业人做专业事 ---猪八戒APP由猪八戒网开发。猪八戒网是中国领先的人才服务交易平台,可为用户提供企业品牌设计、营销策划、软件开发、知识产权、工商财税等800+品质服务,覆盖企业发展各阶段服务需求。平台拥有700万+专业服务机构与人才可供用户选择,一键发布需求,海量人才响应。 --- 服务全程托管 交易安全有保障 ---平台提供全托管式解决方案,从服务需求发起到服务项目结项,平台一条龙监管服务全过程。平台价格透明标准交付,服务全程有保障;同时,资金全程托管,验收后付款,安全又省心。19年来,已有千万企业通过平台解决专业服务需求。 --- 上八戒当能人 大显身手赚大钱
410android外包平台 App
当前共372个项目

评论