Kotlin-函数

SAP 替代关系完全替代简介 这里产生了成品物料的计划订单,我们查看计划订单中BOM的变化,如下图可以看到物料的需求仍然落在了优先级为1的这个302300005555这个物料上面,并没有考虑到302300006666的这个库存,和我们理解的MRP的完全替代不一样,按我们的理解需求应该是要落在302300006666这个物料料,但是MRP计算后并没有这样进行分配。最近用户在对长周期物料进行备料的时候又提出替代料的问题,主料库存不足的时候需要考虑替代料的在途库存,经常会忘了SAP标准的替代料逻辑,这次一次性把这个逻辑写清楚。 阅读详情

概述

许多程序设计语言(像C和C++)用函数这个术语来描述命名子程序;在Kotlin中,依然延续这个术语来表示“做某些事情的方式”,实际上把它当作java中的方法是一样的,只不过是命名方式的不同而已,没有什么实际意义。

函数声明

Kotlin中的函数决定了一个对象能够接收到什么样的信息,函数的基本组成部分包括:名称、参数、返回值和函数体,其使用fun关键字定义函数,定义形式为:

fun methodName(param: paramType): ReturnType {

}
  • 返回类型描述的是在调用函数之后从函数返回的值。
  • 参数列表给出了要传递给函数的信息的类型和名称
  • 函数名和参数列表作为函数的唯一的标识符

参数

函数参数的定义使用Pascal标记法, 也就是, name: type 的格式,多个参数之间使用逗号分隔,每个参数都必须明确指定类型.

fun powerOf(number: Int, exponent: Int) {
...
}

默认参数

函数参数可以指定默认值, 当参数省略时, 就会使用默认值. 与其他语言相比, 这种功能使得我们可以减少大
量的重载(overload)函数定义.

fun main(args: Array<String>) {
    // 使用默认值
    doSwim() //打印: "do swim"

    // 使用传递的参数
    doSwim("just do it") // 打印:"just do it"
}

fun doSwim(sports: String = "do swim") {
    println(sports)
}

参数默认值的定义方法, 在参数类型之后, 添加 = 和默认值.

命名参数

调用函数时, 可以通过参数名来指定参数. 当函数参数很多, 或者存在默认参数时, 指定参数名是一种非常便利的功能.

有这样一个函数:

fun register(name: String, no: Int = 1001, sex: Int = 0) {
    println("name: $name, no:$no, sex: $sex")
}

当我们采用默认方式调用时,如果未设定的参数,位于参数列表的第一个,我们可以这样调用

register("li")

其实际上相当于

register("li", 1001, 0)

人如果我们不需要指定所有的参数, 只是修改部分默认的参数值,我们可以这样:

register(name = "wang", no = 1003)

不定数量参数

如果在函数被调用以前,函数的参数(通常是参数中的最后一个)个数不能够确定,可以采用不定量参数方式,定义函数参数列表。比如在创建List时,创建前并不知道预添加至List中多少数据。

fun <T> asList(vararg ts: T): List<T> {
    val result = ArrayList<T>()
    for (t in ts) // ts 是一个 Array
        result.add(t)
    return result
}

调用时, 可以向这个函数传递不定数量的参数:

val list = asList(1, 2, 3)

在一个函数中只可以声明一个参数为vararg。与Java不同的是,在Kotlin中标记为vararg的参数不一定是最后一个。如果标记为vararg的参数不是最后一个,那么vararg参数之后的其他参数, 可以使用命名参数语法来传递参数值, 或者, 如果参数类型是函数, 可以在括号之外传递一个
Lambda表达式.

fun main(args: Array<String>) {

    specialty("苹果", "橘子", addr = "AAA")

}

fun specialty(vararg fruits: String, addr: String) {
    for (fruit in fruits) {
        println("fruit:$fruit, addr: $addr")
    }
}

// Log
fruit:苹果, addr: AAA
fruit:橘子, addr: AAA

返回值

Unit

如果一个函数不返回任何有意义的结果值,那么它的返回类型为Unit .Unit 类型只有唯一的一个值Unit,在函数中,不需要明确地返回这个值
对于返回值为Unit的函数,Unit可以省略。

