08_Scala函数式编程&重点

文章目录

函数式编程

复制代码
函数式编程是对功能进行封装,最终是需要等号 def test() = {}		//于python略有不同

1.创建简单函数

复制代码
//    1.定义函数
    def test(): Unit = {
      
    }

牛逼之处就是可以在main中声明函数,且scala中函数可以在任意位置封装

复制代码
函数可以在任意位置声明,方法只能声明在类中
复制代码
关于调用,默认情况下调用函数,如果没有函数调用方法

--上述调用并非就近原则;

--scala中采取 亲函数原则,函数没有调用方法;

--若使用this,调用的必定是方法;类的五大成分

注意:

scala源码中函数的本质就是方法;

函数 没有重写重载的概念

Java中没有函数的概念

scala源码中,方法就是函数,编译后的字节码文件中,函数就是方法

函数编译程方法时,增加了修饰符private static final

函数编译成方法时,函数名会自动发生变化,为了避免和方法名冲突

定义一个函数,功能是传入的字符串的末尾字符改编为大写

复制代码
    def testUP(s : String): String = {

      return s.substring(0,s.length-1)+s.substring(s.length-1).toUpperCase()

    }

    test()

    this.test()

    println(testUP("zhangsan"))		//zhangsaN

2.可变参数

底层实现使用WrappedArray集合实现;

复制代码
    //    2.关于可变参树    加上*就表示可变参数

    def fun2(name: String*): Unit = {
      println(name)
    }

    fun2()
    fun2("zhangsan")

与python同,可变参数只能放到参数列表最后一项

3.默认参数

复制代码
def fun3(name: String,password:String="000000"): Unit = {
  println(s"注册用户${name},密码是${password}")

}
fun3("lisi")		//注册用户lisi,密码是000000

默认参数的定义方式和python略有不同,在类型定义之后使用=来定义

复制代码
和python语法一样,默认参数只能放到末尾;

假设如果默认参数放到前面;解决方法,实参赋值的时候,指定参数进行传参;

复制代码
这种写法及其不负责任,不建议这么写;

4.函数式编程,代码简化

  • -- 1.scala中如果有返回值,return可省

  • -- 2.如果函数的逻辑代码只有一行,那么可以将大括号省略;

  • -- 3.如果通过返回值可以推断出返回值类型,可以省略返回值

  • -- 4.如果函数的参数列表中没有声明参数,可以省略小括号;如果省略小括号,那么调用时候也不能加小括号

  • -- 5.如果逻辑代码Unit函数,内部有return返回值,此时return不起作用

  • -- 6.Unit可省,如果确定函数没有返回值,可以将Unit和 = 同时省略; //注意函数定义是需要返回值后带等号

  • -- 7.def和函数名都可以省略;称之为匿名函数;

    // -- 1.scala中如果有返回值,return可省
    def fun4(name: String, password: String = "000000"): String = {

    复制代码
        s"注册用户${name},密码是${password}"
    
      }
    
      //    -- 2.如果函数的逻辑代码只有一行,那么可以将大括号省略;    --甚至可以写成一行
      def fun5(name: String, password: String = "000000"): String =
    
        s"注册用户${name},密码是${password}"
    
      //    -- 3.如果通过返回值可以推断出返回值类型,可以省略返回值
      def fun6(name: String, password: String = "000000") = s"注册用户${name},密码是${password}"

    // -- 4.如果函数的参数列表中没有声明参数,可以省略小括号;如果省略小括号,那么调用时候也不能加小括号
    def fun7 = "zhalngsan"

    // println(fun7) //zhangsan

    // -- 5.如果逻辑代码Unit函数,内部有return返回值,此时return不起作用
    def fun8:Unit = return "zhangsan"
    def fun9:Unit = "zhangsan" //return可省

    复制代码
      println(fun8)

    // -- 6.Unit可省,如果确定函数没有返回值,可以将Unit和 = 同时省略;
    def fun10{
    "zhangsan" //省略形参,跟着变,省略Unit = ,省略 return
    }
    println(fun10)

    // -- 7.def和函数名都可以省略;称之为匿名函数; //猜测写道某一个东西的内部
    /**
    * def和函数名要省略
    * 返回值类型也需要省略,由逻辑代码自动推断
    * 等号需要增加大于号表示关联;
    */
    ()=>{
    123
    }

// 小结:因为省略了很多内容,所以变量声明和函数声明很相似

相关推荐
冷雨夜中漫步几秒前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴21 分钟前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再24 分钟前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
m0_736919102 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手2 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_2 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934732 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy2 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
黎雁·泠崖3 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
九河云3 小时前
5秒开服,你的应用部署还卡在“加载中”吗?
大数据·人工智能·安全·机器学习·华为云