48-90-Scala-函数式编程基础特性等

news2024/10/6 14:38:33

48-Scala-函数式编程:

函数式编程

1、完全面向对象编程

2、函数式编程,万物皆函数,程序语句的集合,称为函数。类中的函数称之方法。函数无重载重写概念,方法可以。函数可以嵌套

3、函数的定义def test3(s:String):Unit={ println(s) }

4、函数参数,可变参数,多个参数时可变参数放置在最后,参数可设置默认值,可通过参数名对参数赋值

5、至简原则,能省就省略。return可以省略最后一行为返回值。方法体少了花括号可以省略,无返回值可省略=号以及返回类型和unit,如果只关心逻辑,不关心名称,def也可省略(匿名函数,lambda表达式)。(name:String) => { println(name)}

6、高阶函数,函数可以作为值/参数/函数返回值进行传递

7、匿名函数,没有名字的函数就是匿名函数。(x:Int)=>{函数体} x:输入参数类型;Int:表示输入参数类型;函数体:表示具体代码逻辑

地址:\big-data-study\Scala-demo\src\main\scala\zh\myscala01\chapter03

8、函数柯里化&闭包,Test08_ColsureAndCurrying

闭包:如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和他所处的环境,称为闭包(下图基本大体了解)

函数柯里化:把一个参数列表的多个参数,变成多个参数列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xmakns9T-1670683749441)(png/image-20210913204329656.png)]

9、递归:一个函数/方法在函数/方法体内又调用了本身,我们称之为递归调用,Test09_Rescrsion

10、控制抽象:值调用,把计算后的值传递过去。名调用,把代码传递过去 Test10_ControlAbstraction

11、惰性加载:当函数返回值被声明为 lazy 时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行。注意:lazy 不能修饰 var 类型的变量

面向对象:

1、包:package 包名,区分相同名字的类,很好的管理类,控制访问范围。

​ 方案一:com.atguigu.scala。

​ 方案二:一个源文件中可以声明多个 package,子包中的类可以直接访问父包中的内容,而无需导包

package com{
    package atguigu{
        package scala{
        } 
    } 
}

2、 包对象:在 Scala 中可以为每个包定义一个同名的包对象,定义在包对象中的成员,作为其对应包下所有 class 和 object 的共享变量,可以被直接访问。如采用嵌套方式管理包,则包对象可与包定义在同一文件中,但是要保证包对象与包声明在同一作用域中。

3、导包(不用记,了解有即可):

​ 1)和 Java 一样,可以在顶部使用 import 导入,在这个文件中的所有类都可以使用。

​ 2)局部导入:什么时候使用,什么时候导入。在其作用范围内都可以使用

​ 3)通配符导入:import java.util._

​ 4)给类起名:import java.util.{ArrayList=>JL}

​ 5)导入相同包的多个类:import java.util.{HashSet, ArrayList}

​ 6)屏蔽类:import java.util.{ArrayList =>,}

​ 7)导入包的绝对路径:new root.java.util.HashMap

4、定义类和属性等,等同java

5、访问权限,Scala 中属性和方法的默认访问权限为 public,但 Scala 中无 public 关键字。private 为私有权限,只在类的内部和伴生对象中可用。protected 为受保护权限,Scala 中受保护权限比 Java 中更严格,同类、子类可以访问,同包无法访问。private[包名]增加包访问权限,包名下的其他类也可以使用

6、封装,构造器:辅助构造器,构造器参数,函数的名称 this,可以有多个,编译器通过参数的个数及类型来区分。辅助构造方法不能直接构建对象,必须直接或者间接调用主构造方法。构造器调用其他另外的构造器,要求被调用构造器必须提前声明。Test02_Constructor,Test05_ConstrctorParams

7、封装,继承和多态,Test06_Inherit,其中多态,java属性静态绑定,方法动态绑定,scala属性和方法都是动态绑定。

8、抽象类,abstract class Person{} ,抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性,抽象方法:def hello():String //只声明而没有实现的方法,就是抽象方法。继承&重写。Test08_AbstractClass

9、匿名子类,和 Java 一样,可以通过包含带有定义或重写的代码块的方式创建一个匿名的子类。Test9_AnnoymousClass

10、伴生对象(单例对象),Test10_Object,Test11_Singleton

​ (1)伴生对象的 apply 方法,可不使用 new 方法创建对象。

