学习Kotlin~函数

这篇具有很好参考价值的文章主要介绍了学习Kotlin~函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有名函数

学习Kotlin~函数

函数参数
  • 不打算传入值参,可以预先给参数指定默认值
	//如果不打算传入值参,可以预先给参数指定默认值
	private fun fix(name: String, age: Int = 2) {
		println(name + age);
	}
	
	//调用的时候
	fix("hhhh");
	fix("hasee", 30);
  • 有名的函数值参,如果使用命名值参,可以不用管值参的顺序
   fix(age = 100, name = "华为")//如果使用命名值参,可以不用管参数的顺序

参数的顺序相反了,也不会影响最终结果。

Unit函数

Kotlin中没有返回值的函数叫Unit函数。

Nothing类型
  • TODO函数的任务就是抛出异常,就是永远别指望它能运行成功,返回Nothing类型
	val i = 30
	if (i > 3) {
	    println(i)
	} else {
	    TODO("argument is too small")
	}
反引号中函数名
  • kotlin中可以使用空格和特殊字符对函数命名,不过函数名要用一对反引号括起来
    fun `**iohguoippmnwjeeinwpeinwini1309-**`() {
        println("I am weird.")
    }

Android中不允许的

  • 为了支持Kotlin和Java互操作,而Kotlin和Java却又保留了各自关键字,不能作为函数名,使用反引号括住就能避免任何冲突
    比如:
	public class MyJava {
	    //is在Kotlin中是关键字
	    public static void is() {
	        System.out.println("MyJava");
	    }
	
	    public static void isConnect() {
	        System.out.println("MyJava isConnect");
	    }
	}

如果想在Kotlin中引用,那么要加上反引号

	MyJava.`is`();//is在kotlin中是关键字

匿名函数

  1. 不取名字的函数,我们称之为匿名函数;
  2. 匿名函数通常整体传递给其他函数,或者从其他函数返回;
  3. 匿名函数被称为lambda,kotlin中也称lambda为闭包;
参数
  • 匿名函数可以不带参数,可以带一个或多个参数
  • 带参数时,参数类型放在匿名函数的类型定义中,参数名放在函数体定义中
    /**
     * 匿名函数声明参数时候,需在括号内声明类型,变量名需写在函数体中
     */
    val blessingFunction1: (String) -> String = { name ->
        val holiday = "New Year"
        "$name, happy ${holiday}"
    }
it关键字参数
  • 定义只有一个参数的匿名函数时,可以使用it关键字来表示参数名。
  • 匿名函数有两个参数时候,it关键字不起作用了
    /**
     * 匿名函数声明只有一个参数的时候,可以不用在函数体中声明变量名,可以省略
     * 可以使用it关键字
     */
    val blessingFunction2: (String) -> String = {
        val holiday = "New Year"
        "$it, happy ${holiday}"
    }
匿名函数的类型推断
  • 如果已把匿名函数作为变量赋值给函数变量,就不需要显示指明变量类型
不带参数的类型推断

比如下面把一个函数变量赋给一个函数变量类型,这种写法的比较完整的。

    val blessingFunction: () -> String = {
        val holiday = "New Year"
        "happy $holiday"
        "happy ${holiday}"
    }

使用类型推断可以下面这样来写;不用显示指明匿名函数类型,就表示一个无参的返回值类型为String的函数变量。

    val blessingFunction = {
        val holiday = "New Year"
        "happy $holiday"
        "happy ${holiday}"
    }
带参数的类型推断
  • 匿名函数的参数名和 参数类型必须有
    val blessingFunction1: (String) -> String = { name: String ->
        val holiday = "New Year"
        "$name, happy ${holiday}"
    }

使用类型推断可以下面这样来写;不用显示指明匿名函数类型
就表示传入一个String类型参数,返回值类型为String的函数变量。

    val blessingFunction1 = { name: String ->
        val holiday = "New Year"
        "$name, happy ${holiday}"
    }
函数类型作为变量
  • 匿名函数可以当做变量赋值给函数类型变量,就像其他变量一样,匿名函数可以在代码里传递
  • 匿名函数会隐式或自动返回函数体最后一行语句的结果;
    /**
     * 声明一个函数类型变量
     * 函数类型是由参数和返回值决定的
     * ()->String : 无参数,返回类型String
     * 匿名函数默认最后一行是作为返回值,省略return
     */
    val blessingFunction: () -> String = {
        val holiday = "New Year"
        "happy $holiday"
        "happy ${holiday}"
    }
函数类型作为值参
传lambda【匿名函数】
  • 函数有参数,并且参数是函数类型变量
    /**
     * 类型推断
     */
    val discount2 = { name: String, hour: Int ->
        val currentYear = "2027"
        "${currentYear}年,双11${name}促销倒计时,还剩${hour}小时。"
    }

    showOnBoard("卫生纸", discount2);

    //具名函数
    fun showOnBoard(goodsName: String, showDiscount: (String, Int) -> String) {
        val hour = (1..24).shuffled().last();//乱序去最后一位
        println(showDiscount(goodsName, hour));
    }
  • 一个函数的lambda参数排在最后,或者是唯一的参数,那么括住lambda圆括号可以省略

