08_Scala函数式编程重点

embedded/2024/10/19 4:22:25/

文章目录

  • 函数式编程
  • 1.创建简单函数
  • 2.可变参数
  • 3.默认参数
  • 4.函数式编程,代码简化

函数式编程

函数式编程是对功能进行封装,最终是需要等号 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}

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


http://www.ppmy.cn/embedded/27416.html

相关文章

1.6 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程Jdbc编程,使用Java通过Jdbc对数据库进行基础操作

原理图 用java代码实现连接数据库(mysql)的操作 因为数据库连接需要使用到API和URL,下面简单介绍下API和URL的概念, API: Application Programming Interface应用程序编程接口,就是一套类库 Java中的AP…

Mysql读写分离 | 如何设计

MySQL是一种常用的关系型数据库管理系统,它支持高效地存储和管理大量的结构化数据。在处理大量数据的情况下,为了提高性能和可扩展性,可以采用读写分离的设计。 读写分离是指将数据库的读操作和写操作分别分配到不同的数据库实例上进行处理。…

WEB攻防-.NET特性常见漏洞

目录 前置知识: DLL文件 .NET和DLL文件 C#和DLL文件 关系总结 .NET 配置调试-信息泄露 .NET 源码反编译-DLL 反编译与未授权访问 编译DLL文件 反编译DLL文件 注意事项 案例: 验证代码文件有没有可以绕过(Cookie&Session&…

#ESP32S3R8N8建立工程(VSCODE)点亮LED

1.参考文档 【立创ESP32S3R8N8】IDF入门手册 - 飞书云文档 (feishu.cn)https://lceda001.feishu.cn/wiki/GOIlwwfbIi1SC3k8594cDeFVn8g 2.建立工程 3.运行效果 4.更改配置 5.插播 之前配置的环境是有问题的,就算有自动检测也要仔细检查,必须严格按照以…

程序员与土地的关系

目录 一、土地对人类的重要性 二、程序员与土地的关系 二、程序员如何利用GIS技术改变土地管理效率? 四、GIS技术有哪些运用? 五、shapely库计算多边形面积的例子 一、土地对人类的重要性 土地资源对人类是至关重要的。土地是人类赖…

【C++】---模板进阶

【C】---模板进阶 一、模版参数1、类型参数2、非类型参数 二、模板的特化1、函数模板的特化2、类模板特化(1)全特化(2)偏特化 三、模板分离编译1、模板支持分离编译吗?2、为什么模板不支持分离编译?3、如何…

从拿到快手实习时间线

快手终于oc了,讲一下找实习的时间线吧。职位都是游戏客户端开发相关。 我三月份才发现实习已经开了,所以准备的时间很短,虽然没准备好但担心没坑位于是海投:(回应时间是指收到笔试/简历过筛邮件的时间) 腾讯…

HTTP/1.1、HTTP/2、HTTP/3 的演变

HTTP/1.1、HTTP/2、HTTP/3 的演变 HTTP/1.1 相比 HTTP/1.0 提高了什么性能?HTTP/2 做了什么优化?HTTP/3 做了哪些优化? HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的…