zoukankan      html  css  js  c++  java
  • scala学习(2)

    1.程序的流程控制
    -顺序流程
    -分支流程(选择流程)
    *单分支
    if(条件表达式){
    语句块
    }

    *双分支
    if(条件表达式){
    语句块1
    }else{
    语句块2
    }

    *多分支
    if(条件表达式1){
    语句块1
    }else if(条件表达式2){
    语句块2
    }....else if可以有多个
    else{
    语句块3
    }
    *在scala语言中,分支是有返回值的,返回值是满足条件的分支块最后一行的执行结果;如果每一个分支块
    返回的数据类型不一致,那么就用它们共同的祖先类型作为返回值类型


    -循环流程
    *for
    >语法
    for(变量名:数据类型 <- 数组|集合){

    }
    数据类型可以省略,因为可以通过集合中的元素推断出来

    >范围数据循环 to | until

    >循环守卫
    在循环的过程中,加判断条件
    通过循环守卫或者在循环体中加if判断,可以实现类似continue效果

    >循环步长 by
    只针对于Range集合
    按照指定的步长对数据进行生成

    >循环嵌套
    for(外层循环;内层循环){}

    >循环引入变量
    在循环的时候,定义新的变量,该变量的值受循环变量的影响


    *while
    >while
    >do...while

    *循环中断
    >在scala语言中,没有break关键字,通过抛出异常,并对异常进行处理的方式,来实现类似break的效果
    >Scala提供了Breaks类 break() 和breakable()
    >导入每一个类下的"静态"成员

    2.函数式编程
    -函数的基本语法
    def 函数名(参数列表):返回值类型={
    函数体
    }

    函数类型: (参数形式)=>返回值

    -函数的参数
    *可变长参数
    >在一个参数列表中,至多只能有一个可变长参数
    >如果一个参数列表中,有多个参数,应该将可变长参数放到最后

    *参数默认值
    >在声明函数的时候,函数的形参可以赋默认值
    >如果参数有默认值,那么在调用函数的时候,有默认值的参数可以不用传参,使用默认值作为参数
    >如果参数有默认值,那么在调用函数的时候,也可以传递参数,会用传递的参数替换默认值作为参数

    *带名参数
    在调用函数的时候,我们可以指定给哪个参数进行赋值

    -函数至简原则(能省则省)
    *return可以省略,Scala会使用函数体的最后一行代码作为返回值
    *如果函数体只有一行代码,可以省略花括号
    *返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)
    *如果有return,则不能省略返回值类型,必须指定
    *如果函数明确声明unit,那么即使函数体中使用return关键字也不起作用
    *Scala如果期望是无返回值类型,可以省略等号
    *如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加
    *如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略
    *如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略

    -匿名函数
    *参数的类型可以省略,会根据形参进行自动的推导
    *类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号。
    *匿名函数如果只有一行,则大括号也可以省略
    *如果参数只出现一次,则参数省略且后面参数可以用_代替

    3.高阶函数
    -函数更高级的用法
    -在Scala语言中,函数是一等公民
    *函数可以作为值进行传递
    >语法
    var f = 函数名 _
    >如果明确了变量的数据类型,那么下划线可以省略

    *函数可以作为参数进行传递
    >通过匿名函数
    >扩展函数的功能
    >提高函数的灵活度

    *函数可以作为返回值进行返回
    >函数的嵌套

    >函数链式调用,通过参数传递数据,在执行的过程中,函数始终占据栈内存,容易导致内存溢出

    >闭包
    内层函数访问外层函数的局部变量,会自动延长外层函数局部变量的生命周期,与内层函数形成一个
    闭合的效果,我们称之为闭包

    >柯里化
    &将一个参数列表中的多个参数,拆分为多个参数列表
    &好处1:每一个参数列表表示函数清晰明确
    &好处2:简化闭包代码的编写

    -控制抽象
    *值调用
    传递的是函数执行后的结果

    *名调用
    传递的是代码块
    =>代码块返回值类型

  • 相关阅读:
    N46期第一周作业
    马哥博客作业第五周
    马哥博客作业第四周
    马哥博客作业第三周
    04go条件和循环
    03go运算符
    01go变量和常量
    02vue指令-1
    01vue初识
    05django模板层
  • 原文地址:https://www.cnblogs.com/guziteng1/p/14272522.html
Copyright © 2011-2022 走看看