1.8 掌握Scala函数

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

一、声明函数

(一)显式声明函数

案例演示
(1)加法函数
1.8 掌握Scala函数

package net.huawei.day08

import scala.io.StdIn

/**
 * 功能:显式声明函数
 * 作者:
 * 日期:2023年03月20日
 */
object Example01 {
  def add1(a: Int, b: Int): Int = {
    return a + b
  }

  def add2(a: Int, b: Int): Int = {
    a + b
  }

  def add3(a: Int, b: Int) = {
    a + b
  }

  def add4(a: Int, b: Int) = a + b

  def add5(a: Int, b: Int) {
    println(a + " + " + b + " = " + (a + b))
  }

  def main(args: Array[String]): Unit = {
    print("a = ")
    val a = StdIn.readLine().toInt
    print("b = ")
    val b = StdIn.readLine().toInt

    println(a + " + " + b + " = " + add1(a, b))
    println(a + " + " + b + " = " + add2(a, b))
    println(a + " + " + b + " = " + add3(a, b))
    println(a + " + " + b + " = " + add4(a, b))
    add5(a, b)
  }
}

运行程序,查看结果
1.8 掌握Scala函数

(2)阶乘函数
1.8 掌握Scala函数

package net.huawei.day08

import scala.io.StdIn

/**
 * 功能:显式声明阶乘函数并调用
 * 作者:
 * 日期:2023年03月20日
 */
object Example02 {
  def factorial(n: Int): Long = {
    var jc = 1
    (1 to n).foreach(i => jc = jc * i)
    jc
  }

  def main(args: Array[String]): Unit = {
    print("n = ")
    val n = StdIn.readInt()
    println(n.toString + "! = " + factorial(n))
  }
}