fun register(name: String, no: Int = 1001, sex: Int = 0): Unit {
    println("name: $name, no:$no, sex: $sex")
}

上例中的代码等价于:

fun register(name: String, no: Int = 1001, sex: Int = 0) {
    println("name: $name, no:$no, sex: $sex")
}

单表达式函数

如果一个函数的函数体只有一个表达式,函数体可以直接写在 “=”之后,也就是这样:

fun double(x: Int): Int = x * 2

如果编译器可以推断出函数的返回值类型, 那么返回值的类型定义是可省略:

fun double(x: Int) = x * 2

明确指定返回值类型

如果一个函数体由多行语句组成的代码段,那么必须明确指定返回值类型,除非函数的的返回值为Unit。

函数的调用

传统用法

函数的调用使用传统的方式:

val result = double(2)

调用类的成员函数时, 使用点号标记法(dot notation):

Sample().foo() // 创建一个 Sample 类的实例, 然后调用这个实例的 foo 函数

中缀标记法(Infix notation)

使用中缀标记法(infix notation)来调用函数, 但函数需要满足以下条件:

  • 是成员函数, 或者是扩展函数
  • 只有单个参数
  • 使用 infix 关键字标记

    class Person(var name: String, var age: Int) {

    // 使用infix 关键字标记,该函数可被中缀标记法法调用
    infix fun printName(addr: String) {
        println("addr: $addr, name: $name")
    }
    

    }

    fun main(args: Array) {
    val person: Person = Person(“Jone”, 20)

    // 使用中缀标记法调用扩展函数
    person printName("AA-BB") // Log: addr: AA-BB, name: Jone
    
    // 上面的语句等价于
    person.printName("AA-BB") 
    

    }

函数的范围

在Kotlin中,函数不仅仅能够被定义为top_level,即包下的函数,还可以被定义为局部函数, 成员函数, 以及扩展函数。函数的定义方式不同,其作用域也不劲相同,当然了,函数的作用域还与修饰符相关,具体可参考 Kotlin-可见性修饰符.

局部函数

所谓的局部函数,就是定义在函数体的内涵数。

fun dfs(graph: Graph) {
    fun dfs(current: Vertex, visited: Set<Vertex>) {
        if (!visited.add(current)) return
        for (v in current.neighbors)
            dfs(v, visited)
    } 

    dfs(graph.vertices[0], HashSet())
}

局部函数可以访问外部函数中的局部变量(也就是, 闭包), 因此, 在上面的例子中, visited 可以定义为一个局部变量。

成员函数

成员函数是指定义在类或对象之内的函数。

class Sample() {
    fun foo() { print("Foo") }
}

对成员函数的调用使用点号标记法。

Sample().foo() // 创建 Sample 类的实例, 并调用 foo 函数

扩展函数

可参考 Kotlin-扩展.

尾递归函数

Kotlin支持一种称为尾递归(tail recursion)的函数式编程方式.这种编程方式,到底是用来干什么的呢?这种方式是基于函数表达式和递归函数,来实现某些基本循环的的算法,采用这种方式可以有效的避免栈溢出的危险。

当函数被关键字tailrec修饰,同时满足尾递归(tail recursion)的函数式编程方式的形式时,编译器就会对代码进行优化, 消除函数的递归调用, 产生一段基于循环实现的, 快速而且高效的代码。

tailrec fun plus(start: Int, end: Int, result: Int): Int = if (start >= end) result else plus(start+1, end, start + result) 

// Test
fun main(args: Array<String>) {

    println(plus(0, 10, 0)) // 打印结果 45
}

上面的代码计算了从start到end之间的所有数的和,并将和与初始值相加后返回。编译器优化产生的代码等价于下面这种传统方式编写的代码:

fun plus(start: Int, end: Int, result: Int): Int {
    var res = result
    var sta = start

    while (sta < end) {
        res += sta
        sta++
    }

    return res
}


注:

  1. 要符合 tailrec 修饰符的要求, 函数必须在它执行的所有操作的最后一步, 递归调用它自身
  2. 如果递归调用后还有其他逻辑代码,不能使用尾递归
  3. 尾递归不能用在try/catch/finally 结构内
  4. 尾递归目前只能用在JVM环境内

