Kotlin学习——kt里面的函数,高阶函数 函数式编程 扩展函数和属性

在这里插入图片描述

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。

https://play.kotlinlang.org/byExample/01_introduction/02_Functions

其他关于kt的博客文章如下:

  • Kotlin学习——hello kotlin & 函数function & 变量 & 类 + 泛型 + 继承
  • Kotlin学习——流程控制,when,循环,range工具 & kt里的equals & if实现类似三元表达式的效果
  • Kotlin学习——kt中的类,数据类 & 枚举类 & 密封类,以及对象

目录

  • 引出
    • Higher-Order Functions 高阶函数
    • Lambda Functions 函数式编程
    • Extension Functions and Properties 扩展函数和属性
  • 总结

引出


1.kt中高阶函数,返回一个函数;
2.kt里面的函数式编程;
3.扩展函数和属性;

Higher-Order Functions 高阶函数

高阶函数是以另一个函数为参数和/或返回一个函数的函数。

调用传递两个整数值和函数参数:sum的高阶函数

:: 是Kotlin中按名称引用函数的表示法。

package com.tianju.funcKt/*** 以另一个函数作为参数,返回一个函数*/
fun calculate(x:Int,y:Int,operation:(Int,Int)->Int):Int{return operation(x,y)
}fun sum(x: Int,y: Int) = x+yfun main() {val sum = calculate(4,5, ::sum)// 使用lambda 表达式val mulResp = calculate(5,6) { a, b -> a * b }println("sum is $sum, multiply is $mulResp")
}

(Int)->Int表示平方函数的参数和返回类型

package com.tianju.funcKt/*** (Int)->Int表示平方函数的参数和返回类型*/
fun operator() : (Int) -> Int {return ::square
}fun square(x:Int): Int {return x*x
}fun main() {// 调用operator 获得结果赋值给变量func,// 返回的是square函数val func = operator()println(func(2))
}

Lambda Functions 函数式编程

Lambda函数(“lambdas”)是一种创建特殊函数的简单方法。由于类型推理和隐式it变量,Lambdas在许多情况下可以非常简洁地表示。

  • 如果lambda由单个函数调用组成,则可以使用函数指针(:: )
  • 对于只有一个参数的lambda,可以使用隐式it变量。当可以推断它的类型时(通常是这样),这尤其有用。
package com.tianju.funcKtval upperCase1:(String) ->String = {str:String ->str.uppercase()}val upperCase2:(String) ->String = {str -> str.uppercase()}val upperCase3 = {str:String -> str.uppercase()}val upperCase4: (String) -> String = {it.uppercase()}val upperCase5:(String) -> String = String::uppercaseval myCase:(String,Int) -> String = {s, i -> "${s.uppercase()}---$i" }fun main() {println(upperCase1("hello"))println(upperCase5("kotlin"))println(myCase("Pet",1))
}

Extension Functions and Properties 扩展函数和属性

Kotlin允许您使用扩展机制向任何类添加新成员。也就是说,有两种类型的扩展:扩展函数和扩展属性。它们看起来很像普通的函数和属性,但有一个重要的区别:您需要指定扩展的类型。

在这里插入图片描述

在这里插入图片描述

package com.tianju.funcKtdata class Item(val name: String,val price:Float)data class Order(val items: Collection<Item>)// 如果有找到了,返回it.price,否则,返回的是0
fun Order.maxPriceItem():Float =this.items.maxByOrNull {it.price}?.price ?:0f/*** 上面简写的方式展开就是下面这样子*/
fun Order.maxPriceName():String{val maxByOrNull = this.items.maxByOrNull { it.price }if (maxByOrNull != null) {return maxByOrNull.name}else{return "NO_PRODUCT"}
}// 为Order类型添加扩展属性。
val Order.allNames:String get() = items.map { it.name }.joinToString()fun main() {val order = Order(listOf(Item("apple",12.4f),Item("wine",58f)))println(order.maxPriceItem())println(order.maxPriceName())println(order.allNames)
}

