《scala 编程(第3版)》学习笔记1

掌握Scala编程:《快学Scala第二版》全面指南 Scala,作为一门集成了面向对象编程和函数式编程特性的多范式编程语言,自其诞生之初就吸引了大量的关注。本章将带你进入Scala的世界,从基础语法开始,逐步深入,帮助你搭建起对这门语言的理解框架。类型推断是指编译器根据上下文自动推断出变量或表达式的类型。在Scala中,几乎所有的类型声明都可以省略,编译器能够根据变量的初始赋值推断出其类型。这种方式不仅减少了代码的冗余,还能使代码更加简洁明了。类型推断的重要性在于它促进了更灵活的编程实践,提升了开发效率,并且使得代码更加易于维护和重构。 阅读详情

《scala 编程(第3版)》学习笔记

持续更新中…
在这里插入图片描述

第2章 入门1
  1. 函数式编程的核心一,函数是一等的。P9
  2. 函数式编程的核心二,程序操作应当将输入映射成输出。不要有副作用。副作用是指改变了环境量。P10。原因:函数相互不纠缠,更可靠,更容易复用。P38
  3. 函数是递归的,必须显示给出函数的结果类型。P25
  4. 函数字面量: 参数列表=> 函数体,加参数类型时,必须用括号。(x:Int)=>2*x。 P31。若类型可靠类型推断实现,则可省略括号。a.foreach(x=>x+2)。P147。
  5. 函数字面量只接收单个参数时,可不写参数。arr.forecch(println)。P31
