下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文第2章/温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文第2章Scala语言基(PPT版本号:2017年春季学期:20172.1Scala2.1Scala2.2Scala2.3 象编程基2.4免 2.1Scala计2.1Scala计算机的缘编程范Scala简.1 (AlonzoChurch)设计了“λ演算”,这2.1.1英国数学2.1.1英国数学 ·图灵采用了完全不同的设计思路,.1 (JohnVon 提出了在数字计算 .2 .2 2.1.3Scala2.1.3Scala 象的语2.1.4Scala2.1.4Scala所有的操作系统都可以运行Scala程序,包括Window、Linux、UnixMac安装安装使用Scala第1个Scala程序 具体可以参照厦门大学数据 博客 安装安装OpenJDK安装安装 使用Scala使用Scala在 命令提示符界面中输入“scala”命令后,会进入scala命令行提示符状态第1个第1个Scala程序 注意,上面命令中一定要加入"-classpath,否则会出现“Nosuchfileclasson 2.2Scala2.2Scala 象编程基.1 小技巧:如何在Scala 小技巧:如何在ScalaScala的数据类型包括:Scala的数据类型包括:Byte、Char、Short、、Long、Float、Double成员,比如,的全名是scala.。对于字符串,Scala用java.lang.String字面量字面量操作符:在操作符:在Scala中,可以使用加(+)、减、乘(*)、除(/)、余数(%)等操作符,而且,这些操作符就是方法。例如,53和(5).+(3)前者是后者的简写形式,这里的+是方法名,是类中的一个方法。对于基本数据类型,除了以上提到的符外,对于基本数据类型,除了以上提到的符外,Scala每个基本类型都有一个对应的富包装类,例如有一个 型,然后再调用相应的方法。例如:3max •Range可以支持创建不同数据类型的数值序列,包括、 readFloat、readLong、readCharread f()函 f()都在对象Predef中定义,该对象默 如 想把文件保存到一个指定的目录下,就需要给出文件路Scala不支持Scala不支持Java中的“受检查异常”(checkedexception),importimportimporttryvalf=new文件操}catchcaseex:FileNotFoundException文件不存在时的操caseex:IOException发生I/O错误时的操}finallyfile.close()确保关闭文}2.2.2if2.2.2ifforififwhilewhileforfor forforforfor for可以给每for可以给每 都添加一个“守卫”,如下forforforfor集合的类型由中的集合类型确定for(变量表达式yield语句块2.2.3容器2.2.3容器集合迭代器元组容器容器 (Map)•Scala用了三个包来组织容器类,分别是scala.collection容器容器容器容器容器容器列表列表Scala的List定义在 var 列表列表val List= 与 List=List(1,2,3)等集合集合 varmySet=mySet+=如果 importvalmyMutableSet=myMutableSet+="Cloud (Map)是一系列键值对的容器。在一个中,键是和集合一样,Scala scala.collection.mutable和scala.collection.immutable里。 iversity=Map("XMU"->"Xia "THU"->"TsinghuaUniversity","PKU"->"Peking 如果要获 中的值,可以通过键来获 也可以使用+= 或者,也可以只遍 中的k或者迭代器迭代器 迭代器迭代器scala>valxs=List(1,2,3,4,xs: ]=List(1,2,3,4,scala>valgit=xsgroupedgit:Iterator[List[ ]]=non-emptyiteratorscala>git.next()res3:List[ ]=List(1,2,3)scala>git.next()res4:List[ ]=List(4,5)scala>valsit=xssliding3sit:Iterator[List[ ]]=non-emptyiteratorscala>sit.next()res5:List[ ]=List(1,2,3)scala>sit.next()res6: ]=List(2,3,scala>res7: ]=List(3,4,数组数组数组数组valmyMatrix= ](3,4)//类型实际就是 valmyCube=Array.ofDim[String](3,2,4)//类型实际是 数组数组importscala.collection.mutable.ArrayBuffervalaMutableArr=ArrayBuffer(10,20,30)aMutableArr+=40aMutableArr.insert(2,aMutableArr-=var元组元组 个元素必须是相同类型,而元组可以包含不同类型的元2.3 2.3 类对继特模式匹.下下 新建对象,并调用其中的方法在Linux 进入scala 原因 都没有被封装在对象中,因此,无法编译JVM$scalac$scalaclasspathMyCounter//MyCounter是包含main方法的对象名称,这里不能使用文件 参数 getter和settergetter和setter给类中的字段设置值以 getter和settergetter和setter “error:variablevalueinclassCountercannotbeac inCounter”这样的错getter和settergetter和setter下面定义一个带有辅助构造器的类 (代码续上一页(代码续上一页 .在 实际上就实现了Java中静态(sic)员成了实例成员,object成员成了sic成员为了验证这一点为了验证这一点 可以一起测试一下那就是把 在在 命令提示符状态下,输入以下命令编译并执行 忽 为了运行上述代码 现在可以使用两种不同的方法 apply方法和updateapply方法和update 用括号传递给变量(对象)一个或多个参数时,Scalaapply方法和updateapply方法和update apply方法和updateapply方法和update方法,并且把“ZhangfeiandLiubei”作为返回值,赋值给group变量,因此,prln(group)语句会打印出“ZhangfeiandLiubei”。apply方法和updateapply方法和update下 apply方法和updateapply方法和update从上面代码可以看出,当执行valaApplyTest()时,会导致apply方法的又会导致调用伴生类的apply方法,如果愿意,就可以在伴生类的apply方apply方法和updateapply方法和update apply方法和updateapply方法和update.Scala与JavaScala与Java以汽车为例子,首以汽车为例子,首 创建一个抽象类,让这个抽象类被其他类继承但是,抽象字段必须 类型,比如:valcarBrand:String,就把 下面下面 在在 2.3.4特质2.3.4特质特质的定义和类的定义非常相似,有区别的是,特质定义使用关键字trait特质的定义和类的定义非常相似,有区别的是,特质定义使用关键字trait下面 2.3.5简单2.3.5简单匹类型模"守卫(guard)"语for表达式中的模case类的匹Option类"守卫(guard)""守卫(guard)"forfor 之前举过 为例子 创建 如下循环遍 的基本格式是casecaseOptionOption一般而言,对于每种语来说都会一个键字表示个对引用的是无,Jaa中用的l。Scala融合了函数式程格因此,当预计到变量或函数回值能不会 何值时候建议你使Option类型。 Option下Option下 给出一个实例OptionOption 指定的“NoSuchBook”,而不是显示None。OptionOptionOption[T]类型,其中的T可以是Sting或或其他各种数据类型。 既然是一个集合 2.42.4函数式编程实例2.4.1函数2.4.1函数字面函数的类型和函数、Lamda表达式与闭占位符语 除了函数字面 会比较陌生以外,其他几种字面量都很容易理解函数字面量可以体现函数式编程函数字面量可以体现函数式编程 理念 下面下面现在定义一个大家比较熟悉的传统类型的函数,定义的语法和之前介绍 一个变量时 采用的形式是照葫芦画瓢 不需要给每个函数命名,这时就可以使 函数,如下 “=> 下 不会报错,因为,给出了myNumFunc的类型为“=> 以推断出num类型为类型。 每个闭包都 闭包创建时活跃 失的参数类型。例如,假设你只是写_+_: 失的参数类型。例如,假设你只是写_+_: _+_将扩展成带两个参数的函数字面量。这也是仅当每个参数在函数 .2filterreducefold循环遍循环遍 ,是经常需要用到的操作,基本格式是 的遍map操作和flatMapmap操作和flatMapmapmap操作和flatMapmap操作和flatMapflatMapflatMap是map的一种扩展。在flatMap中,会传入一个函数,该函数filterfilter首先创建一 iversity=Map("XMU"->"Xia niversity","THU"->"TsinghuaUniversity","PKU"->"PekingUniversity","XMUT"->"Xia niversityofTechnology") iversityOfXiamen=universityfilter{kv=>kv._2contains iversityOfP=universityfilter{kv=>kv._2startsWithreducereducereduceLeft(_+_)整个加法 reduceRight(_+_)表示从列表尾部开始, foldfold 2.4.3函数式编程实例2.4.3函数式编程实例 委员,中国计算机学会信息 数据创新百人”称号。中国高校首个“数字教师”提出者和建设者,厦门大学数 主要建设者和骨干成员,2013年度厦门大学奖教金获得者。主要研 学报》《计算机学报》 主持的科研项目包括1 高校基本科 应用示 市工作方案、市互联网经济调研等课题。中国高校首个“数字教师”提出者和建设者 《大数据技术原理与 ,为教师教学和学生学习大 委员,中国计算机学会信息 数据创新百人”称号。中国高校首个“数字教师”提出者和建设者,厦门大学数 主要建设者和骨干成员,2013年度厦门大学奖教金获得者。主要研 学报》《计算机学报》 主持的科研项目包括1 高校基本科 应用示 市工作方案、市互联网经济调研等课题。中国高校首个“数字教师”提出者和建设者 《大数据技术原理与 ,为教师教学和学生学习大 、浙江省中小 泸州企业家、江苏沛县企业家等开展信息化培训,累计培训人数达3000人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白细胞增多健康教育
- 村级安全网络建设讲解
- 研学基地消防安全制度
- 铁艺大门电动启闭系统接线调试方案
- 急诊眩晕护理查房
- 近3年职业发展规划
- 爆破公司三员模拟考试题及答案
- 重大一般危险源及控制措施清单
- 劳动防护用品配备和管理制度
- 儿童心包炎护理查房
- 名老中医工作室验收
- “六张网”系列专题研究报告:从“纲-目-结”看“十五五”时期我国水网投资新方向
- 智能机电技术专业招生宣讲介绍
- 2026年蚌埠医科大学第一附属医院(出入院管理科)公开招聘劳务派遣人员笔试模拟试题及答案详解
- 26新四年级上册道德与法治【知识点总结】
- 2026年护理三基三严与护理创新测试题含答案
- 讲解特殊感染病例的诊断与隔离措施
- 2026秋小学鲁科版(五四制)新教材英语四年级上册教学计划含教学进度表
- 《旅游策划》课件-项目一 旅游策划概述
- 新版部编人教版四年级上册道德与法治(课件)10购物有学问
- 2026秋小学新版苏教版数学六年级上册教学计划、教学设计(附目录)适用于新课标
评论
0/150
提交评论