高阶函数

所谓的高阶函数,是一种特殊的函数, 它接受函数作为参数, 或者返回一个函数.

fun test(a: Int, b: Int, sumSom: (Int, Int, Int) -> Int): Int {
    if (a > b) {
        return sumSom(0, a, 0)
    } else {
        return sumSom(0, b, 0)
    }
}

tailrec fun sumSom(start: Int, end: Int, result: Int): Int {
    var res = result
    var sta = start

    while (sta <= end) {
        res += sta
        sta++
    }

    return res
}

// 测试类
fun main(args: Array<String>) {
    println(test(10, 9, ::sumSom)) // Log:55
}

从上述代码,在函数test中,sumSom参数是一个函数类型:(Int, Int, Int) -> Int,其是一个函数,接受3个Int参数,返回值是一个Int类型的值。在test中,对传入的参数a,b进行判断,然后执行sumSom()函数并将执行结果返回。

函数类型(Function Type)

对于接受另一个函数作为自己参数的函数, 我们必须针对这个参数指定一个函数类型. 比如, 前面提到的test函数, 它的定义如下:

fun test(a: Int, b: Int, sumSom: (Int, Int, Int) -> Int): Int {
    if (a > b) {
        return sumSom(0, a, 0)
    } else {
        return sumSom(0, b, 0)
    }
}

参数sumSom的类型是(Int, Int, Int) -> Int,也就是说,它是一个函数,接受三个Int类型参数,并且返回一个Int。

Lambda表达式与匿名函数

Lambda 表达式, 或者匿名函数, 是一种”函数字面值(function literal)”, 也就是, 一个没有声明的函数, 但是立即作为表达式传递出去.

max(strings, { a, b -> a.length() < b.length() })

函数 max 是一个高阶函数, 也就是说, 它接受一个函数值作为第二个参数. 第二个参数是一个表达式, 本身又是另一个函数, 也就是说, 它是一个函数字面量. 作为函数, 它等价于:

fun compare(a: String, b: String): Boolean = a.length() < b.length() 

Lambda表达式

Lambda 表达式的完整语法形式, 也就是, 函数类型的字面值, 如下:

val sum = { x: Int, y: Int -> x + y }
  • Lambda 表达式用大括号括起,
  • 它的参数(如果存在的话)定义在 -> 之前 (参数类型可以省略),
  • (如果存在 -> 的话)函数体定义在 -> 之后.

如果Lambda 表达式只有唯一一个参数,在Kolin中可以自行判断出Lambda表达式的参数定义,此时允许我们省略唯一一个参数的定义, 并且会为我们隐含地定义这个参数, 使用的参数名为 it:

ints.filter { it > 0 } // 这个函数字面值的类型是 '(it: Int) -> Boolean'

如果一个函数接受另一个函数作为它的最后一个参数, 那么Lambda表达式作为参数时, 可以写在圆括号之外.

匿名函数

匿名函数看起来与通常的函数声明很类似, 区别在于省略了函数名,函数体可以是一个表达式(如上例), 也可以是多条语句组成的代码段:

fun(x: Int, y: Int): Int {
    return x + y
}

参数和返回值类型的声明与通常的函数一样, 但如果参数类型可以通过上下文推断得到, 那么类型声明可以省略:

ints.filter(fun(item) = item > 0)

对于匿名函数, 返回值类型的自动推断方式与通常的函数一样: 如果函数体是一个表达式, 那么返回值类型
可以自动推断得到, 如果函数体是多条语句组成的代码段, 则返回值类型必须明确指定(否则被认为是
Unit ).

闭包

对于闭包,不同的编程语言对其的定义是不一样,这里收集了一些:

  • 是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。-<

区别

  1. 是否指定返回值的类型

    • Lambda表达式返回值的类型通过以自动推断得到
    • 匿名函数的返回值类型必须手动指定,如果未指定返回值类型,默认返回值类型为Unit
  2. return的行为

    • Lambda 表达式内的 return 将会从包含这个Lambda表达式的函数中返回
    • 匿名函数内的 return 只会从匿名函数本身返
