共有 1 人关注 标签:Kotlin,共有 54 篇文章

...
基于 JVM 的 Kotlin 为什么可以提供如此多特性? 【已翻译】

介绍 到底什么才是 “JVM 语言”?能在 JVM 上运行的语言难道不就应该是只有 Java 才对吗? Kotlin 提供了诸多 Java 不支持的特性,比如 函数类型(function type)、扩展函数(extension function)和数据类(data class)。这些都是如何办到的?我仔细研究了一下 Kotlin 实现它们的方式,同时也对 “JVM 语言” 这个概念有了更深...

计算机/ @捏造的信仰, @边城, @Render, @lijian, @CY2
...
并发编程: Java Futures 与 Kotlin 协程 【已翻译】

很久以前,为了在 Java 中运行并行代码,人们必须手动启动新线程。这不仅仅写起来困难,还很容易产生难以查找的缺陷。测试、阅读以及维护这种代码也毫不轻松。那之后,随着振奋人心的多核时代到来,Java API 产生不小的改进,使并发编程变得容易起来。同时,其它 JVM 语言也各自发挥,帮助开发者编写并发代码。本文中我会对 Java 和 Kotln 实现并发编程进行比较。 为了不偏离重心,为了代...

计算机/ @边城, @捏造的信仰
...
在 JavaScript 中调用 Kotlin 方法 【已翻译】

Kotlin 编译器生成正常的 JavaScript 类,可以在 JavaScript 代码中自由地使用的函数和属性 。不过,你应该记住一些微妙的事情。 用独立的 JavaScript 隔离声明 为了防止损坏全局对象,Kotlin 创建一个包含当前模块中所有 Kotlin 声明的对象 。所以如果你把模块命名为 ,那么所有的声明都可以通过  对象在 JavaScript 中可用。例如: 可以在...

计算机/ @CY2
...
在 Kotlin 语言中调用 JavaScript 方法 【已翻译】

Kotlin 已被设计为能够与 Java 平台轻松互操作。它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java 类。但是,JavaScript 是一种动态类型语言,这意味着它不会在编译期检查类型。你可以通过动态类型在 Kotlin 中自由地与 JavaScript 交流,但是如果你想要 Kotlin 类型系统的全部威力 ,你可以为 JavaScrip...

计算机/ @CY2
...
在 Java 中调用 Kotlin 语言的方法 【已翻译】

Java 可以轻松调用 Kotlin 代码。 属性 Kotlin 属性会编译成以下 Java 元素: 一个 getter 方法,名称通过加前缀  算出; 一个 setter 方法,名称通过加前缀  算出(只适用于  属性); 一个私有字段,与属性名称相同(仅适用于具有幕后字段的属性)。 例如, 编译成以下 Java 声明: 如果属性的名称以  开头,则使用不同的名称映射规则:getter 的...

计算机/ @CY2
...
在 Kotlin 中调用 Java 方法 【已翻译】

