Kotlin带接收者的lambda表达式

Kotlin带接收者的lambda表达式,第1张

在学习kotlin协程原理的时候发现了一个比较有意思的东西:

这个block参数的类型是:

suspend是一个关键字,在协程里面用于声明挂起函数,我们先忽略。看后面的 CoroutineScope() -> Unit 看起来像是个函数类型,但是比起一般的函数类型又多了前面的” CoroutineScope “前缀。

这玩意学名叫做 带有接收者的函数类型 ,通过文档我们可以知道它和 扩展函数 类似,允许在函数体内部访问接收者对象的成员。也就是说在lambda内部,传给调用的接收者对象成为隐式的this,我们可以用this去访问它的成员变量。这个时候invoke的第一个参数就是接收者也就是this的值:

然后this也可以省略:

通过kotlin的语法糖我们可以将invoke省略,将with方法写成下面的形式:

由于block的接收者是Person类型的,通过"Person()->Unit"这个类型声明,其实我们可以将它看成Person的拓展函数,通过person这个传入的对象去调用,也就是说我们可以将with方法再改成这样的形式:

对kotlin熟悉的同学可能想到了,如果将特定的Person类型改成泛型,然后再将block的返回值返回,就是我们常用的with函数的实现原理:

如果with方法是Person的成员方法,那么输入的person接收者就是this,可以不用特地在方法参数指定。也就是说可以把它去掉写成下面的形式:

这个时候就更像给Person类创建了一个拓展方法。接收者是this,这个this就是我们传入的person变量。然后this同样可以省略,写成下面的形式:

如果我们使用泛型去替代这个特定的Person类,然后将this再返回,就是apply方法的实现原理了:

很多的kotlin DSL就是用上面的带有接收者的lambda函数去实现的,例如anko。我们可以先给ViewGroup声明一个拓展方法textView用于创建TextView添加成子view,然后TextView作为接收者去调用lambda方法block:

然后再声明一个Activity的拓展方法verticalLinearLayout用于创建垂直布局的LinearLayout,然后将这个创建的LinearLayout作为接收者去调用lambda方法block:

所以就有了下面这样的写法,创建一个垂直布局的LinearLayout里面包含两个TextView:

我们对这个dsl进行详细的解析,第一步它调用了Activity的拓展方法verticalLinearLayout,它的接收者是Activity,内部创建了一个LinearLayout返回。并且用它做接收者调用lambda函数,在lambda函数内部调用的textView方法是ViewGroup的拓展函数,它内部创建了一个TextView加入到LinearLayout的子view。并用这个TextView做接收者调再用lambda函数,所以可以直接设置TextView的setText方法和setBackgroundColor方法。

除了上面kotlin内置的with、apply方法和anko的实现之外, 官方文档 也提供了一个比较典型的例子:

html方法接收一个带HTML类型接收者的lambda函数,它在内部自己创建一个HTML的实例去调用这个lambda函数,于是可以在这个lambda函数里面调用HTML的body方法。

通过上面的几个例子,我们已经了解了带接收者的lambda函数的使用方法,我们可以通过这些典型的用法去设计我们自己的DSL使得我们设计的框架更加易用。

会JAVA,学一周就差不多了。会C#,我觉得2天就差不多了。
值不值得学要看你自己怎么衡量,花费的是一点点时间,得到的是开发效率,代码简洁性的提高。当然你要说kotlin能做的java当然也能做,本身没有什么质的改变。
而且你要说kotlin能不能替代java这个我还持怀疑态度,毕竟在kotlin之前jvm上已经有好多想要替代java的语言了,语法特性都比java好的多。随便举几个例子,groovy scala,你说这些语言国内又有几个人在用呢?
kotlin也就是被国内媒体报道了,估计火一阵子就没影了,天天喊着取代java,我估计两三年后大部分人连kotlin是什么都忘了。
个人建议,学来长长见识,自己玩玩,挺好的。不过你如果在公司上班,很多时候不是你想用什么语言就能用的,你说你要在这个项目里用kotlin,你要先得到老板的同意

在程序开发当中,关于 字符串比较 肯定是少不了的。那么在Kotlin开发语言中的字符串比较是怎么样的呢?下面我就来通过例子来举例一下。

输出结果是:

Kotlin当中,我们可以通过 == 来比较两个字符串。

Kotlin的 == 与Java的 == 的对比在于:Java的 == 是比较字符串的内存地址,Kotlin的 == 与Java语言的equals方法相等。

输出结果:

上面学习的两个Demo代表中文与英文的字符串比较,希望对一起学习Kotlin的小伙伴们有帮助。

java。

1、个人建议学习java,比如你不懂Java,如何比较跟理解static与伴生对象﹖你要调用Comparator你会不会一脸懵逼 Data Class转成的Java 代码你会不会分析 JavaBean概念懂吗﹖前者解决了后者什么问题

Kotlin 默认Class 不是Open的,有何影响﹖特别是跟一些框架如Spring配合有哪些坑需要填这些你不懂Java你就解决不了,你就只能写写“Hello World”。