jdk-8u144-linux-x64.tar.gz. 该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包 立即下载

相关推荐

手教你如何使用Simulink和相关工具箱模拟和实现无人机的多机接力信号中继的建模

扩大通信范围:单架无人机的通信能力有限,通过多机接力的方式可以显著扩展通信覆盖范围。提高可靠性:当某架无人机出现故障或电量不足时,其他无人机可以接管其任务,确保通信不中断。适应复杂环境:在山区、森林等复杂地形中,多机接力可以绕过障碍物,建立稳定的通信链路。使用Communications Toolbox中的模块来模拟无线通信链路。例如,可以使用模块模拟噪声信道,或者使用模块计算信号衰减。matlab深色版本。

MHD0815的博客 767

Kotlin函数参数

一、无参数的函数参数 1、回调 //定义 interface OnClickListener { fun onClick() } private fun setOnClickListener(listener: OnClickListener) { } //使用 setOnClickListener(object : OnClickListener { override fun onClick() { } }) 2、闭包 //定义 private fun setO

一杯清泉 2739

SpringBoot SSE避坑指南:当客户端突然断开时服务端SseEmitter的正确回收姿势

本文深入探讨了SpringBoot中SSE连接的生命周期管理,特别是客户端主动断开连接时服务端SseEmitter的正确回收机制。文章重点分析了客户端调用eventSource.cancel()等场景下,如何利用onCompletion()回调进行可靠的资源清理,避免内存泄漏,并提供了防御式编程策略和实战优化建议。

mm9012的博客 778

kotlin高阶函数(1)——将函数作为参数传递

kotlin高阶函数(1)——将函数作为参数传递 问题背景 kotlin语言中,有个高阶函数的概念,那么什么是高阶函数呢? 高阶函数的定义:一个函数如果参数类型是函数或者返回值类型是函数,那么这就是一个高阶函数。 现在我们来看第一个:Kotlin 支持函数作为参数传递,无需构建对象来包装函数。 问题分析 (1)函数类型 k...

baorant24的博客 2292

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1179

Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

Geant4是由欧洲核子研究组织基于C++面向对象技术开发的蒙特卡罗应用软件包,用于模拟粒子在物质中输运的物理过程。由于具有良好的通用性和扩展能力,Geant4在涉及微观粒子与物质相互作用的诸多领域获得了广泛应用。 第一部分 Geant4的基本概念 HEP中的模拟是“虚拟现实”。仿真既可用于在研发阶段帮助设计探测器,又可用于物理研究中了解探测器的响应。为了创建这样的虚拟现实,我们需要对粒子间的相互作用,几何形状和材料进行建模,以便将基本粒子传播到检测器中。我们还需要描述检测器生成原始数据的灵敏度。 Gea

M_M-铭的博客 2万+

Kotlin语言基础(三)- 函数

介绍Kotlin的函数以及特殊函数

userhu2012的博客 1107

增程式永磁电机发电系统电压环二自由度控制器设计

本论文主要研究增程式永磁电机发电系统的电压环二自由度控制器设计。该系统采用二自由度控制策略,通过精确调节电压环和电流环,显著提高系统的动态响应性能和稳态稳定性。基于SVPWM(空间矢量脉宽调制)技术,本研究设计的电压环控制器能够在负载突变和外部扰动的情况下,快速恢复并保持电压稳定,从而满足增程式永磁电机发电系统对电压精度和稳定性的高要求。仿真分析表明,所设计的控制器在不同工况下展现出良好的电压稳定性、较短的响应时间和较低的稳态误差,能够有效抑制电压波动并提高系统的鲁棒性。实验结果表明,控制器在维持高效能和高

weixin_44553616的博客 897

Kotlin函数

函数头 函数参数 (1)默认值参数 (2)具名函数参数 Unit函数 Nothing函数 反引号中的函数名 匿名函数 (1)匿名函数与隐式返回 (2)匿名函数参数 (3)it关键字 (4)匿名函数类型推断 (5)lambda表达式 (6)定义参数是函数的函数 (7)简写 (8)函数内联 1.函数头 定义函数方法的基本形式 2.函数参数 (1)默认值参数 ...