``
![在这里插入图片描述](https://img-blog.csdnimg.cn/4fdd2b47b6e74111afef75280cf3271c.png)

```java
package net.huawei.day08

import scala.io.StdIn

/**
 * 功能:隐式声明函数
 * 作者:
 * 日期:2023年03月20日
 */
object Example03 {
  val add1 = (a: Int, b: Int) => {a + b}
  val add2 = (a: Int, b: Int) => a + b
  val add3 = (n: Int) => n + 1

  def main(args: Array[String]): Unit = {
    print("a = ")
    val a = StdIn.readInt()
    print("b = ")
    val b = StdIn.readInt()

    println(a + " + " + b + " = " + add1(a, b))
    println(a + " + " + b + " = " + add2(a, b))
    println(a + " + " + 1 + " = " + add3(a))
  }
}

运行程序,查看结果
1.8 掌握Scala函数

(二)隐式声明函数

案例演示
(1)加法函数
1.8 掌握Scala函数

(2)三整数加法函数和阶乘函数
隐式声明三整数相加函数和阶乘函数
1.8 掌握Scala函数
(3)打印直角三角形
方法一、采用传统的双重循环实现
1.8 掌握Scala函数
方法二、采用单重循环配上流间变量来实现
1.8 掌握Scala函数
方法三、采用映射算子(map())和遍历算子(foreach())来实现
1.8 掌握Scala函数
(4)计算1 + 2 + 3 + …… + 100的值
不采用循环,而采用归约算子(reduce())算子来完成,归约算子传入一个匿名函数_ + _或(x, y) => x + y
1.8 掌握Scala函数

二、Scala函数种类

(一)成员方法

案例演示
任务:显示文件中长度超过15的行
1.8 掌握Scala函数
1.8 掌握Scala函数

package net.huawei.day08

import scala.io.Source

/**
 * 功能:显示文件中长度超过15的行
 * 作者:
 * 日期:2023年03月20日
 */
object Example04 {
  def filter(line: String, len: Int): Boolean = {
    line.length > len
  }

  def getLinesFromFile(path: String, len: Int) = {
    val lines = Source.fromFile(path).getLines()
    for (line <- lines if filter(line, len)) yield line
  }

  def main(args: Array[String]): Unit = {
    val lines = getLinesFromFile("text.txt", 15)
    for (line <- lines) println(line + " " + line.length)
  }
}

1.8 掌握Scala函数

(二)局部函数

案例演示
任务:采用局部函数显示文件中长度超过15的行
1.8 掌握Scala函数

package net.huawei.day08

import scala.io.Source

/**
 * 功能:采用局部函数显示文件中长度超过15的行
 * 作者:
 * 日期:2023年03月20日
 */
object Example05 {
  def getLinesFromFile(path: String, len: Int) = {
    def filter(line: String, len: Int): Boolean = {
      line.length > len
    }

    val lines = Source.fromFile(path).getLines()
    for (line <- lines if filter(line, len)) yield line
  }

  def main(args: Array[String]): Unit = {
    val lines = getLinesFromFile("text.txt", 15)
    for (line <- lines) println(line + " " + line.length)
  }
}

运行程序,查看结果
1.8 掌握Scala函数

(三)匿名函数

案例演示
任务:将函数赋值给常量
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:将函数赋值给常量
 * 作者:
 * 日期:2023年03月20日
 */
object Example06 {
  def sum(a: Int, b: Int): Int = a + b

  def main(args: Array[String]): Unit = {
    // 直接调用显式函数
    val r = sum(100, 150)
    println("r = " + r)

    // 将函数赋值给常量
    val sum1 = sum(_, _)
    val r1 = sum1(100, 150)
    println("r1 = " + r1)

    // 将函数固定一个参数后赋值给常量
    val sum2 = sum(_: Int, 100)
    val r2 = sum2(150)
    println("r2 = " + r2)

    // 将隐式函数赋值给常量
    val sum3 = (a: Int, b: Int) => a + b
    val r3 = sum3(100, 150)
    println("r3 = " + r3)
  }
}

运行程序,查看结果
1.8 掌握Scala函数

(四)高阶函数

案例演示
任务1、演示函数作为函数的参数
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:演示函数作为函数的参数
 * 作者:
 * 日期:2023年03月20日
 */
object Example07 {
  def printStr: (String) => Unit = {
    x => println(x)
  }

  def main(args: Array[String]): Unit = {
    val cities = List("北京", "上海", "深圳", "泸州")
    cities.foreach(printStr)
  }
}

运行程序,查看结果
1.8 掌握Scala函数
任务2、演示函数作为函数的返回值
1.8 掌握Scala函数

package net.huawei.day08

import scala.io.StdIn

/**
 * 功能:演示函数作为函数的返回值
 * 作者:华卫
 * 日期:2023年03月20日
 */
object Example08 {
  def findRecipe(name: String): (String) => (String) = {
    if (name == "鸡肉") {
      (food: String) => {
        println("把" + food + "切丁,放在锅里烧,出锅")
        "美味的宫保鸡丁"
      }
    } else if (name == "鸭子") {
      (food: String) => {
        println("把" + food + "洗干净,放在火上好,烤熟")
        "美味的北京烤鸭"
      }
    } else {
      (food: String) => {
        println("把" + food + "洗净,放在锅里烧,烧熟")
        "美味的食物"
      }
    }
  }

  def cook(food: String): String = {
    val recipe = findRecipe(food)
    recipe(food);
  }

  def main(args: Array[String]): Unit = {
    print("食材:")
    val food = StdIn.readLine()
    println(cook(food))
  }
}

运行程序,查看结果
1.8 掌握Scala函数
1.8 掌握Scala函数
1.8 掌握Scala函数

三、神奇占位符

案例演示

任务1、演示过滤集合
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:过滤集合
 * 作者:
 * 日期:2023年03月20日
 */
object Example09 {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    println(list)

    println("奇数子列表:" + list.filter((num: Int) => {
      num % 2 == 1
    }))

    println("偶数子列表:" + list.filter(_ % 2 == 0))
  }
}

运行程序,查看结果
1.8 掌握Scala函数
任务2、演示处理集合
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:处理集合
 * 作者:
 * 日期:2023年03月20日
 */
object Example10 {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4, 5, 6, 7)

    println(list)

    list.foreach((x: Int) => {
      print((x * 10) + "\t")
    })
    println()

    println(list.map((x: Int) => {
      x * 10
    }))

    println(list.map(_ * 10))
  }
}

运行程序,查看结果
1.8 掌握Scala函数
任务3、演示参数占位符
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:参数占位符
 * 作者:
 * 日期:2023年03月20日
 */
object Example11 {
  def main(args: Array[String]): Unit = {
    def sum(a: Int, b: Int, c: Int): Int = a + b + c

    // 直接调用原函数
    println("sum = " + sum(3, 4, 5))

    // 全部参数使用占位符
    val sum1 = sum(_, _, _)
    println("sum1 = " + sum1(3, 4, 5))
    var sum2 = sum _
    println("sum2 = " + sum2(3, 4, 5))

    // 部分参数使用占位符
    val sum3 = sum(_, 4, _)
    println("sum3 = " + sum3(3, 5))
  }
}

运行程序,查看结果
1.8 掌握Scala函数

四、闭包

案例演示

1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:演示闭包
 * 作者:
 * 日期:2023年03月20日
 */
object Example12 {
  def main(args: Array[String]): Unit = {
    var x = 100

    def sum(n: Int): Int = {
      var sum = 0
      var flag = true
      for (i <- 1 to n if flag) {
        sum = sum + i
        if (x > 50) {
          flag = false
        }
      }
      x = 0
      sum
    }

    println("x = " + x)
    println("sum = " + sum(100))
    println("x = " + x)

    x = 25
    println("x = " + x)
    println("sum = " + sum(100))
    println("x = " + x)
  }
}

运行程序,查看结果
1.8 掌握Scala函数

五、可变参数

案例演示

任务1、演示可变参数
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:演示可变参数
 * 作者:
 * 日期:2023年03月20日
 */
object Example13 {
  def sum(nums: Int*): Int = {
    var sum = 0
    for (num <- nums) {
      sum = sum + num
    }
    sum
  }

  def main(args: Array[String]): Unit = {
    println(sum(1))
    println(sum(1, 2))
    println(sum(1, 2, 3))
    println(sum(1, 2, 3, 4))
    println(sum(1, 2, 3, 4, 5))
    println(sum(1, 2, 3, 4, 5, 6))
    println(sum(1, 2, 3, 4, 5, 6, 7))
  }
}

运行程序,查看结果
1.8 掌握Scala函数
任务2、定义任意多个数据求和的函数
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:任意多个数据求和的函数
 * 作者:
 * 日期:2023年03月20日
 */
object Example14 {
  def addData(str: String, nums: Int*): String = {
    var sum = 0
    for (num <- nums) sum = sum + num
    str + ": " + sum
  }

  def main(args: Array[String]): Unit = {
    println(addData("泸州", 5, 6, 9))
    println(addData("南京", 6, 3, 9, 7, 5))
  }
}

运行程序,查看结果
1.8 掌握Scala函数

六、尾递归

案例演示

任务:计算1 + 3 + 5…,总和刚好超过50就返回
1.8 掌握Scala函数

package net.huawei.day08

/**
 * 功能:计算1 + 3 + 5…,总和刚好超过50就返回
 * 作者:
 * 日期:2023年03月20日
 */
object Example15 {
  def main(args: Array[String]): Unit = {
    def fx(x: Int, sum: Int): Int = {
      if (sum > 50) sum
      else if (x >= 100) sum
      else if (x % 2 == 0) {
        print((x + 1) + "\t")
        fx(x + 1, sum)
      } else {
        fx(x + 1, sum + x)
      }
    }
    println("\nsum = " + fx(0, 0))
  }
}

运行程序,查看结果
1.8 掌握Scala函数文章来源地址https://www.toymoban.com/news/detail-475727.html

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

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

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

相关文章

  • 2023_Spark_实验六:Scala面向对象部分演示(二)(IDEA开发)

    7、Scala中的apply方法() 遇到如下形式的表达式时,apply方法就会被调用: Object(参数1,参数2,......,参数N) 通常,这样一个apply方法返回的是伴生类的对象;其作用是为了省略new Object的apply方法举例: 8、Scala中的继承 Scala和Java一样,使用extends扩展类。 案例一:

    2024年02月10日
    浏览(51)
  • 【C++】泛型编程 ③ ( 函数模板 与 普通函数 调用规则 | 类型匹配 | 显式指定函数模板泛型类型 )

    上一篇博客 【C++】泛型编程 ② ( 函数模板与普通函数区别 ) 中 , 分析了 函数参数 类型匹配 下的 普通函数 与 函数模板 的调用规则 ; 为 函数模板 重载了 普通函数 , 普通函数有指定的类型 ; 传入实参 , 调用 普通函数 还是 模板函数 , 是有一定的规则的 ; 普通函数 与 传入实

    2024年02月21日
    浏览(42)
  • 【C++】泛型编程 ① ( 函数模板 | 函数模板概念 | 函数模板意义 | 函数模板定义语法 | 函数模板调用语法 | 显式类型调用 | 自动类型推导 )

    在 C++ 语言中 , 泛型编程 的 核心就是 函数模板 和 类模板 ; 函数模板 Function Template 是 C++ 语言 中的 重要特性 ; 函数模板概念 : 建立一个 \\\" 通用函数 \\\" , 不指定该函数的 函数返回值类型 和 函数参数类型 , 仅使用 \\\" 虚拟类型 \\\" 代表 上述 两种类型 , 该 \\\" 通用函数 \\\" 就是 \\\" 函数模

    2024年02月19日
    浏览(37)
  • 1.8万字详解实时数仓建设方案及大厂案例

    一、实时数仓建设背景 关注公号: 数元斋 1. 实时需求日趋迫切 目前各大公司的产品需求和内部决策对于数据实时性的要求越来越迫切,需要实时数仓的能力来赋能。传统离线数仓的数据时效性是 T+1,调度频率以天为单位,无法支撑实时场景的数据需求。即使能将调度频率

    2024年02月02日
    浏览(44)
  • 掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南

    变量是用于存储数据值的容器。 在 C# 中,有不同类型的变量(用不同的定义),例如: int - 存储整数(没有小数点的整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99 char - 存储单个字符,如 \\\'a\\\' 或 \\\'B\\\'。 Char 值用单引号括起来 string - 存储文本,如

    2024年01月17日
    浏览(47)
  • 【12JavaScript 事件】掌握JavaScript事件:详细教程、实例演示,打造交互动感网页!

    JavaScript事件是指页面或元素上发生的交互动作,例如点击按钮、鼠标移动、键盘输入等。了解和处理事件是构建交互式Web应用程序的重要基础。本教程将详细介绍JavaScript事件的基本概念、事件处理程序、事件类型以及常见的事件用法。 事件处理程序是处理事件的函数,它会

    2024年02月08日
    浏览(66)
  • Scala集合常用函数 - 高级计算函数

    水善利万物而不争,处众人之所恶,故几于道💦   1. 过滤 - filter   2. 转换/映射 - map   3. 扁平化 - flatten   4. 扁平化+映射 - flatMap   5. 分组 - groupBy   6. 简化(规约) - reduce   7. 折叠 - fold   8. 函数小练习 1. 过滤 - filter  遍历一个集合并从中获取满足指定

    2024年02月17日
    浏览(43)
  • Scala集合常用函数 - 初级计算函数

    水善利万物而不争,处众人之所恶,故几于道💦   1. 求和   2. 求乘积   3. 最大值   4. 最小值   5. 排序     sorted     sortBy()     sortWith() 以List集合为例: 1. 求和 2. 求乘积 3. 最大值 4. 最小值 5. 排序 1. sorted  对一个集合进行自然排序,通过传递隐式的

    2024年02月16日
    浏览(33)
  • 【C++】友元函数 ( 友元函数简介 | 友元函数声明 | 友元函数语法 | 友元函数声明不受访问控制限制 | 友元函数参数要求 )

    在 C++ 语言中 , \\\" 友元函数 \\\" 是 与 类 相关联的函数 , \\\" 友元函数 \\\" 不是类的成员函数 , 但是可以访问类的 private 私有成员 和 protected 保护成员 ; 友元函数可以是 全局函数 本类的成员函数 其他类的成员函数 友元函数 是 类的 朋友 , 在 友元函数 中 , 可以修改 类对象 中的 私有

    2024年01月20日
    浏览(42)
  • C语言函数声明以及函数原型

    所谓声明(Declaration),就是告诉编译器我要使用这个函数; 函数声明的格式,是去掉函数定义中的函数体,并在最后加上分号; 也可以不写形参,只写数据类型: dataType  functionName( dataType1, dataType2 ... ); 函数声明给出了函数名、返回值类型、参数列表(重点是参数类型)等

    2024年02月01日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包