Kotlin, Android的Swift

kotlin-futures:Kotlin中期货的简单实现 Kotlin期货 Kotlin中期货的简单实现。 具有最小的依赖关系,因此您可以在Android上使用它。 入门 使用Gradle获取 将我的Bintray存储库添加为Maven存储库: repositories { maven { url " https://dl.bintray.com/rahulrav/kotlin-futures/ " } } 然后将库添加为依赖项: dependencies { compile " com.rahulrav:com.rahulrav.futures:1.2.0 " } 创造期货 创造Future真的很容易。 import com.rahulrav.futures.Future val future : Future < Int> = Future .submit { // fake some long runnin 立即下载


苹果已经用Swift代替Objective-C,一种古老的语言,来进行iOS的开发了。明显Android开发也有这个趋势。

虽然现在已经可以选择Scala或者Groovy等基于JVM的语言开发Android应用来尝尝鲜,但是弊端却显而易见。
要引入一个全新的开发语言,那么就意味着需要引入这个语言的全部的运行时。这简直就是噩梦。因为这会给
极大的增加应用包的大小,还不说65535方法问题。小的应用还可以,但是这不是一个合适的替代语言应该有的问题。

Kotlin

介绍一下Kotlin--一个基于JVM的语言。由JetBrains(他们开发了IntelliJ IDEA的一个系列和Android Studio)
开发,并由圣彼得堡附近的一个小岛命名,负责这个项目的开发团队就在这个小岛办公。在2011年为外界
所致,并在几年后的第二个里程碑(M2)发布了对Android的支持(翻译的时候已经发布了1.0正式版)。

特性

这个新的语言有什么特色呢,你可能会问。有很多!不过本文会集中讲述Java应该有而一直没有的上面。

命名和可选参数

命名参数是一个很简单的语言特性,但是却让代码更加易读,尤其是那些有很多参数的函数签名。

看下面的例子:

void circle(int x, int y, int rad, int stroke) {
    ...
}

在java调用的时候看起来是这个样子的:

circle(15, 40, 20, 1);

要多次查看函数签名才能知道每个参数的具体作用。在Kotlin里,定义是这样的:

fun circle(x: Int, y: Int, rad: Int, stroke: Int) {
    ...
}

调用就更好了:

circle(15, 40, rad = 20, stroke = 1)

假设我们现在需要把stroke参数设定为可选的,在Java里你只能overload出另一个方法,这个方法
少一个参数,然后在里面调用第一个方法:

public void circle(int x, int y, int rad, int stroke) {
    ...
}

public void circle(int x, int y, int rad) {
    circle(x, y, rad, 1);
}

但是在Kotlin里,一切变得简单:

fun circle(x: Int, y: Int, rad: Int, stroke: Int = 1) {
    ...
}

不是什么大的功能改进,但是Java始终没有。

Lambda表达式

最近函数式编程日渐流行。Kotlin也支持lambda表达式。

我们先来看一个简单的。假设你有一个整数列,而且要删除全部的奇数。

val numbers = listOf(1, 2, 3, 4, 5)

println(numbers.filter { it % 2 != 0 })
// 输出:[1, 3, 5]

这个函数把list的元素类型为输入参数类型,这里是integer。并输出一个boolean型的结果。如果我们把
filter的lambda表达式转化为一个明显的变量写出来的就更容易理解了:

val predicate: (Int) -> Boolean = { it -> it % 2 != 0 }
numbers.filter(predicate)

这一语法和其他的而支持lambda表达式的语言的语法相差不大,所以不多做解释。

Null和类型安全

总是要检查变量是否为null也是Java里一个很烦人的事。这个问题在Kotlin里被部分解决。

如果你用传统的方法定义一个变量,那么编译器是不允许其值为null的。

var text1: String = "something" // 木有问题
var text2: String = null // 无法编译

那么定义的变量的值需要为null怎么办呢?你要专门定义一个值可为null的变量。值可为null的变量,用变量
类型后面的问号来明确指定。

var text2: String? = null // 木有问题

调用的时候也需要问号。

text2?.replace(" ", "-")

这句的意思是:如果text2为空,那么replace()方法会被忽略并且不会有NullPointerException异常抛出。

如果你接手了一个可选类型(optional type)的变量,你可以百分之百的确认变量的值不会为null(这在Adnroid的API里
非常多见,虽然方法定义返回值为空可空类型,但是从来不会返回null),然后可以强制作为非空调用方法。

text2!!.replace(" ", "-")

这个时候,如果text2为null的话就会抛出NulPointerException异常。所以小心使用。

类型安全的另一个意义是类型检测。假设你又一个Context的实例并且需要检测这个实例是否为Activity类型,然后调用
一些activity才有的方法。

val context = getContext()
if (context is Activity) {
    context.finish()
}

类型检测之后你就可以把context作为一个activity类型的实例来使用了,不需要强制类型转换。和Java的
instanceOf方法一样,is也是null安全的。即使getContext()返回一个null,上面的代码也
不会崩溃。

数据对象(Data object)

在写数据对象的时候,很多你需要手动实现的,比如:toString(), 'hashCode()以及equals()`。即使
现在很多的IDE已经减轻了一部分工作量,但是添加了新的成员后再更新这些实现也是非常的麻烦。

Kotlin里不用再为这些操心了。你需要做的只是在类定义的前面加一个data的修饰,上面的方法就已经隐式的生成了。

data class Island(val name: String? = null)

如果你初始化上面的类,会自动生成一个人类可以读懂的toString()方法。

val island = Island("Kotlin")
println(island.toString())  // 输出:Island(name=Kotlin)

同理,如果我们用同一个名字创建另外一个实例,这个实例会equal之前创建的实例。并且他们的hashCode()值也一样。

val island = Island("Kotlin")
val island2 = Island("Kotlin")

assert(island.equals(island2))
assert(island.hashCode() == island2.hashCode())

如果你要定制以上的方法,那么,当然,你还是要手写的。

单例

单例是一个非常常用的方法。Kotlin省去了创建单例的时候需要的静态getInstance()方法和私有的构造函数。
Kotlin使用object声明。

object ApiConfig {
    val baseUrl: String = "https://github.com"
}

object声明也可以用来创建静态方法。

open class MyFragment : Fragment() {
    companion object {
        fun newInstance(): MyFragment = MyFragment()
    }
}

上面的方法可以这样调用val fragment = MyFragment.newInstance(),就和Java的静态方法一样。

接口

虽然Kotlin不支持多继承, 但是还是支持接口的。只不过这个接口和Trait比较接近,可以在接口中包括默认实现。

interface SessionCloseable {
    fun closeSession() {
        Log.d(SessionCloseable::class.java.simpleName, "Closing...")
    }
}

以上接口定义了一个可以关闭session的方法,下面我们在一个activity里实现这个方法。

class KotlinActivity : Activity(), SessionCloseable {
    override fun onStop() {
        super.onStop()
        closeSession()
    }
}

有一点需要注意的是Kotlin里没有extend和implement的区分,什么时候都是逗号分隔。

扩展(extension)

最后我们看一个例子:你可以给一个已经存在的类添加方法。

比如你要创建一个方法,这个方法可以把字符串的空白替换为下划线。在Java里你需要创建一个Utility的方法,以
原始字符串为参数。

public class StringUtils {
    public static String encodeString(String str) {
        return str.replaceAll(" ", "_");
    }
}

在Kotlin里,你可以创建一个扩展方法(extension function),即使原类是final的。

fun String.encodeSpaces(): String {
    return this.replace(" ", "_")
}

最后

为了公平起见,以上说到的大部分特性在Java8里都已经有了。但是这些什么时候可以在Android里用到可能
就遥遥无期了(其实这个问题已经有人在2014的Google I/O里问过了,但是根据Xavier Ducrohet的说法近期没有这样的计划)。
还好现在有Kotlin了。

另外,这个语言已经非常的成熟。唯一的问题就是文档经常补全而且还经常是过期的,不过因为语法和同时JVM语言的Scala多少
有些接近,多少可以猜出个大概。所以,这只是一个很小的瑕疵。

最后的最后,Kotlin将会在我(作者)后续的Android开发中尽可能的使用。显然,对已有的代码做转化不太明智。
而且Kotlin可以和Java的代码无缝互操作,这样不是什么太大的问题。Kotlin很值得一试!

原文地址, 代码在这里

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!

Android-Future基于Kotlin协同程序的简单的monadic未来实现 Future基于Kotlin协同程序的简单的monadic未来实现 立即下载

相关推荐

SikuliX实战:5分钟搞定游戏挂机脚本(附防检测思路与Python集成技巧)

本文详细介绍了如何使用SikuliX快速开发游戏挂机脚本,包括环境配置、基础原理、防检测策略及Python集成技巧。通过实战案例展示如何实现自动化任务、高级防检测方案,并结合Python提升脚本性能与智能度,帮助玩家高效完成重复性游戏操作。

weixin_33228769的博客 334

Kotlin中的并发

在Android系统上,应用程序可能不会执行许多的计算,反而会花费大量时间用来等待——无论是等待从服务器获取天气数据,等待从数据库检索用户数据,还是等待电子邮件到达。同时,阻塞主线程会冻结UI并在一段时间后导致异常发生,从而导致非常严重的用户体验。首先有几个极为容易混淆的术语:并发、并行、多任务、多线程。使用现实生活中的例子来解释的话,可以将:并行想象成一群正在进行网球表演的人,每个人都在进行各自的表演:把球扔到地面使其弹跳、或把他扔到空中等等。并发。

qq_44016573的博客 1026

手把手教你用组态王KingSCADA 3.53读取S7-1200 PLC数据(保姆级图文教程)

本文提供了一份详细的组态王KingSCADA 3.53读取S7-1200 PLC数据的实战教程,涵盖从硬件连接到软件配置、变量映射到故障排查的全流程。特别针对初学者常见问题提供解决方案,帮助工程师快速实现稳定通信,提升工业自动化系统效率。

weixin_26876073的博客 672

【Java】多线程编程(一)

宽泛地说明了何为线程、线程的中断、线程锁与同步、竞态条件、重入锁与条件对象 和volatile用法,旨在帮助读者对线程有宏观的了解和清晰的认识。

Frms的博客 1182

《计算机网络》复试问答题总结

DNS 是一个联机分布式数据库系统,负责主机名和 IP 地址之间的转换,需要进行域名查询的机器主动发起域名解析请求,域名服务器则随时准备做出响应。域名服务器的数据库中存放着它所管辖范围的主机名和 IP 地址之间的映射表,域名服务器之间又可以相互联络和协作,以便分布在 Internet 各个域名服务器数据库中的域名都能被有效地搜索,从而实现主机名与 IP 地址的映射。为了提高解析效率,使用了域名缓存技术。在服务器、主机中设置一个专用的内存缓冲区。服务器用来存放近期解析过的域名及其对应的 IP 地址的映射。

weixin_45971154的博客 2027

模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

整理的算法模板合集: ACM模板 目录一、树的直径树形DP两次DFS / BFS(找到直径的两个端点)二、动态修改树的边权并求每个时刻的直径(线段树)三、树的重心 一、树的直径 树的直径满足如下性质: 若有多条直径,则所有的直径之间皆有公共点。 直径的两端一定是叶子。 树中距离某一直径端点最远的点,至少有一个是该直径的另一个端点。 对于树上任意一个点,与之距离最远的一个点,至少有一个直径的端点。 给你一个无权无向的树。编写程序以输出该树中最长路径(从一个节点到另一个节点)的长度。在这

繁凡さん的博客 1676

Kotlin:该如何实现多线程同步?

1.1 协程是什么1.2 什么是Job 、Deferred 、协程作用域1.3 Kotlin协程的基础用法。

Gaga246的博客 1507

Transformer 时间序列预测实战

Transformer 时间序列预测实战

机器学习深度学习业余选手 743

Kotlin协程示例解析:使用future模式简化异步编程

在现代编程中,异步操作已成为处理高并发和IO密集型任务的标准方式。Kotlin协程提供了一种优雅的方式来处理异步编程,而future模式则是异步编程中常见的模式之一。本文将通过分析Kotlin协程示例中的future-example.kt文件,深入探讨如何结合这两种技术来简化异步编程。 ## Future模式基础 Future模式是一种表示异步计算结果的抽象,它允许我们在不阻塞主线程的情况下启...

gitblog_00190的博客 908

小米15修复“NV损坏” 去除主板校验电阻步骤解析与图示

小米15系列将搭载骁龙8至尊版处理器,采用台积电3nm工艺。文章分析了手机出现"NV损坏"故障的表现及修复方法,包括通信异常、系统启动问题等典型症状,并介绍了去除主板校验电阻和刷写工程固件两种修复方案。重点讲解了去除主板电阻后刷写QCN文件的操作流程,强调在维修过程中需要结合分析与思考。适用于小米15系列特定机型(24129PN74G/I/C)的硬件修复。

小马哥的专栏 312

Qt入门教程【Core篇】singal and slot信号与槽

Qt中信号与槽singal and slot

小鱼酱的博客 2449

Kotlin(七)—— 异步程序设计

1 异步程序设计 开发人员始终面临着需要解决的问题——如何防止应用程序被阻塞。 开发桌面应用,移动应用,甚至服务端应用程序时,希望避免让用户等待或阻碍应用程序扩展。 以下会介绍实现异步编程的不同方式 ,包括: 线程 回调 Futures,Promises 等等 响应式扩展 协程 1.1 线程 到目前为止,线程可能是最常见的避免应用程序阻塞的方法: fun postItem(item: Item) { val token = preparePost() val post = submitP

xingyu19911016的博客 2039

matlab 异常值检测与处理——Robust Z-score法【2024最新版】

博客长期更新,本文最近一次更新时间为:2024年12月9日。

点云侠的博客 1516

Swift 适配 Android,Kotlin 该如何应对?

苹果低调成立Swift安卓工作组,计划2025年让Swift原生支持Android开发,意图打破移动开发双端割裂的现状。这一战略将推动Swift从iOS扩展到Android生态,可能重塑开发者技能栈和跨端开发模式。Kotlin面临严峻挑战,但谷歌不会轻易放弃其"亲儿子"语言。这场语言之争将促使双方完善生态,最终受益的是开发者。掌握Swift+Kotlin的复合型人才未来更具竞争力,而跨平台开发也将迎来新的技术范式。

移动端开发干货分享 1216

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[Android]聊聊Kotlin和Swift

Kotlin是什么我们知道,Apple在2014年发布了全新开发语言Swift.经过三年多的发展, 这门语言已经发展到3.0版本,预计在今年6月会发布4.0版本,笔者从2.0开始关注它,期间踩过不上坑,不过到现在已经发展相对稳定,现在很多公司包括大厂在自家的项目中应用到Swfit进行开发。那么Kotlin是什么鬼?它也是一种开源的编程语言,早就存在了,只不过大家对它不是很熟悉,哪怕做Android开

sz_vcp2007的专栏 3975

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Kotlin 的“葬礼”已经宣布?苹果把 Swift 偷偷塞进 Android 的那一刻,移动开发要变天了

Kotlin 在 Android 上的根基太深:工具链、生态、Jetpack、Compose、Android Studio 的协同,不是一天两天能撼动的。, Android 端 UI 继续 Kotlin / 原生, iOS 端 UI 继续 SwiftUI / 原生, 两端都“原生体验”,但逻辑不重复造轮子。明确支持的 Android 版本、API Level、ABI(别再“能跑算我输”)([Swift.org][2])过去十年,很多 iOS 开发者进入移动团队时,会被默认要求“顺便学 Kotlin”。

粉丝们务必加入微信粉丝群 702

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java 转swift_Swift开发者的福音-开发Android,java迁移Kotlin以及Kotlin与Swift对比学习....

前言:北京时间的17日23点,谷歌一年一度的I/O开发者大会召开.就在这第一天,谷歌安卓团队大会上宣布Kotlin成为Android的主力开发语言,其实在之前这个语言就已经支持了安卓平台开发,但是直到今天谷歌开发者大会上才宣布对该语言的全面支持和维护,至此之后代码将更加简洁.最近项目上线,CTO说闲暇之余学习下安卓,无奈重新啃java的语法,这是多么痛的领悟,可是一觉醒来,万物复苏.作为热衷Swi...

weixin_28007513的博客 797

Swift 应用在安卓系统上会怎么样?

你可能会问——如果 Kotlin 在安卓上是官方且原生的,为什么还要用 Swift?这是个合理的问题。而这是一个合理的答案:如果你的团队主要使用 Swift 并且以 iOS 开发为主,那么在安卓上使用 Swift 能让你复用自身优势,避免逻辑重复,并加快开发速度。这并非适用于所有团队。但对合适的团队来说,它能实现真正的跨平台开发,同时又不牺牲原生性能或 Swift 的易用性。

2501_92798394的博客 824

Kotlin:Android世界的Swift

本来打算转行j2ee,看来又要增加学习成本了[捂脸] 看来之前有人说google准备改用swift开发android也不是空穴来风 两者的语法真是超级相似啊 http://www.infoq.com/cn/news/2015/06/Android-JVM-JetBrains-Kotlin 转载于:https://www.cnblogs.com/coderwjq/p/6872489.html...

weixin_30755709的博客 90

Kotlin-Android的Swift

Kotlin-Android的SwiftKotlin介绍最近在学习一门新的语言Kotlin, Google拟用Kotlin取代Java进行Android开发。众所周知,苹果用swift取代Objective-C进行Swift开发,Kotlin对于Android就好比swfit对于iOS一样。不过,Kotlin对于Android开发的影响,所带来的优势可能比swift对iOS更大。 尽管还有基于JVM

tangyiwu的专栏FONabqlhQhg^ 784

android+swift教程,写给 Swift 开发者的 Kotlin 教程

无论你是想学习 Android 开发知识的 iOS 程序员,还是你是仍在使用 Java 的安卓程序员,又或者你是已在用 Kotlin 的 Android 程序员却想多了解一点 Swift,这篇文章都适合你。这是两种流行的现代移动开发语言的对比,不过我只谈论语言,而不会去涉及实现的应用开发,所以你看到的这些内容也适用于移动开发之外的领域。两者的相似之处首先,两种语言拥有很多相同之外。它们都是强类型且...

weixin_33585889的博客 555

Android平台的Swift—Kotlin

WeTest 导读 Kotlin 已经出来较长一段时间了,有些同学已经对Kotlin进行了深入的学习,甚至已经运用到了自己的项目当中,但是还有较多同学可能只是听过Kotlin或简单了解过,这篇文章的目的是让这些同学对Kotlin有一个系统全面的认识,让有兴趣的同学在之后学习的时候能更加的轻车熟路。 什么是kotlin? 一、一门静态编程语言 跟java,c一样的强...

diezhuzhuo3333的博客 173
上一篇: kotlin在安卓中的应用
下一篇: Signature的生成方法
僤尐僤
博客等级 码龄14年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值