jiangyinglong123456的博客 783

Xilinx Chip2Chip IP核实战:Aurora PHY通信配置与仿真避坑指南

本文深入解析Xilinx Chip2Chip IP核与Aurora PHY的通信配置与仿真优化,提供实战避坑指南。通过AXI协议转换桥实现FPGA间高速数据传输,详细讲解Aurora PHY参数设置、仿真加速技巧及常见问题解决方案,帮助工程师快速部署稳定高效的芯片间通信系统。

g5h6i7j的博客 1007

YOLO26核心模块解析:SimSPPF轻量化空间金字塔池化的原理与优势详解

SimConv作为现代深度学习的基础构建块,其设计虽然简洁,但包含了多项关键技术的有机组合。通过将卷积、批量归一化和激活函数整合为统一模块,SimConv不仅提供了稳定的训练特性和良好的表达能力,还为后续更复杂网络架构的发展奠定了基础。SimConv的成功在于其体现了深度学习设计的核心理念:简洁性与有效性的平衡。它证明了通过合理的技术组合,可以在不显著增加复杂度的前提下大幅提升模型性能。随着深度学习技术的持续发展,SimConv及其变种将继续作为重要的基础组件,推动计算机视觉和人工智能技术的进步。

know_F0727的博客 2619

kotlin 的函数参数

kotlin 的函数参数

shuangrenlong的博客 1084

面向企业架构师的 SAP BTP 全景实践:多云、账户、运行时与端到端开发路径

摘要:SAP BTP为企业提供多云、多运行时(Cloud Foundry/Kyma/ABAP Cloud)的数字化转型平台,支持快速构建扩展应用。关键选择包括:1)根据合规与性能选择区域;2)区分Trial(90天限制)与Free Tier(无期限)方案;3)按场景选择运行时(CF适合微服务/Kyma适合云原生/ABAP Cloud适合S/4HANA扩展)。建议优先使用Free Tier进行POC,并通过BTP Cockpit统一管理,实现从验证到生产的平滑过渡。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 254

我们需要掌握的Kotlin之各种函数