在这里插入图片描述

甚至可以对空引用执行扩展。在扩展函数中,您可以检查对象是否为null,并在代码中使用结果:

fun <T> T?.nullSafeToString() = this?.toString() ?: "NULL"

总结

1.kt中高阶函数,返回一个函数;
2.kt里面的函数式编程;
3.扩展函数和属性;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218071.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握高效性能测试技能:JMeter基础入门!

一、JMeter基础 A、JMeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。 Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and …

【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析模拟实现

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

嵌入式虚拟机原理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

计算机应用基础_错题集_PPT演示文稿_操作题_计算机多媒体技术操作题_文字处理操作题---网络教育统考工作笔记007

PPT演示文稿操作题 提示:PPT部分操作题 将第2~第4张幻灯片背景效果设为渐变预置的“雨后初晴”效果(2)设置幻灯片放映方式

STM32 CAN协议讲解以及代码

STM32 CAN 文章目录 STM32 CAN前言一、CAN外设1.主控制寄存器CAN_MCR2.位时序寄存器CAN_BTR3.CAN的发送邮箱4.CAN的接收FIFO5.验收筛选器 二、代码配置1.初始化2.发送数据3.接收数据4.main.c 前言 前面学习了CAN的一些理论知识&#xff0c;他在我们的STM32里面是怎么用的呢 前…

英特尔和 ARM 将合作开发移动芯片技术,如何看待双方合作?

英特尔和 ARM 将合作开发移动芯片技术&#xff0c;如何看待双方合作&#xff1f; 最近市场传出Arm要自产芯片&#xff0c;供智能手机与笔电等使用后&#xff0c;外媒指Arm自产芯片将由英特尔晶圆代工部门打造&#xff0c;变成英特尔晶圆代工客户。将采用英特尔18A工艺&#xff…

支付功能、支付平台、支持渠道如何测试?

有学员提问&#xff1a;作为一个支付平台&#xff0c;接入了快钱、易宝或直连银行等多家的渠道&#xff0c;内在的产品流程是自己的。业内有什么比较好的测试办法&#xff0c;来测试各渠道及其支持的银行通道呢&#xff1f; 作为产品&#xff0c;我自己办了十几张银行卡方便测…

P13 C++ 类 | 结构体内部的静态static

目录 01 前言 02 类内部创建静态变量的例子 03 在类的内部创建静态变量的作用 04 最后的话 01 前言 本期我们讨论 static 在一个类或一个结构体中的具体情况。 在几乎所有面向对象的语言中&#xff0c;静态在一个类中意味着特定的东西。这意味着在类的所有实例中&#xff…

【Linux】fork()

文章目录 一、fork()是什么&#xff1f;二、fork()干了什么&#xff1f;三、fork()怎么用&#xff1f; 一、fork()是什么&#xff1f; fork()函数其实是在Linux系统中用于创建一个新的进程。让我们看看Linux中是怎么描述的&#xff1f;运行man fork。 RETURN VALUE On success…

libmosquitto库的一个bug,任务消息id(mid)分配后不起作用

代码如图所示: 当订阅了所有主题后,每个主题的mid是他们的下标索引加100的数字,可是实际打印出来的值是: mid依然是1,2,这个参数在这里失效了,不知道是bug还是mqtt的什么机制?

Linux内核中的overlay文件系统

一、简介 Docker 内核实现容器的功能用了linux 内核中的三个特性 Namespace、Cgroup、UnionFs&#xff0c;今天我们来说一下UnionFs。 linux UnionFs 实现的是overlay 文件系统 OverlayFs 文件系统分为三层&#xff0c; lower 是只读层 Upper 是可读写 Merged 是 lower 和U…

Spring Boot - 瘦身大作战:优雅应对Spring Boot Fat Jar

文章目录 Fat Jar瘦身pom修改copy lib启动 -Dloader.path验证 源码分析前置阅读spring-boot-loader 依赖类继承关系PropertiesLauncher属性配置 附 pom.xml Fat Jar 【pom.xml】 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"ht…