为了账号安全,请及时绑定邮箱和手机立即绑定

Scala程序设计—基础篇

辰方 其它
难度初级
时长 2小时13分
学习人数
综合评分9.63
93人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 集合的归约:

    reduceLeft(匿名函数):将集合中的元素,按匿名函数的规则进行处理,处理的结果的类型和集合元素的类型一致

    reduceLeft(op:  (T,T)  => T)

    foldLeft(初始值)(匿名函数):将集合中的元素与初始值,按匿名函数的规则进行处理,处理的结果类型与初始值类型一致。

    foldLeft(z  : U)(op: (U,  T) =>U)

    查看全部
  • list-map高阶函数:

    map(匿名函数):映射出新的集合

    flatMap(匿名函数):将元素为集合的集合,转换为普通元素的集合


    查看全部
    0 采集 收起 来源:Scala list-map

    2019-11-07

  • List的高阶函数:

    filter(判断函数):遍历集合,保留符合判断函数的元素

    toList:将字符串变成List[Char]集合

    takeWhile(判断函数):遍历集合,根据判断函数截取集合元素

    查看全部
  • scala中数据集合类型:

    Set :无序元素

    Seq : 有序元素

    Map:键值对


    val  a = List (1,2,3,4,5)

    val b = 0 :: a        ::  元素和集合连接,元素只能在前

    结果  val b = List (0,1,2,3,4,5)

    ::: 集合和集合连接

    head   取集合的第一个元素

    tail      生成伪列表(去除第一个元素,输出含有剩余元素的集合)

    isEmpty 判断集合是否为空(不为空false,为空true)



    查看全部
  • def sum(f: Int => Int)(a: Int)(b: Int): Int = {

        @annotation.tailrec
        def loop(n: Int, acc: Int): Int = {
          if (n < a) {
            println(s"n=${n},acc=${acc}")
            acc
          } else {
            println(s"n=${n},acc=${acc}")
            loop(n - 1, acc + f(n))
          }
        }
        loop(b, 0)
      }                                               //> sum: (f: Int => Int)(a: Int)(b: Int)Int

      sum(x => x)(1)(5)                               //> n=5,acc=0
                                                      //| n=4,acc=5
                                                      //| n=3,acc=9
                                                      //| n=2,acc=12
                                                      //| n=1,acc=14
                                                      //| n=0,acc=15
                                                      //| res0: Int = 15

      sum(x => x * x)(1)(5)                           //> n=5,acc=0
                                                      //| n=4,acc=25
                                                      //| n=3,acc=41
                                                      //| n=2,acc=50
                                                      //| n=1,acc=54
                                                      //| n=0,acc=55
                                                      //| res1: Int = 55

      def sum2(f: Int => Int)(a: Int)(b: Int): Int = {
        @annotation.tailrec
        def loop(n: Int, acc: Int): Int = {
          if (n > b) {
            println(s"n=${n},acc=${acc}")
            acc
          } else {
            println(s"n=${n},acc=${acc}")
            loop(n + 1, acc + f(n))
          }

        }
        loop(a, 0)
      }                                               //> sum2: (f: Int => Int)(a: Int)(b: Int)Int
      sum2(x => x)(1)(5)                              //> n=1,acc=0
                                                      //| n=2,acc=1
                                                      //| n=3,acc=3
                                                      //| n=4,acc=6
                                                      //| n=5,acc=10
                                                      //| n=6,acc=15
                                                      //| res2: Int = 15

      sum2(x => x * x)(1)(5)                          //> n=1,acc=0
                                                      //| n=2,acc=1
                                                      //| n=3,acc=5
                                                      //| n=4,acc=14
                                                      //| n=5,acc=30
                                                      //| n=6,acc=55
                                                      //| res3: Int = 55

    查看全部
    0 采集 收起 来源:例子

    2019-11-05

  • 递归函数:n!

    def factorial(n: Int): Int =

        if (n <= 0) 1

        else n * factorial(n - 1)


    尾递归函数:对递归函数的优化

      def factorial(n: Int, m: Int): Int =
        if (n <= 0) m
        else factorial(n - 1, m * n)                  //> factorial: (n: Int, m: Int)Int

      factorial(5, 1)                                 //> res0: Int = 120

      factorial(5,1)的计算逻辑:

      (5,1)=>(5-1,5*1)=>(4-1,5*1*4)=>(3-1,5*1*4*3)=>(2-1,5*1*4*3*2)=>(1-1,5*1*4*3*2*1)=>5*1*4*3*2*1


    注:scala中也有while,do ...  while,for循环语法,但其运行逻辑不符合函数式编程思想,所以不建议使用,而建议使用递归实现循环

    查看全部
  • 柯里化语法:把方法的参数列表中的参数,分别取出,单独放到小括号中。

    例如:def  add(x: Int, y: Int) = x + y     正常方法定义

              def  add(x: Int)(y: Int) = x + y     柯里化语法

    在开发中可以利用柯里化方法基础,简单实现新方法功能,而不需要重新完全定义一个新函数

    查看全部
    0 采集 收起 来源:Scala 柯里化

    2019-11-01

  • def  greeting() =(name : String) => {s"Hello  $name"}

    def  greeting() =(name : String) => {"Hello"+" "+name}

    为相同返回值的函数

    查看全部
  • 高阶函数:

    函数作为参数或者返回值的函数


    匿名函数:

    (形参) => {函数}

    查看全部
  • try 表达式: 基本和java中try catch 相似

    _ 下划线代表通配符,也就是代表任何输出

    match 表达式:类似java中的switch

    exp  match {

     case p1 => val1

     case p2 => val2

     ...

     case _ => valn

    }


    查看全部
  • for comprehension  循环

    for{

         x <- xs   // 遍历 xs ,每循环一次将xs中的一个值赋给x

         y = x + 1

         if (y > 0)

    } yield y 

    yield 输出一个List

    println 一个一个输出


    查看全部
  • 代码块Block:{表达式;表达式}

    或者

    {

    表达式

    表达式

    }

    代码块也是一个表达式,其最终求得的值是最后一个表达式的值。

    scala中函数的定义:

    def    函数名 (参数:参数类型,参数:参数类型):返回值类型={

    函数的表达式

    }

    查看全部
  • 详细运行过程加深理解
    查看全部
    0 采集 收起 来源:求值策略

    2019-10-31

  • Scala里有2种求值策略:

    Call by Value    对函数实参求值,且仅求值一次 如:   def foo(x: Int) = x

    Call by Name   函数实参每次在函数体内被用到时都会求值  如:

    def foo(x: => Int) = x

    恰当的运用这2中求值策略,会提高代码的运行效率

    查看全部
    0 采集 收起 来源:求值策略

    2019-10-31

  • 柯里化函数:把具有多个参数的函数转换成一条函数链,每个节点上是单一参数

    def curriedAdd(a: Int)(b: Int) = a + b

    val addOne = curriedAdd(1)_ // 偏应用函数,只有b是灵活可变的。

    //1传给变量a,_为通配符,

    addOne(2) //3     2将传递给b


    查看全部
    0 采集 收起 来源:Scala 柯里化

    2019-10-09

举报

0/150
提交
取消
课程须知
本课程是Scala的基础教程,虽然对学员的基础不做要求,但是学员最好有一门编程语言的经验,这样会更容易理解课程里的一些概念。
老师告诉你能学到什么?
1、函数式编程的基本概念 2、Scala的开发环境 3、高阶函数 4、表达式求值策略 5、Scala Immutable Collection简介

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!