2、只有用惯了Java而又想继续改进工作效率(或者为了寻求刺激)的人,才会真正去“用”Kotlin。而且为了更好的用,会发展出一堆的best practice。这些工具或者SOP,绝大多数会首先考虑如何重用Java已有的东西,然后在此之上考虑怎么做得比Java效率更高。

那些没有Java基础,没写过几年Java的人,一上手Kotlin,不会觉得这玩意儿有多好用。而且Java初学者要踩的坑,他基本上要一个不漏用Kotlin再踩一次,而且因为用的不是直接Java,所以解决起来反而更困难。

3、语言本身没什么不可以,问题出在两个地方一个是文档,现有的文档基本都假设你已经有Java基础了,所以对于完全不懂Java的人来说未必很好理解。

另一个是各种库和框架,绝大部分JVM下的库和框架都是针对Java设计的,用Kotlin总需要转换下格式什么的,如果你完全不懂Java这一步可能就走不下去了。

我会建议使用纯JAVA。而不要去考虑Kotlin。否则,你将失去两大优势。
首先要搞清楚,kotlin与JAVA之间,其实并没有任何关系。kotlin是那个做IDE的Jetbrains公司创造的语言,它只和intellij IDEA这个IDE有关系。只是这个IDE,会在编译的时候,把kotlin转换成JAVA代码。所以kotlin无形中,便把使用者与这个IDE捆绑在了一起。而并不是与JAVA捆绑在了一起。
失去的第一个优势,便是从此无法自由选择IDE。。。对于kotlin来讲,将永远只有一个IDE可以选择。用户会成为Jetbrains公司的奴隶。如果有一天,你必须离开这个IDE,那你将会沦为废物,因为如果没有IDEA,kotlin无法做到任何事,哪怕仅仅一个“hello world”都不能。
失去的第二个优势则更加致命,也是JAVA可以获得成功的原因之一。。。JAVA能做的事情,其实很多其他语言也能做到。。但为什么JAVA可以如此受欢迎?除了JAVA本身的强大之外,还有一个原因在于,JAVA与C#语言,几乎是一模一样的。只有非常细微的差别,不仅语法一样,而且连编程思想都一样。只要掌握其中一门,完全可以在几天之内,无师自通另外一门。然后就可以对照api文档,去开发另外一门语言的程序了。所以学习JAVA的一大亮点就在于“学一门,会两门”。
C#很了不起吗?没错,非常了不起。。它本就可以视作JAVA获得成功的最大幕后英雄。。但我不是来讲故事的,因此微软与sun公司的恩怨情仇不在此深究。
我只说三个关键点,你自然明白其中利害关系。
1,它是微软的官方编程语言,微软的亲儿子,天生的富二代,Visual Studio便是为它量身设计。并且是微软唯一可以跨平台的儿子。。微软前不久又为它专门设计了轻量开发工具VS code。。不远的未来,它将成为微软的独子。未来几年,微软几乎全部工作都将与它有关。
2,它是游戏开发行业的第一大编程语言。占有60%以上的份额。Unity3D,CE5,寒霜,夜光,这四大游戏引擎的标准语言。《口袋妖怪Go》《使命召唤》《FIFA》《极品飞车》《最终幻想14》等数以万计的游戏都是由它开发而成。还包括国内最火的手游《王者荣耀》
3,它是虚拟现实(VR)设备开发的第一大语言。
扔掉JAVA,改用kotlin,也就等于与C#分道扬镳。。。所付出的代价,在我看来是无与伦比的。

最近有安卓项目需求,开始着手学习Kotlin语言。Kotlin和Swift很像,很多特性都是一样的。会swift对于学习kotlin相对来说容易上手很多。

记录一下ADB使用的问题方便以后查看

1mac终端安装ADB

2安装完成后查看一下需要连接的设备的ip地址,下面的ip地址替换成自己的

解决方法:
查看设备的adb服务和电脑的adb服务是否打开
通过 adb start-server 打开电脑上服务

解决方法:
(1)重启adb服务,重连接adb
(2)设备的网络重启一下
(3)查看是不是有其他人已经通过adb连接了设备

解决方法:

安装apk也可以直接用AndroidStudio直接运行这样可以进行调试

>

kotlin定义:

Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

Android studio使用Kotlin开发

在IDE plugins中下载Kotlin插件

Android studio 在设置中打开plugins,然后在里面搜索Kotlin,点击安装,之后安装后重启。

创建、转换Kotlin文件,新建一个工程,然后你可以右键试试,看看是不是多出了2个选项。

定位到MainActivity,在菜单栏选择“Code”,选择“Convert Java File to Kotlin File”,MainAvtivity变成了Kotlin文件。

配置Kotlin(其实是全自动)

第一次使用Kotlin,Studio会提示要配置Kotlin的,点击配置即可,其实啥都不用选,直接点“ok”。

开发Android的话一般来说都是直接用Java,新修订的版本中也逐渐覆盖以往的不足,但是Android开发者们还没来得及用上它。所以这也使得Kotlin这样的语言可以有用武之地,可以让开发者们在旧的开发环境中使用新的特性。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13104060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存