上面的调用可以使用如下的写法;文章来源地址https://www.toymoban.com/news/detail-509100.html

    showOnBoard("卫生纸") { name: String, hour: Int ->
        val currentYear = "2027"
        "${currentYear}年,双11${name}促销倒计时,还剩${hour}小时。"
    }

    //具名函数
    fun showOnBoard(goodsName: String, showDiscount: (String, Int) -> String) {
        val hour = (1..24).shuffled().last();//乱序去最后一位
        println(showDiscount(goodsName, hour));
    }
传函数引用
  • 函数引用可以把一个具名函数转化成值参;使用::操作符,后跟具名函数
	/**
	 * 可以使用函数引用,使用::操作符,后跟要引用的函数名
	 */
	fun main() {
	    //
	    showA("家用电器", ::sh);
	}
	
	fun sh(name: String, age: Int): String {
	    val currentYear = "2027"
	    return "${currentYear}年,双11,${name}促销活动倒计时还剩${age}小时"
	}
	
	
	fun showA(goodsName: String, sh: (String, Int) -> String) {
	    val hour = (1..24).shuffled().last();
	    println(sh(goodsName, hour))
	}
函数类型作为返回值
	//定义一个函数返回类型
	fun showDetail(): (String) -> String {
	    val currentYear = "2027"
	    val hour = (1..24).shuffled().last()
	    //可以引用作用域之外的变量,kotlin中的lambda就是闭包
	    return { name: String ->
	        "${currentYear}年,双11,${name}促销活动倒计时还剩${hour}小时"
	    }
	}

到了这里,关于学习Kotlin~函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习Kotlin~函数式编程

    高阶函数:以函数为参数或返回函数 函数式编程范式主要依赖于高阶函数返回的数据,这些高阶函数专用于处理各种集合 这些高阶函数可方便的联合多个同类函数构建链式操作以创建复杂的计算行为 函数类别 一个函数式应用通常由三大类构成:变换transform、过滤filter、合并

    2024年02月12日
    浏览(41)
  • 学习Kotlin~函数

    函数参数 不打算传入值参,可以预先给参数指定默认值 有名的函数值参,如果使用命名值参,可以不用管值参的顺序 参数的顺序相反了,也不会影响最终结果。 Unit函数 Kotlin中没有返回值的函数叫Unit函数。 Nothing类型 TODO函数的任务就是抛出异常,就是永远别指望它能运行成

    2024年02月11日
    浏览(38)
  • 有名管道(FIFO)的学习笔记

    创建 命令, mkfifo name 函数, int mkfifo(const char *pathname, mode_t mode); 设置错误号; 向管道中写数据👇: 从管道读数据👇:

    2024年02月16日
    浏览(35)
  • 使用vscode传入参数的方式进行debug

    对配置文件进行如下配置: 注意:相关的文件参数要设置绝对路径

    2024年02月19日
    浏览(38)
  • 【python】python根据传入参数不同,调用不同的方法

    大家好,我是木头左。 今天介绍三种不同方法实现根据传入参数不同,调用不同的方法。 使用条件语句 在Python中,可以使用条件语句(如if-elif-else语句)来根据传入的参数调用不同的方法。以下是一个示例: 在上述示例中,我们定义了三个不同的方法(method1,method2和met

    2024年02月09日
    浏览(40)
  • python argparse传入布尔参数不生效的解决方法

    在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如\\\"--flag True\\\"或者\\\"--flag False\\\"。 但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。 参考代码: 执行上面的代码:python3 test.py --flag False

    2024年02月13日
    浏览(35)
  • kotlin学习(二)泛型、函数、lambda、扩展、运算符重载

    Kotlin 中的类可以有类型参数,与 Java 类似: 创建这样类的实例只需要提供类型参数即可: 如果类型参数可以推断出来,例如从构造函数的参数或者从其他途径,就可以省略类型参数: String作为Object的子类,就可以直接将子类对象赋值给父类,这个操作即达到了 型变 。 但是

    2024年02月09日
    浏览(39)
  • 使用postman做接口测试传入大批量动态参数的方法

    postman是一个非常好用的接口测试工具,而且功能也很强大,今天只简单说一下使用postman如何对一个接口传入大批量参数进行测试的方法。 以我测试的平台为例,我们的平台是做在线教育平台的,我模拟的场景是老师有一门课叫ABC,现在需要有1000个学生加入ABC这门课。我们不

    2024年01月23日
    浏览(59)
  • 【Python】PySpark 数据计算 ① ( RDD#map 方法 | RDD#map 语法 | 传入普通函数 | 传入 lambda 匿名函数 | 链式调用 )

    在 PySpark 中 RDD 对象 提供了一种 数据计算方法 RDD#map 方法 ; 该 RDD#map 函数 可以对 RDD 数据中的每个元素应用一个函数 , 该 被应用的函数 , 可以将每个元素转换为另一种类型 , 也可以针对 RDD 数据的 原始元素进行 指定操作 ; 计算完毕后 , 会返回一个新的 RDD 对象 ; map 方法 , 又

    2024年02月14日
    浏览(54)
  • 【c语言】函数的数据传递原理 | 数组传入函数方法

    创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡𖥦)!!  主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ    函数基本概念知识:函数的基本概念、含义、结构  

    2023年04月23日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包