Kotlin 在设计时就考虑了 Java 互操作性。可以从 Kotlin 中自然地调用现存的 Java 代码,并且在 Java 代码中也可以很顺利地调用 Kotlin 代码。在本节中我们会介绍从 Kotlin 中调用 Java 代码的一些细节。 几乎所有 Java 代码都可以使用而没有任何问题 Getter 和 Setter 遵循 Java 约定的 getter 和 setter 的方法(名...

计算机/ @CY2
...
Kotlin 的兼容性描述 【已翻译】

本页介绍 Kotlin 不同版本以及子系统的兼容性保证。 兼容性词汇表 兼容性意味着回答这个问题:对于给定的两个版本的 Kotlin(例如,1.2 和 1.1.5),为一个版本编写的代码可以与另一个版本一起使用吗?下面的列表解释了不同版本对的兼容模式。请注意,如果版本号较小(即使发布时间晚于版本号较大的版本)那么版本较旧。对于“旧版本”我们使用 OV,对于“新版本”使用 NV。 C——完全兼...

计算机/ @CY2
...
Kotlin 类型别名(从 1.1 版本开始) 【已翻译】

类型别名为现有类型提供替代名称。 如果类型名称太长,你可以另外引入较短的名称,并使用新的名称替代原类型名。 它有助于缩短较长的泛型类型。 例如,通常缩减集合类型是很有吸引力的: 你可以为函数类型提供另外的别名: 你可以为内部类和嵌套类创建新名称: 类型别名不会引入新类型。 它们等效于相应的底层类型。 当你在代码中添加  并使用  时,Kotlin 编译器总是把它扩展为 。 因此,当你需要泛型...

计算机/ @CY2
...
Kotlin 类型安全的构建器 【已翻译】

构建器(builder)的概念在 Groovy 社区中非常热门。 构建器允许以半声明(semi-declarative)的方式定义数据。构建器很适合用来生成 XML、 布局 UI 组件、 描述 3D 场景以及其他更多功能…… 对于很多情况下,Kotlin 允许检查类型的构建器,这使得它们比 Groovy 自身的动态类型实现更具吸引力。 对于其余的情况,Kotlin 支持动态类型构建器。 一个...

计算机/ @CY2
...
Kotlin 的反射 【已翻译】

反射是这样的一组语言和库功能,它允许在运行时自省你的程序的结构。 Kotlin 让语言中的函数和属性做为一等公民、并对其自省(即在运行时获悉 一个名称或者一个属性或函数的类型)与简单地使用函数式或响应式风格紧密相关。 在 Java 平台上,使用反射功能所需的运行时组件作为单独的 JAR 文件()分发。这样做是为了减少不使用反射功能的应用程序所需的 运行时库的大小。如果你需要使用反射,请确保该...

计算机/ @CY2
...
Kotlin 的注解类 【已翻译】

注解声明 注解是将元数据附加到代码的方法。要声明注解,请将 annotation 修饰符放在类的前面: 注解的附加属性可以通过用元注解标注注解类来指定:  指定可以用 该注解标注的元素的可能的类型(类、函数、属性、表达式等);  指定该注解是否 存储在编译后的 class 文件中,以及它在运行时能否通过反射可见 (默认都是 true);  允许 在单个元素上多次使用相同的该注解;  指定 该...

计算机/ @CY2
...
Kotlin 的异常处理 【已翻译】

异常类 Kotlin 中所有异常类都是  类的子孙类。 每个异常都有消息、堆栈回溯信息和可选的原因。 使用 throw-表达式来抛出异常。 使用 try-表达式来捕获异常。 可以有零到多个 catch 块。finally 块可以省略。 但是 catch 和 finally 块至少应该存在一个。 Try 是一个表达式 try 是一个表达式,即它可以有一个返回值。 try-表达式的返回值是 tr...

计算机/ @CY2
...
Kotlin 的空值安全性 【已翻译】

可空类型与非空类型 Kotlin 的类型系统旨在消除来自代码空引用的危险,也称为《十亿美元的错误》。 许多编程语言(包括 Java)中最常见的陷阱之一是访问空引用的成员,导致空引用异常。在 Java 中, 这等同于  或简称 。 Kotlin 的类型系统旨在从我们的代码中消除 。NPE 的唯一可能的原因可能是 显式调用  使用了下文描述的  操作符 外部 Java 代码导致的 对于初始化,有...

计算机/ @CY2
...
Kotlin 的操作符重载 【已翻译】

Kotlin 允许我们为自己的类型提供预定义的一组操作符的实现。这些操作符具有固定的符号表示 (如  或 )和固定的优先级。为实现这样的操作符,我们为相应的类型(即二元操作符左侧的类型和一元操作符的参数类型)提供了一个固定名字的成员函数 或扩展函数。 重载操作符的函数需要用  修饰符标记。 另外,我们描述为不同操作符规范操作符重载的约定。 一元操作 一元前缀操作符 表达式 翻译为 这个表是说...

计算机/ @CY2
...
Kotlin 的相等性 【已翻译】

Kotlin 中有两种类型的相等性: 引用相等(两个引用指向同一对象) 结构相等(用  检查) 引用相等 引用相等由 (以及其否定形式 )操作判断。 当且仅当  和  指向同一个对象时求值为 true。 结构相等 结构相等由 (以及其否定形式 )操作判断。按照惯例,像  这样的表达式会翻译成 也就是说如果  不是  则调用  函数,否则(即  是 )检查 b 是否与  引用相等。 请注意,当...

计算机/ @CY2
...
为什么 Kotlin 会是我使用的下一款编程语言 【已翻译】

一款你从来没听说过的语言 Kotlin 是一款新的编程语言,来自 JetBrains,世界上最好的 IDE 制造商。在经过大量搜索之后,我把它作为可能会在未来 5-10 年使用的一款编程语言。 我喜欢 Kotlin,同时认为它是一个非常成功的项目。有人看到我在开源工作中使用它,便要求我写一些关于它的东西,所以在这篇文章中我会解释为什么我认为 Kotlin 好。不过如果你马上使用它,就可能会遇...

计算机/ @边城, @CY2
...
为什么你必须马上用 Kotlin 开发 Android 应用 【已翻译】

Kotlin 是一个用于 JVM、Android 以及浏览器平台上的静态类型编程语言。 为什么要用 Kotlin 开发 Android 应用? 简洁 : 可大大的减少编码工作量 安全 : 避免一些诸如空指针异常的问题 功能丰富 : 可构建服务端应用、Android 应用,以前在浏览器上执行的前端代码 互操作性 : 可以 100% 利用已有的 JVM 框架,和 Java 具有 100% 的互操...

计算机/ @CY2
...
开发 Basecamp 客户端时我最喜欢的几个 Kotlin 特性 【30%】

Team Android at Basecamp recently passed a fairly big milestone — over 25% of the Basecamp 3 Android app code base now runs on Kotlin! 🎉 Github statistics for the Basecamp 3 Android app as of 5/27...

计算机/ @CY2
...
为什么你必须摒弃 Java ,全面转向 Kotlin 语言? 【已翻译】

是时候开始玩一门现代的编程语言了! 我想告诉你一个名为 Kotlin 的新的编程语言,以及为什么你要开始考虑使用它来开发你的下一个项目。我以前喜欢 Java ,但是去年我发现了 Kotlin ,只要有可能我就会用 Kotlin 来写代码。现在我实在无法想象有什么地方只有 Java 能做,而 Kotlin 不能的。 Kotlin 是 JetBrains 开发的,这是一家开发了一整套 IDEs ...

计算机/ @CY2
...
Kotlin 的 This 表达式 【已翻译】

为了表示当前的 接收者 我们使用 this 表达式: 在类的成员中,this 指的是该类的当前对象 在扩展函数或者带接收者的函数字面值中, this 表示在点左侧传递的 接收者 参数。 如果 this 没有限定符,它指的是最内层的包含它的作用域。要引用其他作用域中的 this,请使用 标签限定符: 限定的 this 要访问来自外部作用域的this(一个类 或者扩展函数, 或者带标签的带接收者...

计算机/ @CY2
...
Kotlin 的类型检查和类型转换 【已翻译】

 和  操作符 我们可以在运行时通过使用  操作符或其否定形式  来检查对象是否符合给定类型: 智能转换 在许多情况下,不需要在 Kotlin 中使用显式转换操作符,因为编译器跟踪 不可变值的 -检查,并在需要时自动插入(安全的)转换: 编译器足够聪明,能够知道如果反向检查导致返回那么该转换是安全的: 或者在  和  的右侧: 这些 智能转换 用于 when-表达式 和 while-循环 也...

计算机/ @CY2
...
Kotlin 的区间或者是范围 【已翻译】

区间表达式由具有操作符形式  的  函数辅以 in 和 !in 形成。 区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例 整型区间(、 、 )有一个额外的特性:它们可以迭代。 编译器负责将其转换为类似 Java 的基于索引的 for-循环而无额外开销。 如果你想倒序迭代数字呢?也很简单。你可以使用标准库中定义的  函数 能否以不等于 1 的任意步...

计算机/ @CY2
...
Kotlin 的集合 【已翻译】

与大多数语言不同,Kotlin 区分可变集合和不可变集合(lists、sets、maps 等)。精确控制什么时候集合可编辑有助于消除 bug 和设计良好的 API。 预先了解一个可变集合的只读 视图 和一个真正的不可变集合之间的区别是很重要的。它们都容易创建,但类型系统不能表达它们的差别,所以由你来跟踪(是否相关)。 Kotlin 的  类型是一个提供只读操作如 、等的接口。和 Java 类...

计算机/ @CY2
...
使用jOOQ在Kotlin里编写SQL的10个不错的例子 【29%】

Kotlin将会是接下来引起巨大反响的东西。当Google宣布在Android上官方正式支持Kotlin时,我们就会更多的感受到这个可爱语言的魅力。 在今天的 #kotlin 公告之后,我们打赌这个标签将会像Swift当时那样爆炸开来。#io17. https://t.co/whOcJlJfWepic.twitter.com/2QKEJIRYVi — Stack Overflow (@Sta...

计算机/ @班纳睿
...
为什么Kotlin比你正在使用的任何愚蠢的语言都要棒? 【已翻译】

先来点噱头,问个问题,互联网如果没有它将会是怎样的? 答案会让你大吃一惊! 但是说实话,我并不是有意要贬低你最喜欢的语言。 毕竟,你选择的语言可能正在慢慢的变得越来越好。 不是吗?如果你的语言还没死,那么它慢慢也会变得越来越好,当然如果它还在维护更新的话。 然而,到底有多慢呢?... 如果你正在使用的是Java语言,那么你应该意识到这一点,那就是当Java成为一个相当好的语言时,你就早已经挂...

计算机/ @班纳睿
...
Kotlin 解构声明 【已翻译】

有时把一个对象 解构 成很多变量会很方便,例如: 这种语法称为 解构声明 。一个解构声明同时创建多个变量。 我们已经声明了两个新变量: 和 ,并且可以独立使用它们: 一个解构声明会被编译成以下代码: 其中的  和  函数是在 Kotlin 中广泛使用的 约定原则 的另一个例子。 (参见像 和 、for-循环等操作符)。 任何表达式都可以出现在解构声明的右侧,只要可以对它调用所需数量的 com...

计算机/ @CY2
...
Kotlin 的协程 【已翻译】

在 Kotlin 1.1 中协程这个特性还处于实验性阶段。详见下文 一些 API 启动长时间运行的操作(例如网络 IO、文件 IO、CPU 或 GPU 密集型任务等),并要求调用者阻塞直到它们完成。协程提供了一种避免阻塞线程并用更廉价、更可控的操作替代线程阻塞的方法:协程挂起。 协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用...

计算机/ @CY2
...
Kotlin 内联函数 【已翻译】

使用高阶函数会带来一些运行时的效率损失:每一个函数都是一个对象,并且会捕获一个闭包。 即那些在函数体内会访问到的变量。 内存分配(对于函数对象和类)和虚拟调用会引入运行时间开销。 但是在许多情况下通过内联化 lambda 表达式可以消除这类的开销。 下述函数是这种情况的很好的例子。即  函数可以很容易地在调用处内联。 考虑下面的情况: 编译器没有为参数创建一个函数对象并生成一个调用。取而代之...

计算机/ @CY2
...
Kotlin 的高阶函数和 Lambda 表达式 【已翻译】

高阶函数 高阶函数是将函数用作参数或返回值的函数。 这种函数的一个很好的例子是 ,它接受一个锁对象和一个函数,获取锁,运行函数并释放锁: 让我们来检查上面的代码: 拥有函数类型:, 所以它应该是一个不带参数并且返回  类型值的函数。 它在 try-代码块内部调用、被  保护,其结果由函数返回。 如果我们想调用  函数,我们可以把另一个函数传给它作为参数(参见函数引用): 通常会更方便的另一种...

计算机/ @CY2
...
Kotlin 的函数定义和使用 【已翻译】

函数声明 Kotlin 中的函数使用 fun 关键字声明 函数用法 调用函数使用传统的方法 调用成员函数使用点表示法 中缀表示法 函数还可以用中缀表示法调用,当 他们是成员函数或扩展函数 他们只有一个参数 他们用  关键字标注 参数 函数参数使用 Pascal 表示法定义,即 name: type。参数用逗号隔开。每个参数必须有显式类型。 默认参数 函数参数可以有默认值,当省略相应的参数时使...

计算机/ @CY2