亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!