Kotlin的函数可以定义在文件顶部,也就是说不需要创建一个类来持有一个函数。另外,Kotlin函数还包括:本地函数、成员函数、扩展函数、内联函数、高阶函数、泛型函数、递归函数。 一、本地函数 本地函数是函数内部包含另一个函数,也就是函数嵌套,示例代码如下: fun dfs(graph: Graph) { fun dfs(current: Vertex, visited: Set&...

徐福记456 3万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Kotlin进阶——Kotlin的各种函数

#Kotlin的简单语法很好学,接下来让我们开始学习Kotlin的各种常用函数吧 // An highlighted block //applay函数 fun myApplay(){ //apply函数 val task = Runnable { println("运行中") } Thread(task).apply { setDaemon(true) }.start() ...

bulingbulingQAQ的博客 475

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Kotlin系列之扩展函数

简述: 今天带来的是Kotlin浅谈系列的第五弹,这讲主要是讲利用Kotlin中的扩展函数特性让我们的代码变得更加简单和整洁。扩展函数是Kotlin语言中独有的新特性,利用它可以减少很多的样板代码,大大提高开发的效率;此外扩展函数的使用也是非常简单的。我会从以下几个方面阐述Kotlin中的扩展函数。 1、为什么要使用Kotlin中的扩展函数? 2、怎么去使用扩展函数和扩展属性? 3、什么是扩展...

Mikyou的专栏 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Kotlin——函数

简略写法如果一个函数的lambda参数排在最后,,或者是唯一参数,那么括住lambda参数的一对圆括号可以省略"hello"}

紫罗兰与海棠的博客 839

Kotlin扩展函数

Kotlin 扩展函数 1. 为什么需要扩展函数? 我们都知道 Koltin 这门语言与 Java 有非常好的互操作性,并且扩展函数这个新特性可以很平滑与现有Java 代码集成。甚至纯 Kotlin 的项目都可以基于 Java 库或者 Android 中的一些第三方框架库来构建,所以扩展函数非常适合 Kotlin 和 Java 语言混合开发模式。在很多公司一些比较稳定良好的库都是 Java 开发的,也完全没必要去用 Kotlin 语言重写。但是想要扩展库的接口和功能,这时候扩展函数可能就会派上用场。使用

AirField的博客 3215

Kotlin之函数

函数和方法指的是同一个东西 语法规则 fun(function的简写)是定义函数的关键字,无论定义什么函数,都需要用fun来声明 fun后面是方法名,可以随意起,但是编码规范要求最好有一定的意义,能知道这个方法是干什么的 方法名后面是一个括号,里面声明该函数接收什么参数,参数的数量是任意多个用逗号隔开,参数格式是 参数名:参数类型,其中参数名和方法名类似,可以随便定义。如果不接收任何参数,则只保留空括号即可 括号后面是可选的,用于声明该函数返回什么样类型的数据,格式为:参数类型,如果不返回任何数据,则不写

非猿 630

kotlin函数_Kotlin函数

kotlin函数In this tutorial, we’ll be discussing at length, Functions in Kotlin. We’ll discuss everything you need to know about kotlin functions right from the syntax to the various implementations. 在本教...

从零开始的教程世界 827

Kotlin之内置函数

Kotlin之内置函数笔记

七夜聖君的博客 1153

kotlin 高阶函数_Kotlin Lambda表达式,高阶函数

kotlin 高阶函数In this tutorial, we’ll be looking into kotlin higher-order functions and lambda expressions in detail. At the same time, we’ll explore function references, anonymous functions, and closure...

从零开始的教程世界 2657

kotlin函数基础 上

kotlin 函数基础(上) kotlin号称更好的java,不仅支持java的绝大部分语法,还新增了非常多语言特性。函数作为编程语言最重要的核心(我认为没有之一),kotlin的函数对于像我这样的初学者来说“面目狰狞”,本文记录了我学习过程中遇到的各种与函数有关的概念,并对各自的原理做一点点探索。 本文涉及概念:顶层函数、成员函数、抽象函数、lambda函数、高阶函数、嵌套函数、内联函数 剩余概念准备放到下一篇:扩展函数、匿名函数、标准函数、构造函数、委托函数、覆盖函数、挂起函数、泛型函数、回调函数 (如

ljjliujunjie123的博客 582

kotlin函数

一,函数 :完成特定功能的代码块 fun [函数名]([参数列表]):[返回值类型]{ [函数体] } fun [函数名]([参数列表])=表达式 匿名函数:无名氏函数,神一样的存在 fun([参数列表]) ... 二,注意: 功能要单一,望名知义,参数不要太多 三,最牛b的函数 package com.method /** * Created by j...

android大牛MrJing 活动中心 272

kotlin函数返回函数

runBlocking 内部启动的3个协程做耗时操作,从输出可以看到3个协程交叉并发执行,runBlocking 会等到3个协程执行结束后才退出,输出结果有明确先后顺序。一般编程的技法,比如,在Android中,假设在主线程中实现了一个函数,但该函数是耗时操作,毫无疑问,需要将这个函数的实现切入非主线程中操作,那么可以设计一种托管的函数,在托管的函数里面干脏活,处理完成后,把结果抛到主线程。结果1-a: 5 - tid:22。匿名函数:name:zhangphil,age:18,msg:kotlin。

Zhang Phil 1086

Kotlin main函数

程序从main()开始执行;你可以用参数args向程序传入数据;你可以通过命令行或 IDE 设置这些参数;Kotlin 1.3 以后,main()可以没有参数;同一个文件只能有一个带参数的main()和一个不带参数的main();其他写法的main()会被当作普通函数,不会自动运行。现在,你已经学会了使用main()和程序参数了。你可以不改代码,仅通过命令行传参就改变程序行为。这是每个程序员都必须掌握的基础技能!

Hello World! 843
上一篇: Android ImageView 正确使用姿势
下一篇: Kotlin-代理属性(by)
行云间
博客等级 码龄12年 438粉丝 173原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值