第3章 入门2
  1. new用来创建对象或类的实例。实例可参数化可接收类型和参数:val a=new 对象名[类型](参数),如 val a=new Array[Int](3)。P33
  2. 通用规则:如果方法只接收一个参数,则调用他它的时候,可不用.和(),如 0 to 2为 (0).to(2)。P35 这叫操作符表示法,任何方法都可以是操作符,若有多个参数,则可把多参数写在()里,如a fun (c,d)。P79
  3. 通用规则:a(i)实际上是a.apply(i)的简写。i可换成多值。P36
  4. 通用规则:a(i)="hello"实际上是a.update(i,"hello")。P36
  5. 注意区分类的方法和对象的方法。P37
  6. Array可变,List不可变。a(1)=2可以,l(1)=2不可以。P38
  7. List操作:1)拼接 l1_2=l1:::l22)前面添加l2=3::l1,常量时间完成3)追加: l2=l1:+3少用!列表越长追加时间越长。用追加的话可用ListBuffer再转List。P40
  8. 右操作元:方法名一冒号:结尾,是右操作元,3::l1//l1.::(3)P39
  9. Nil可表示空列表,即List(),l1=1::2::3::Nil等价于’''l1=List(1,2,3)```P40
  10. List方法:count,init,tail, forall,sort。fill, tabulate。 P42
  11. 元组:也不可变,和List不同的是可装不同元素。P42
  12. 元组一个用处是函数返回多个对象时使用。P42
  13. 元组用._N取值,原因:t(N)形式时t.apply(),apply要求返回一致的类型,而元组支持不同类型返回。P43
  14. +=: a+="1",有的是简写a=a+"1",有的是方法a.+=("1")。P45
  15. ->: a -> b 实际上是 a.->(b),返回的是元组(a,b)。scala允许任何对象调用->,通过隐式转换实现。P47
  16. 用reduce方法来减少var的使用,如 arr.reduceLeft((a,b)=>b)。P53
第4章 类和对象

(第10章 组合和继承 会有更多详细的介绍)

  1. 类的成员包括 字段(field)和方法(method) P57
  2. private 指明私有字段,只能被类内方法访问。P58
  3. 不当做断句:1)行末是句点或中缀操作符 (+,-,*等) 2)下一行以不能作为语句开头的词开头 3)行尾在()和[]内。P62
  4. 单例对象用来实现类似java类的静态成员能力。和类的定义很像,把class换成object。当有类名和单例对象同名时,单例对象叫伴生对象,类叫伴生类。他们可以相互访问对方私有成员,且必须在同一个源码文件中定义。P63
  5. 类的实例,无法访问伴生对象中的方法。P63
  6. 单例对象不接受参数,不能被new实例化,只在代码首次访问时才被初始化。P65
  7. 没有伴生类的单例对象叫孤立对象,孤立对象一般用于把方法归集到一起或者定义应用程序入口。P65
  8. 所有应用程序的对象,需要有main函数,且结果输出为Unit。P65
  9. 脚本需要以计算结果表达式结尾,否则以脚本方式跑脚本会报错。P66
  10. fsc来编译非脚本文件。编译后,可直接 scala 类名 参数来调用scala应用程序。P67
  11. App特质可省略main外壳。直接args使用参数。P68
  12. 类的定义可以为空,即class A和 class A{}都可以,是一样的。P272
// 类定义
class 类名[(参数列表)]{//注意,区别于函数,没有=
   //类的定义
}

// 单例对象
object 类名{ //注意,不接受参数
   //类的定义
}

//例子
class A{val a=1}

// 继承 
class A(a:Int,..) extends B {
   ...
}

// 类的参数问题
//定义时带参数
class A(a:Int,b:Int)={
   //直接使用a,b
}
val c1=new A(1,2)
val c2= new A //报错

//通过辅助构造函数
class A={
   def this(a:Int,b:Int)={
   this()//必须先调用主构造函数
   //直接使用a,b
   }
}
val c1= new A(1,2)
val c2= new A //也存在 

第5章 基础类型和操作
  1. Int,Long,Short,Byte整数字面量有两种,0xca(或0Xca十六进制),123(十进制)或123L。P71
  2. shell总是以十进制打印整数。P71
  3. 赋值给Short和Byte,只要在合法取值内即可。val a:Byte=23。P72
  4. 浮点字面量:十进制数+小数点(+e/E+F/D)如:12.34e13D。P72
  5. 字符字面量:'原字符'或'\uUnicode码'。P73
  6. Unicode码可出现在scala程序的任何位置,本意时让非ASCII的Unicode字符在源文件中也能用ASCII码表示。val B\u0041\u0044=1等价于val BAD=1。P74
  7. """|原生字符串“”“.stripMargin有较多坑,不同环境调用的换行符不同(\n或\r\n),导致预期不符。P75
  8. 符号字面量(略)P75
  9. 布尔字面量 true,false。P76
  10. 字符串插值。P77
    • s: s" abc\ndtef${表达式}"。
    • raw: 和s一样,只不过里面的\不转义,raw" abc\ndtef${表达式}"。
    • f: java.util.Formatter中给出的语法。例f"${math.Pi}%.5f"。默认为%s。
  11. 任何方法都可以是操作符。P79
  12. 前缀操作符是unary_操作符的简写,unary(一元的),如-7 为 7.unary_-。仅-、+、!、~可用作前缀操作符。自定义前缀操作符也只能选这四个,如自定义一个unary_!方法。P80
  13. 后缀操作符是不接受参数,且在调用时不用括号和句点的方法。如7 toLong。P81
  14. 约定俗成:如果方法有副作用,则要保留括号。如println()。如果没有副作用,则可用后缀操作符法表示。如s toLowerCase。P82
  15. &&和||是短路的,&和|是非短路的。P83
  16. 位操作:按位与&,按位或|,按位异或^,按位取反~ P85
  17. 位移操作:<<左移,>>右移,>>>无符号右移。<<和>>>自动填充0,>>用左侧最高位填充。P85。
  18. 相等性:==,!=可放心用于所有对象,已做好了null值处理,如a == null。P87
  19. 操作符优先级:为保证程序可读性,建议老实用括号标出优先级。复杂难懂的直接查资料。P89
  20. 富操作:scala的基础类都可自动隐式转换成富类型,从而获得更多方法。如0 max 5就是Int类型隐式转换成了scala.runtime.RichInt。P92
第6章 函数式对象

本章主要讨论不可变对象。

  1. 不可变对象优势P95:
    • 容易推理,时不变。
    • 自由传递。可变对象则需做保护式拷贝。
    • 可做哈希表里的键。
  2. 劣势P95:
    • 不能做局部更新,每次都要完整拷贝。
  3. 主构造器、辅助构造器与私有构造器
  4. Scala中,每个类都有主构造器,但并不以this定义。主构造器会执行类定义中的所有语句,即定义时{}中的所有内容。
class YourClass{
   ...
}
  1. 辅助构造方法以def this(...)开始。每个辅助构造器都必须以一个对先前已定义的其他辅助构造器或主构造器的调用开始。P102
// 构造器
class Student {
    private var name = " "
    private var age = 0
 
    def this(name: String){     //辅助构造器1
        this()                  //调用主构造器
        this.name = name
    }
    def this(name: String,age: Int){        //辅助构造器2 
        this(name)                          //调用前一个辅助构造器
        this.age = age
    }
}
  1. require函数的使用。P98
  2. 类的类参数不能直接引用,想要实例引用参数,则要把它们做成字段。P99
scala> class Rational(n:Int,d:Int)
defined class Rational

scala> val a=new Rational(1,2)
a: Rational = Rational@5c669da8

scala> a.n
<console>:14: error: value n is not a member of Rational
       a.n
  1. 自引用。关键字this指向当前执行方法的调用对象。有时this可省略,有时不可省。P100
  2. 私有化。private字段标识,只能在类定义内部访问,外部是访问不到的(博主注:即通过实例或者类名无法访问)。P103。复习:伴生对象和伴生类可相互访问私有成员。 私有成员不能被继承。
  3. 定义操作符。def 操作符,如def +(that: Cls){},定义出来的操作符,任遵守操作符优先级。如a+b*c,还是a+(b*c)。
  4. Scala的常量一般用首字母大写驼峰命名。
  5. 方法与函数:Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
//定义,:,=都不是必须的
def functionName ([参数列表]) [: [return type]] [[=][方法实现]
//例:
def a: Int={1+1}
def a={1+1}//等价
def a{1+1}//等价
Scala编程(第三版)中英文.zip Scala编程(第三版)中英文,代码全 Martin Odersky 是Scala 编程语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,同时也是Typesafe, Inc.(已更名为Lightbend)的创始人。他的研究方向是编程语言和系统,更具体地说,就是如何将面向对象和函数式编程风格有机地结合在一起。自2001 年起,他的主要精力集中在设计、实现和改进Scala 上。在此之前,他作为Java 泛型的合作设计者参与了Java 编程语言的开发,同时也是当前javac 参考实现的作者。他还是ACM 院士。Lex Spoon 是Semmle Ltd. 的一名软件工程师。他在EPFL 作为博士后围绕着Scala 开展了两年的工作。他拥有Georgia Tech 的博士学位,在那里他的主攻方向是动态编程语言的静态分析。除Scala 外,他还帮助开发了各类编程语言,包括动态语言Smalltalk、科学计算语言X10,以及支撑Semmle 的逻辑编程语言。他和他的夫人一起生活在Atlanta,他们有两只猫和一只吉娃娃。Bill Venners 是Artima Inc. 的主席,Artima 开发者网站(ww.artima.com)的发行人,以及Escalate Software, LLC 的联合创始人。他著有《Inside theJava Virtual Machine》,这是一本面向程序员讲解Java 平台架构和内部实现原理的书。他在《JavaWorld》杂志上的专栏很受欢迎,主题涵盖Java 内部实现、面向对象的设计和Jini。Bill 从Jini 社区创立之初便十分活跃,领导了Jini 社区的ServiceUI 项目,其API 成为Jini 服务事实上的UI 标准。他还是ScalaTest 的主要开发者和设计者,一个面向Scala 和Java 开发者的开源测试工具。 高宇翔,资深软件开发工程师和系统架构师,同时也是Scala在国内的早期布道者和实践者,曾译有《快学Scala(第2版)》、《快学Scala》(第1版)和《Scala编程》(第1版)等专业书籍。 立即下载

相关推荐

scala编程中文pdf

scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第11 章列表、数组、映射、集及其他315 第12 章文件和进程367 第13 章Actors 和并发401 第14 章命令行任务440 第15 章Web 服务.475 第16 章数据库和持久化510 第17 章与Java 交互531 第18 章简单构建工具(SBT)551 第19 章类型589 第20 章惯用法.612

Programming in Scala(Scala编程 第五版)书中讲解与实例代码

21章(上下文参数) 22章 (扩展方法) 23章 (类型族) 简介。第23章最后Json序列化的例子。

weixin_45101742的博客 1328

scala编程电子书

scala编程指导文档,书中详细介绍scala语言的编程风格,并提供了很多具体使用示例,是学习使用scala语言编写spark程序的好帮手。

Scala编程(第四版)

scala编程读书笔记

qq_45080791的博客 1195

Scala编程 pdf

内含Scala编程PDF版书籍 可详细学习Scala编程 内含Scala编程PDF版书籍 可详细学习Scala编程

尚硅谷_韩顺平_Scala语言核心编程_PDF密码解除1

第 1 章 SCALA 的概述 11.1 学习 SDALA 的原因11.2 SCALA 语言诞生小故事 1以及 JVM 的关系分析图21.4 SCALA 语言的

Scala之父Martin Odersky作序推荐的Scala速学版(第3版)出版

Scala 是一个很有吸引力的选择。最后但同样重要的是, Scala 是静态类型语言, 允许编译器发现错误,这样就不至于要等到程序运行起来之后才能发现这些错误, 造成时间 上的浪费。本书是一本系统地介绍Scala语言的入门图书,针对Scala 3进行了全面的更新,不仅覆盖了Scala语言的基础知识,而且涵盖了许多更复杂的概念,并最终深入到非常高级的内容。本书共分20章,首先介绍了Scala语言的基础概念,以及控制结构和函数、数组操作、映射、Option、元组、类、对象和枚举、包、导入和导出、继承、文件和。

人邮异步社区 1465

STM32+ST7789屏实战:手把手教你打造物理按键控制的3级菜单GUI(附完整代码)

本文详细介绍了如何使用STM32和ST7789屏构建物理按键控制的3级菜单GUI系统。从硬件架构设计、SPI驱动配置到菜单状态机实现,提供了完整的代码示例和优化技巧,帮助开发者快速掌握嵌入式GUI开发的核心技术。

iii12的专栏 236

豆瓣9.6分,Scala编程圣经第5版隆重来袭

要说Scala编程界的圣经,那必须是这本蜚声世界的、由Scala 语言缔造者Martin Odersky编写的—— 《Scala编程》 Programming in Scala 本书全面涵盖了整个编程语言、重要类库及其背后理念,全面且强大,是Scala领域当之无愧的王者之作! 本书上市14年来,紧跟语言版本持续迭代,不断以豆瓣评分8.9、9.2、9.4的成绩刷新着领域的天花板! 其中第三版的中文版更是以9.6高分傲视群雄。 第四版的中文版也收到不少读者的好评! 如今,这部长青经典之作又迎来了一次重大

博文视点(北京)官方博客 3万+

Windows下Delft3D安装全攻略:从申请许可到编译运行(避坑指南)

本文详细解析了Windows系统下Delft3D的完整安装流程,涵盖环境准备、许可获取、源码编译到性能调优的全过程。针对中国用户常见的网络问题和系统兼容性痛点,提供了经过验证的解决方案,特别强调Intel Fortran编译器匹配、环境变量配置等关键步骤,帮助水利工程师高效完成这一水动力学模拟工具的部署。

weixin_28736355的博客 548

Tesseract OCR 字库训练教程:提高识别率进阶版

通过 Tesseract 字库训练,你可以提高 OCR 对特定文本或字体的识别能力。训练过程包括准备训练数据、生成标签文件、运行训练工具,以及将训练结果集成到实际项目中。虽然训练过程需要一些时间和精力,但对于需要高精度文本识别的场景来说,字库训练是非常有效的提升识别率的方法。

小蜗牛的珍贵百宝箱 1868

Scala编程语言入门(1)

文章目录Scala编程语言入门Scala简介搭建开发环境安装JDK安装 Scala SDK安装IDEA的scala插件scala的REPL交互式解释器Scala语法基础scala中声明变量scala中数据类型scala中的条件表达式scala中的块表达式循环1. for循环2. while循环方法和函数1. 方法2. 函数3. 方法和函数的区别4. 方法转换为函数数组、元组、映射数组1. 定长数组2. 变长数组3. 遍历数组4. 数组常用操作元组1. 定义元组2. 示例3. 访问元组映射Map1. 不可变M

yangwei2048的博客 3万+

kettle连接达梦资源库数据库插件

kettle自定义插件plugin database plugin 达梦插件 dm插件

weixin_42122126的博客 2170

Scala 的学习笔记

Scala 是 Scalable Language 的简写,是一门多范式的编程语言。Scala 是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。Scala 也是一种函数式语言,其函数也能当成值来使用。Scala 提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。

weixin_45866849的博客 4738

使用 EasyExcel 实现 百万级数据导入导出

在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。大数据的导入和导出,相信大家在日常的开发、面试中都会遇到。很多问题只要这一次解决了,总给复盘记录,后期遇到同样的问题就好解决了。好啦,废话不多说开始正文!1.如此大批量数据的导出和导入操作,会占用大量的内存实际开发中还应限制操作人数。2.在做大批量的数据导入时,可以使用jdbc手动开启事务,批量提交。

houxian1103的博客 2700

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

实验1-scala编程

1.掌握Scala语言的基本语法、数据结构和控制结构;2.掌握面向对象编程的基础知识,能够编写自定义类和特质;3.掌握函数式编程的基础知识,能够熟练定义匿名函数。熟悉Scala的容器类库的基本层次结构,熟练使用常用的容器类进行数据;4.熟练掌握Scala的REPL运行模式和编译运行方法。

qq_63163795的博客 2781

PyCharm配置SSH和SFTP远程连接服务器

关于这篇博文,主要因为公司企业都是通过本地测试,同步到服务器进行跑动,舍友看着同事丝滑的操作,让我做个教程。本着钻研的精神,写下了这篇博客记录 关于pycharm这个软件,只有专业版才有远程连接的这个配置,社区版没有(同事一再强调要专业版,学生认证还可申请免费) 关于SSH和SFTP都是一种协议 具体知识点补充可看我这篇文章: 【计算机网络】常见面试题集锦(全) SSH:提供安全通道进行远程登录 SFTP协议可以远程文件传输获取等,数据的安全传输主要由SSH连接提供

码农研究僧的博客 5533

scala基础教程:《scala 编程(第3版)》学习笔记(全)

当作一个无参函数使用。说明这点的作用是在做scala测试的时候,ScalaTest框架,会把测试代码当作无参函数传入test函数中。这样也利用了传名函数不会马上计算结果的特征。所有需要类型参数的地方,都被认为是一个“点”,这些点可分为协变点、逆变点、不变点。由于函数和字段在同一个命名空间,所以可以把无参函数和字段相互替换使用。,Function1是逆变和协变同时存在的。本章相当于15章 的进阶版本,所以放在这里先讲。(第10章 组合和继承 会有更多详细的介绍)本章主要讨论不可变对象。new 类名(参数)

Code_LT的博客 1015

Unity之Hololens2开发MRTK Profile详解

配置 MRTK 的主要方式之一是使用基础包中的配置文件。场景中的主要对象具有活动配置文件 - 一个 ScriptableObject。顶级 MRTK 配置配置文件包含主核心系统的每个核心的子配置文件数据,每个主核心系统都旨在配置其相应子系统的行为。此外,这些子配置文件也是 ScriptableObjects,因此可以包含对低它们一级的其他配置文件对象的引用。实质上,有一个包含已连接配置文件的完整树,这些配置文件构成了如何初始化 MRTK 子系统和功能的配置信息。

TxNet 1035

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Scala学习笔记:Scala编程进阶

Scala函数式编程、Scala中的集合、Scala高级特性

lrxcmwy2的博客 2480

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Scala编程基础

目录 一 Scala概述 1.1 什么是scala 1.2 为什么要学scala 1.3 Spark函数式编程初体验 二 Scala开发环境 2.1 安装JDK 2.2 安装Scala 2.2.1 Windows安装Scala编译器 2.2.2 Linux中安装Scala编译器 2.3 IDEA安装 2.4 Scala插件离线安装 2.5 IDEA创建Scala工程 ...

我的祖传代码 3813

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

spark编程基础python版 pdf_《Spark编程基础(Scala版)》.PDF

《Spark编程基础(Scala版)》.PDF《Spark编程基础(Scala版)》教材官网:/post/spark/温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文字《Spark编程基础(Scala版)》课程介绍(PPT版本号:2018年春季学期)林子雨厦门大学计算机科学系扫一扫访问教材官网 E-mail: ziyulin@主页:/...

weixin_39936792的博客 3702

《scala 编程(第3版)》学习笔记2

第7章-第9章

Code_LT的博客 581

Scala学习笔记

lambda表达式: 就等用于scala中匿名函数,使用函数式接口时,我们对函数式接口的简化操作,使用函数式接口大部分场景下都是使用匿名内部类的形式实现的,匿名内部类最核心的就是重写函数式接口的唯一的抽象方法把lambda就是简化匿名内部类的操作的。,Scala函数当中,形参是可以赋予默认值的,一旦形参赋予默认值,那么调用参数的时候,带有默认值的形参就可以不用传递参数了,带有默认值的形参一般要求放到形参列表的最后,如果没有放到最后,那么调用的时候,给其他形参传递参数,需要带有参数名传递。

cai_4的博客 666
上一篇: Scala 加密和哈希函数
下一篇: pyspark运行原理
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值