​ (2)如果想让主构造器变成私有的,可以在()之前加上 private。

​ (3)apply 方法可以重载。

​ (4)new 关键字构建对象时,调用的其实是类的构造方法,当直接使用类名构建对象时,调用的其实时伴生对象的 apply 方法。

11、特质(Trait)

​ 1)trait 中即可有抽象属性和方法,也可有具体的属性和方法,一个类可以混入(mixin)多个特质。类似于 Java 中的抽象类。

引入 trait一可替代 Java 接口,二是对单继承机制的一种补充。

​ 2)没有父类:class 类名 extends 特质 1 with 特质 2 with 特质 3 …

​ 有父类:class 类名 extends 父类 with 特质 1 with 特质 2 with 特质 3…

12、动态混入:可灵活的扩展类的功能,创建对象时混入trait,而无需使类混入该trait,new object whit trait

13、特质的叠加:顺序,从右到左叠加

(1)案例中的 super,不是表示其父特质对象,而是表示上述叠加顺序中的下一个特质,即,MyClass 中的super指代 Color,Color 中的super指代Category,Category中的super指代 Ball**。**

(2)如果想要调用某个指定的混入特质中的方法,可以增加约束:super[],例如super[Category].describe()。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0hyLFJzv-1670683749442)(png/image-20210916192541018.png)]

14、特质和抽象类的区别

​ 1.优先使用特质。一个类扩展多个特质是很方便的,但却只能扩展一个抽象类。

​ 2.如果需要构造函数参数,使用抽象类。因为抽象类可以定义带参数的构造函数,而特质不行(有无参构造)。

15、自身类型:自身类型可实现依赖注入的功能

16、类型检查和转换,obj.isInstanceOf[T]: obj 是不是 T 类型。obj.asInstanceOf[T]: obj 强转成 T 类型。classOf 获取对象的类名。

17、枚举类:需要继承 Enumeration。应用类:需要继承 App

18、Type 定义新类型,使用 type 关键字可以定义新的数据数据类型名称,本质上就是类型的一个别名
: obj 强转成 T 类型。classOf 获取对象的类名。

17、枚举类:需要继承 Enumeration。应用类:需要继承 App

18、Type 定义新类型,使用 type 关键字可以定义新的数据数据类型名称,本质上就是类型的一个别名

学习路径:https://space.bilibili.com/302417610/,如有侵权,请联系q进行删除:3623472230

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子书资源:分享10个非常好用的免费书籍资源网站

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

Qt扫盲-QCheckBox 理论总结

QCheckBox 理论总结1. 简述2. 分组3. 状态&信号4. 外观&快捷键1. 简述 QCheckBox是一个选项按钮,可以 选中 或 未选中。复选框通常用于表示应用程序中可以启用或禁用的功能,而不会影响其他功能。可以实现不同类型的行为。一般是很多个联用的。 …

Cookie、Session、Token比较

1 Cookie cookie 指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成,发送给浏览器,浏览器把cookie以 key-value 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该…

