`

scala学习笔记(六):函数

 
阅读更多

1、函数定义

 

 /**
    * 函数返回Unit
    */
  def fun() = {
    println("this is a function")
  }

  /**
    * 函数有返回值
    * @return
    */
  def fun1():Int = {1}

  /**
    * 多参数函数
    * @param x 默认0
    * @param y 默认0
    * @return
    */
  def fun2(x:Int = 0, y:Int = 0) = {if(x > y) x else y}

  /**
    * 递归函数 阶乘  必须要指定返回值
    * @param x
    * @return
    */
  def fun3(x:Int):Long = {
    if(x < 1) 1
    else x * fun3(x - 1)
  }

 2、函数调用

 

 

    fun()
    println(fun1())

    println("多参数函数="+fun2(2,5))
    println("使用默认值的多参数函数="+fun2(1)) //默认使用第2个参数的默认值
    println("使用带参数名称的多参数函数="+fun2(y = 2, x = 4))//指明了参数名称就不需要按照顺序向函数传递参数

    println("递归函数解决阶乘5="+fun3(5))

 3、匿名函数

 

   //fun: (Int, Int) => Unit = $$Lambda$1098/1665837086@5be51aa
    val afun = (x:Int,y:Int)=>{println(s"param1=${x} param2=${y}")}
    //param1=2 param2=3
    afun(2,3)


    //无参数匿名函数
    val afun1 = ()=> { System.getProperty("user.dir") }
    afun1()

 4、内嵌函数

 

 

/**
    * 内嵌函数
    * @param x
    */
  def fun5(x:Int): Unit ={
    def fun6(s:Int) = println(s"${s}偶数")
    def fun7(s:Int) = println(s"${s}奇数")
    if(x % 2 == 0) fun6(x)
    else fun7(x)
  }
  fun5(34) 
输出:
34偶数

 5、偏函数

 

 /**
    * 测试偏函数
    * @param date
    * @param message
    */
  def log(date:Date, message:String) = {
    println(date + "----" + message)
  }

调用:
 /**
      * log() 方法接收两个参数:date 和 message。我们在程序执行时调用了三次,
      * 参数 date 值都相同,message 不同。我们可以使用偏应用函数优化以上方法,
      * 绑定第一个 date 参数,第二个参数使用下划线(_)替换缺失的参数列表,并把这个新的函数值的索引的赋给变量
      */
    val date = new Date
    /**
      * logPar: String => Unit = $$Lambda$1201/1696998152@792e8181
      *
      */
    val logPar = log(date, _:String)
    logPar("消息1")
    logPar("消息2")
    logPar("消息3")

    //f: (java.util.Date, String) => Unit = $$Lambda$1205/750996693@684b26b7
    val f = log _
    println(f(date, "消息4"))

 6、函数调用的lazy

 

     /**
      * lazy 只有在使用的时候才会加载  本身这个文件是不存在的
      * 如果不加lazy修饰 会报错 java.io.FileNotFoundException: D:\aa.txt (系统找不到指定的文件。)
      * 加了lazy修饰返回的值  file: scala.io.BufferedSource = <lazy>
      */
    lazy val file = Source.fromFile("D:\\aa.txt")
    for(content <- file.getLines()) println(content)

 7、函数的变长参数

 /**
    * 变长参数
    * @param num
    * @return
    */
  def fun8(num:Int*):Int = {
    if(num.length == 0) 0
    else num.head + fun8(num.tail :_*)
  }

调用:
    //函数的变长参数
    println("1-10累加="+fun8(1,2,3,4,5,6,7,8,9,10))

    /**
      * 上面的调用很不方便,使用下面的方式就很好
      * :_*标注告诉编译器把Range的每个元素当作参数,而不是当作单一的参数传给函数
      */
    println("1-10累加="+fun8(1 to 10 :_*))

输出:
1-10累加=55
1-10累加=55

 

 

 

 

 

分享到:
评论

相关推荐

    Scala学习笔记(全)

    ### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    读书笔记:函数式编程 scala,java8,groovy 学习.zip

    读书笔记:函数式编程 scala,java8,groovy 学习

    Scala学习笔记

    ### Scala学习笔记关键知识点 ...以上内容涵盖了Scala学习笔记中的关键知识点,从并发编程到函数式编程的核心概念,再到Scala语言本身的一些特殊规则和特点,这些都是学习Scala时需要掌握的基础知识。

    读书笔记:基于scala语法学习函数式编程方法.zip

    读书笔记:基于scala语法学习函数式编程方法

    读书笔记:《scala函数式编程》书本学习代码.zip

    读书笔记:《scala函数式编程》书本学习代码

    scala学习资料

    - 函数和高阶函数:学习如何定义和使用函数,以及如何使用高阶函数进行函数式编程。 - 集合:深入研究Scala的集合API,掌握其使用技巧和优化策略。 - 特性与模式匹配:学习如何使用特性来解决多重继承问题,以及如何...

    读书笔记:scala的纯函数式编程数据结构学习.zip

    读书笔记:scala的纯函数式编程数据结构学习

    Scala-学习资料-mht.rar

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发、大数据分析以及构建高性能系统时表现卓越。在"Scala-学习资料-mht.rar"这个压缩包中,包含了关于Scala的学习资料,格式为...

    scala-learn:scala学习笔记

    本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...

    scala讲解笔记 入门及进阶 PDF文档1-5

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理、分布式计算和高性能应用开发。...每个文档都配有实例和注释,便于理解和实践,是Scala学习者宝贵的资源。

    scala学习笔记

    以上内容覆盖了 Scala 编程语言的核心知识点,从基本语法到高级特性,为初学者提供了一个全面的学习指南。Scala 是一门功能强大且灵活的语言,适合于构建大型的、复杂的软件系统。希望这些知识点能够帮助读者更好地...

    读书笔记:《Scala与Clojure函数式编程模式Java虚拟机高效编程》学习代码记录.zip

    读书笔记:《Scala与Clojure函数式编程模式Java虚拟机高效编程》学习代码记录

    Scala详细总结(精辟版++)

    1. 学习曲线陡峭:Scala 语言的学习曲线陡峭,需要一定的编程基础和函数式编程的知识。 2. 与 Java 语言的集成:Scala 语言与 Java 语言的集成需要一定的经验和实践。 3. 工具支持不够完善:Scala 语言的工具支持...

    scala.rar学习笔记和心得

    Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运行于...

    scala的操作笔记

    ### Scala的操作笔记 #### 一、课程目标与学习路径 本课程旨在通过三个阶段的目标来逐步深入学习Scala语言,最终能够灵活运用Scala进行Spark程序的开发,并具备阅读Spark内核源码的能力。 - **初级目标**:掌握...

    scala.rar基础知识,笔记很好的详细

    Scala学习资源Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为: 不太久...

    学习scala好的项目

    在"scala-study"这个文件夹中,可能包含的子文件有练习代码、笔记、教程文档等,这些都是学习过程中的宝贵资料。通过这些资源,初学者可以逐步了解如何使用Scala编写Spark程序,包括如何创建SparkSession、加载数据...

    utility_Scala:Scala编程语言基本和函数式编程(fp)和Spark Scala基本演示| #SE

    -Scala学习注意事项 主要档案 适用于实用程序的Scala脚本 -Scala spark基本演示 Scala基本-变量,数据结构 -Scala基本数据结构: array, list, tuple ,应用function, lambda带有它们的function, lambda基本。 和...

Global site tag (gtag.js) - Google Analytics