Kotlin语言框架

开源公司:JetBrains

作品详情

1基础定义

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

()

pritl(")

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

需要注意,Kotli没有关键字ew。

变量与常量

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

val a: It =  
val b =  

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

 x =  
x =  

函数

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

(): It 
{
   a + b
}

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

Mai进入点

Kotli的mai函数是不依赖类别的,所以mai函数是一个top-level函数。支持Perl和Uix/Liuxshell script的字符串插值(Strig iterpolatio),同样也支持类型推定。


 
{
 val scope = 
 pritl()
}

函数扩展

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

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

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

 MyStrigExtesios
  fu Strig.Char(): Char = get(legth - )
  >>> pritl(.Char())

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


   fu Poit.plus(other: Poit): Poit 
  {
     Poit(x + other.x, y + other.y)
  }
  >>> val p1 = Poit(, )
  >>> val p2 = Poit(, )
  >>> pritl(p1 + p2)
  Poit(x=, y=)

getter和setter

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

解包引数

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

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

函数嵌套

Kotli支持函数嵌套(ested fuctios),允许函数内再定义函数,类似JavaScript、C#与Pytho语言。

(
    val id:   It, 
    val ame:  Strig, 
    val address: Strig) 
  { 
     
    {
       
      {
         (value.isEmpty()) 
        {
           IllegalArgumetExceptio(
           )
        }
      }
      validate(user, user.ame, ) 
      validate(user, user.address, )
      
    }
  }

解构声明

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

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

 ((idex, elemet)  collectio.withIdex()) 
  { 
     pritl(: ")
  }

抽象类别

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

 No eed  the ope keyword here, its already ope  
  abstract   
  {
     This virtual fuctio  already ope    well
    abstract fu aimate()
    ope fu stopAimatig() { }
    fu aimateTwice() { }
  }

类别属性

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




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

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

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

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

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

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

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

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

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

例如:


   ope   :  
  {
    
      fu () = pritl() 
    
     fu () = pritl()
  }

空变量及其运算

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

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

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

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

fu sayHello(maybe: ?, : It) 
{
  
  val ame:  = maybe ?: 
  pritl()
}

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

/ returs  ...
  - foo() returs ,
  -   foo()  o-, but bar() returs ,
  -   foo()  bar() are o-, but baz() returs .
  vice versa,  value  o-   oly  foo(), bar()  baz() are o-
 foo()?.bar()?.baz()

2演绎过程

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

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

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

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

3设计目标

创建一种兼容Java的语言

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

让它比Java更简洁,通过支持variable type iferece,higher-order fuctios (closures),extesio fuctios,mixis ad first-class delegatio等实现。

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

4开放源码

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

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

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

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

5文化特色

吉祥物

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

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

功能介绍

Kotlin(科特林)是一由JetBrains开发可用于现代多平台应用的静态编程语言。Kotlin可以编译成Java字节码和JavaScript与Java代码相互运作,并可以重复使用如Java集合框架等的现有Java引用的函数。Kotlin已正式成为Android官方支持开发语言。2021年7月10日,编程语言Kotlin启用新Logo,采用渐变色。[1]

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
案例
它可以:统一调整速率、分辨率、转场等,一键批量生成各类短视频。 它可以:带有众多短视频处理工具,源码呈现,任意修改。 它可以:使用AI大模型技术,批量生成短视频不是梦。 它可以:统一调整速率、分辨率、转场等,一键批量生成各类短视频。 它可以:带有众多短视频处理工具,源码呈现,任意修改。 它可以:使用AI大模型技术,批量生成短视频不是梦。 合作方式多样: 1.客户提供短视频库,代为生成众多短视频 2.客户直接获得源码,随意修改,任意生成,收获良多。
980AI一键批量生成短视频
1.WPS 支持打开EPUB文件 2.WPS 多语言适配 3.WPS 安装包大小,启动速度,性能与Bug优化 4.WPS 小工具矩阵 AdSdk实现 WPS office国际版支持登录、云存储、有各种模板,软件能够为用户带来清爽、便携、高效的办公使用体验,能够更好的满足用户的使用需求。该软件完美的适配了安卓手机用户,拥有独有的手机阅读模式、清晰的字体、流畅的翻页等功能,还完美的支持Word、Excel、PPT和PDF等多达51种文档格式,并且支持云空间存储,能够让您在任何设备上查看和编辑,还有海量精美的模板和高级的功能可供用户使用,当然软件不仅仅只是适用于日常的办公,还适用于学生党,是一款非常
概述 SikkerBox 是一款免费的综合性安全和网络工具应用,旨在为用户提供一站式的安全工具和网络诊断服务。 Sikker源于挪威语,意为安全,Box代表工具箱。 SikkerBox 具有跨平台兼容性,将两因素认证(2FA)管理与强大的网络诊断工具套件结合在一起。 SikkerBox 采用现代、清晰的UI界面布局和指示,旨在打造成手机上的网络瑞士军刀,为您的数字生活提供一个功能强大且用户友好的安全层解决方案。 主要功能 两因素认证(2FA) 高度安全可靠的双因素身份验证 (2FA),支持包括github、gitlab、google、PayPal等在内的超过 1000 多种提供双因素身
840APPflutterios
面向市场悠闲游戏开发,技术使用熟练,开发过程详细,功能齐全。主页面实现 (MainActivity):媒体播放器:背景音乐控制,响应式UI:自适应布局,页面导航:启动游戏页面。游戏页面实现 (GameActivity):自定义棋盘视图:BoardView,游戏状态机管理,触摸事件处理,胜负判定算法。本五子棋游戏应用采用专业级的Android架构设计,具有以下核心优势: 分层架构设计:清晰的表示层-业务层-数据层分离 高性能实现:优化的棋盘渲染和游戏逻辑处理 模块化组件:独立封装棋盘视图、游戏状态机等核心组件 专业UI/UX:符合Material Design规范的界面设计 健壮性保障
一、项目背景:当千年茶韵遇见数字时代​​ 中国是茶的故乡,茶文化更是中华文明的精神符号之一。2022年11月,“中国传统制茶技艺及其相关习俗”成功列入联合国教科文组织人类非物质文化遗产代表作名录,标志着中国茶文化从“民族记忆”迈向“世界遗产”的新高度。然而,在全球化与数字化交织的当下,非遗茶叶文化面临三大挑战: ​​地域局限​​:众多非遗名茶(如西湖龙井、武夷岩茶、白族三道茶、藏族酥油茶等)因地域分布分散,传播半径受限,年轻群体难以触达; ​​传承断层​​:传统制茶技艺依赖“口传心授”,年轻一代对技艺细节、文化内涵的认知逐渐模糊; ​​活态不足​​:非遗茶文化多以静态展示(如博物馆、展会)呈
1280APPios
当前共420个项目

评论