基于适应度-距离平衡的人工生态系统优化算法解决瞬态稳定性约束最优潮流问题(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Awaitility同步异步工具介绍与RocketMQ中实战

在编写测试用例的时候遇到有异步或者队列处理的时候经常会用到 Thread.sleep() 等待来进行测试。例如:DLedger 测试选举的过程。当DLedger Leader下线。此时DLedger会重新发起选举,这个选举的过程是需要一定时间。很多时候在测试代码中就会使用 Thread.s…

b站黑马的Vue4小时快速入门案例代码——计数器

目录 目标效果: 重点原理: 1.创建Vue实例的时候: 2.v-on——为元素绑定事件 3.v-text——【解析文本用】设置标签的文本值 v-text【简写】为{{}} 实现步骤: 代码部分: 1.计数器模板.html(全是重点&#xf…

m基于粒子群算法的分布式电源DG的优化配置

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着科技的发展,人民生活水平的不断提高,使得当今社会的发展对能源环保性和供电的可靠性的要求也不断提高。集中式供电系统由于污染大、可靠性差及操作难度大等缺陷越来越…

MySQL数据库基础知识7,查询的执行过程

目录一、拆分查询二、分解关联查询三、查询的执行过程四、优化器的一些优化手段1、重新定义关联表的顺序2、将外连接转化为内连接3、使用增加变换规则4、优化count()、max()、min()5、预估并转化为常量表达式6、覆盖索引扫描7、提前终止查询五、MySQL如何执行关联查询六、查询执…

【HTML期末学生大作业】 制作一个简单HTML宠物网页(HTML+CSS)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Linux 学习笔记 04 —— 文件管理和磁盘管理相关命(2) 详解 grep 命令

用法 less 参数 文件 常用用法 很实用的搜索功能。 向前搜索 / : 使用一个模式进行搜索,并定位到下一个匹配的文本 n : 向前查找下一个匹配的文本 N : 向后查找前一个匹配的文本 向后搜索 ? : 使用模式进行搜…

【C语言】程序环境和预编译

如若这一生注定磨难,自由与真我千金不换 文章目录一、程序的翻译环境和运行环境1.翻译环境(编译(预编译、编译、汇编)链接)2.运行环境(程序入口main 到 程序终止)二、预处理(预编译…

SpringMVC(四)域对象共享数据(干货、超详细)

【环境说明】 SpringMVC项目中使用的是thymeleaf视图解析器 <!-- Spring和thymeleaf的整合--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version>&l…

网络爬虫数据解析的四种方式之XPath

文章目录前言四种数据解析方式数据解析之XPathXPath介绍在浏览器中安装XPath helper插件XPath使用方法通过浏览器测试插件是否安装成功通过python代码实现用XPath来解析数据前言 快期末了&#xff0c;有个数据挖掘的大作业需要用到python的相关知识&#xff08;这太难为我这个以…

C语言基础—数据类型和规范

基本的数据类型和规范 C语言基础—数据类型和规范&#x1f51c; 首先 C 语言所允许的合法符❗ 数据类型和关键字图示❗❗ string 不是C语言关键字&#x1f914; 关于关键字更多的参考⚛ 常量与变量常量定义和分类指数表示法字符常量的转义字符变量定义❗变量(标识符)的命名规范…

『NLP学习笔记』长序列预测论文LTSF-Linear解读

长序列预测论文LTSF-Linear解读 文章目录一. 引言二. 直接多步(DMS)和迭代多步(IMS)的对比三. 基于变压器的Transformer解决方案3.1. 预处理(preprocessing)3.2. 词向量(embedding)3.3. 编码(encoder)3.4. 解码(encoder)四. 一个简单得令人尴尬的Baseline五. 代码解读5.1. 数据…

MySQL字符串索引创建方案

字符串字段添加索引 MySQL是支持前缀索引的&#xff0c;也就是说&#xff0c;你可以定义字符串的一部分作为索引。默认地&#xff0c;如果你创建索引的语句不指定前端长度&#xff0c;那么索引就会包含整个字符串。 # 包含整个字符串 alter table table_name add index index…

liteos连接器脚本隐藏的指针问题

一,数据拷贝引起的指针问题 大家想一下,一个指针指向的内存地址处的数据,假设拷贝到了另外一个地方,那么这个时候我们的指针还是指向原来的位置,那么就会导致问题。为什么提出这个问题呢?因为我们前面讲到了liteos的data段的拷贝,那么对于data段的访问的指针是不是也要…

供应Pyrene-PEG-Biotin,Biotin-PEG-Pyrene,芘丁酸-聚乙二醇-生物素

一&#xff1a;产品描述 1、名称 英文&#xff1a;Pyrene-PEG-Biotin&#xff0c;Biotin-PEG-Pyrene 中文&#xff1a;芘丁酸-乙二醇-生物素 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Biotin PEG Pyrene PEG 4、分子量&#xff1a;可定制&#xff0c;Pyrene-PE…

知识点15--k8s应用入门

本篇我们用上一篇知识点搭建的k8s集群&#xff0c;认识k8s的入门级使用方法&#xff0c;无法完全体现出k8s的性能&#xff0c;注意不是高级的应用。顺便说一点k8s的操作都依靠于命令&#xff0c;甚至是修改配置文件也提供了编辑命令&#xff0c;命令很像js的选择器&#xff0c;…

视频截图修复方法是什么?这些方法和步骤教会你

在日常的生活中&#xff0c;你是否会遇到过这样的情况&#xff1a;每当在观看一些视频的时候&#xff0c;看到自己喜欢的剧情片段时&#xff0c;就会想要将其截取下来留作收藏&#xff0c;但有时候可能会出现截出来的图片画面是模糊的&#xff0c;这该怎么办呢&#xff1f;其实…