当前位置: 首页 > web >正文

Kotlin基础语法二

  • 匿名函数
fun main() {val len = "Kotlin".count()println(len)val len2 = "Kotlin".count {// it 等价于 K o t l i n 的字符 Charit == 'k'}println(len2)
}
  • 函数类型&隐式返回学习
fun main() {// 第一步:函数输入输出的声明val methodAction : () -> String// 第二步:对上面函数的实现methodAction = {val inputValue = 999999"$inputValue value" // == 背后隐式 return "$inputValue value";// 匿名函数不要写return,最后一行就是返回值}// 第三步:调用此函数println(methodAction())
}
  • 函数参数
    // 第一步:函数输入输出的声明   第二步:对声明函数的实现val methodAction : (Int, Int, Int) -> String = { number1, number2, number3 ->val inputValue = 999999"$inputValue Value 参数一:$number1, 参数二:$number2, 参数三:$number3"}// 第三步:调用此函数println(methodAction(1, 2, 3))
  • it关键字
    val methodAction2 : (String) -> String = { "$it Value" }println(methodAction2("DDD"))val methodAction3 : (Double) -> String = { "$it Value" }println(methodAction3(5454.5))
  • 匿名函数的类型推断
    // 匿名函数,类型推断为String// 方法名 : 必须指定 参数类型 和 返回类型// 方法名 = 类型推断返回类型val method1 = { v1:Double, v2:Float, v3:Int ->"v1:$v1, v2:$v2, v3:$v3"} // method1 函数: (Double, Float, Int) -> Stringprintln(method1(454.5, 354.3f, 99))val method2 = {3453.3f} // method2 函数: () -> Unitprintln(method2())val method3 = { number: Int ->number} // method3 函数: (Int) -> Intprintln(method3(9))
  • lambda
    // 匿名函数 == lambda表达式val addResultMethod = { number1 : Int, number2: Int ->"两数相加的结果是:${number1 + number2}"} // addResultMethod 函数: (Int, Int) -> Stringprintln(addResultMethod(1, 1))// 匿名函数 入参 Int,          返回 Any类型// lambda表达式的参数 Int,    lambda表达式的结果Any类型val weekResultMethod = { number: Int ->when(number) {1 -> "星期1"2 -> "星期2"3 -> "星期3"4 -> "星期4"5 -> "星期5"else -> -1}} // weekResultMethod 函数: (Int) -> Anyprintln(weekResultMethod(2))
  • 在函数中定义参数是函数的函数
fun main() {loginAPI("KK", "123456") { msg: String, code: Int ->println("最终登录的情况如下: msg:$msg, code:$code")}
}// 模拟:数据库SQLServer
const val USER_NAME_SAVE_DB = "KK"
const val USER_PWD_SAVE_DB = "123456"// 登录API 模仿 前端
public fun loginAPI(username: String, userpwd: String, responseResult: (String, Int) -> Unit) {if (username == null || userpwd == null) {TODO("用户名或密码为null") // 出现问题,终止程序}// 做很多的校验 前端校验if (username.length > 3 && userpwd.length > 3) {if (wbeServiceLoginAPI(username, userpwd)) {// 登录成功// 做很多的事情 校验成功信息等// ...responseResult("login success", 200)} else {// 登录失败// 做很多的事情 登录失败的逻辑处理// ...responseResult("login error", 444)}} else {TODO("用户名和密码不合格") // 出现问题,终止程序}
}// 登录的API暴露者 服务器
private fun wbeServiceLoginAPI(name: String, pwd: String) : Boolean {// kt的if是表达式(很灵活)     java的if是语句(有局限性)// 做很多的事情 登录逻辑处理// ...return if (name == USER_NAME_SAVE_DB && pwd == USER_PWD_SAVE_DB) true else false
}
  • Kotlin函数简略写法
    // 第一种方式loginAPI2("KK", "123456", { msg: String, code:Int ->println("最终登录的情况如下: msg:$msg, code:$code")})// 第二种方式loginAPI2("KK", "123456", responseResult = { msg: String, code: Int ->println("最终登录的情况如下: msg:$msg, code:$code")})// 第三种方式loginAPI2("KK", "123456") { msg: String, code: Int ->println("最终登录的情况如下: msg:$msg, code:$code")}
  • 内联函数 inline
    减少函数调用开销,将高阶函数(如 lambda 参数)的代码直接内联到调用处,避免 创建额外的函数对象,提升执行效率。
inline fun measureTime(action: () -> Unit) {val start = System.currentTimeMillis()action()println("耗时: ${System.currentTimeMillis() - start}ms")
}
  • 函数引用
fun main() {// 函数引用// lambda属于函数类型的对象,需要把methodResponseResult普通函数变成 函数类型的对象(函数引用)// loginAPI("KK", "123456", ::methodResponseResult)val obj = ::methodResponseResultval obj2 = objval obj3 =  obj2loginAPI("KK", "123456", obj3)
}fun methodResponseResult(msg: String, code: Int) {println("最终登录的成果是:msg:$msg, code:$code")
}
  • 函数类型作为返回类型
fun showMethod(info: String): (String, Int) -> String {println("我是show函数 info:$info")// return 一个函数 匿名函数return { name: String, age: Int ->"我就是匿名函数:我的name:$name, age:$age"}
}fun main() {val r = show("学习KT语言")// r 是show函数的 返回值val niming_showMethod = showMethod("show")// niming_showMethod 是 showMethod函数的返回值 只不过这个返回值 是一个 函数// niming_showMethod == 匿名函数println(niming_showMethod("Derry", 33))
}
  • 匿名函数与具名函数
    // 匿名函数showPersonInfo("lisi", 99, '男', "学习KT语言") {println("显示结果:$it")}// 具名函数 showResultImplshowPersonInfo("wangwu", 89, '女', "学习C++语言", ::showResultImpl)
http://www.xdnf.cn/news/13367.html

相关文章:

  • 大数据学习(136)-数据埋点
  • 玄机 日志分析-Tomcat日志分析 WriteUp
  • G-Star公益行 | 公益组织入门开源技术,六月北京点燃改变的星火
  • 【MySQL数据库】InnoDB存储引擎:事务原理redolog、undolog与版本控制MVCC
  • QuecPython 文件系统操作
  • 多光谱图像技术在苗期作物与杂草识别中的研究进展
  • C语言学习20250610
  • Dynadot邮箱工具指南(六):将域名邮箱添加至网易邮箱大师
  • Leetcode 3576. Transform Array to All Equal Elements
  • 新能源知识库(34)什么是单一制和两部制
  • 【SAP MM SD FICO】销售视图和会计视图
  • C++ 8.1内联函数之宏定义
  • Metasploitable: 1靶场渗透
  • 在postgresql中,group by时取第一个值
  • 网络编程(Modbus进阶)
  • Manus 框架与 COKE 框架解析及完整 Demo
  • Unreal从入门到精通之使用 CheatManager 自定义控制台命令
  • 操作系统的一些名词
  • 期末考试复习总结-第一章《HarmonyOS介绍》
  • ​计算机网络原理超详解说​
  • 2025-03-14-Google检索技巧
  • 华为云Flexus+DeepSeek征文 | 基于ModelArts Studio、DeepSeek大模型和Dify搭建网站智能客服助手
  • 深度学习——简介
  • Ubuntu下挂载NTFS格式磁盘
  • 访问服务器项目,服务器可以ping通,但是端口访问不到
  • C++ mutex 锁的使用
  • JavaScript BOM 详细介绍
  • 重温经典算法——二分查找
  • 借助AI识别测试盲区:从需求文档中挖掘遗漏场景
  • CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型