Scala编程第二课
函数式编程
函数式编程,结构化编程,OO编程都是编程的方法论。
函数式编程主要思想是把运算过程尽量写成一系列嵌套的函数调用。
特点如下:
1。函数可以像其他数据类型一样使用
可以可以赋值给其他变量,可以作为参数传入另一个函数或者作为别的函数的返回值
2。只用表达式,不用语句
表达式是 个单纯的运算过程,总是有返回值。语句是执行某种操作,没有返回值。
3。不修改状态
只返回新值,不修改系统变量。函数的运行不依赖于外部变量或状态,只依赖输入的参数。
好处:
开发速度快,代码简洁,接近自然语言,易于理解
易于并发式编程,不考虑死锁,可以进行代码的热升级。(内部实现与外部无关)
不需要重启,不需要停机。Erlang实现了这点。
def add(x:Int,y:Int)=(x+y)
var result =add _
将一个函数赋值给一个变量时必须在函数的后面加上一个空格和一个下画线。
闭包,闭包的实质就是代码与用到的非局部变量的混合。
闭包=代码+用到的非局部变量
var y=1
val sum=(x:Int)=>x+y
sum引用到了外部变量y,外部变量y的变化函数也会捕获到。(怎么做到?添加引用?)
控制抽象
在scala中,可以将一系列语句归组成不带参数也没有返回值的函数。
def runInThread(block:() => Unit)
{
new Thread {
override def run() {block() }}.start()
}
这里 block是一个函数的占位符,这个函数没有参数也没有返回值。
scala 可以构建控制抽象,看上去像编程语言的关键字的函数。
def util(condition:=>Boolean)(block:=>Unit){
if(!condition)
{ block
util(condition)(block)
}
}
val m=Map(“key1”->”values”)
val v=m.get(“key1”).get
val v =m.get(“key2”).getorElse(“None”)
flatMap是map和flatten操作的结合,先进行map操作,然后再进行flatten操作。
val l=List(List(1,2,),List(3,4,5))
l.flatMap(x=>x+1)
隐式转换是scala的精髓之一。
在使用第三方函数库的时候,你不能方便地改变源码,对于这个时候遇到的不便,scala中解决这个问题是使用隐式类型变换和隐式参数,它们可以使调用函数库变得更加方便,并避免一些烦琐和显而易见的细节。
scala中的implicit可以用于类,方法和参数。
1。自动进行某些数据类型的隐式转换
implicit def strToInt(str:String)=str.toInt
val x:Int = “100”
_ 在scala中是一个占位符
如果类的主构造器函数的参数中没有用val或var来声明变量,则这时的变量是private级别的,只能在类内部访问。
rdd.collect()
以数组的形式返回这个RDD中所有的数据,
确定这个RDD中的数据是少量的,否则会造成driver的内存溢出。
Scala编程第二课的更多相关文章
- 少儿编程:python趣味编程第二课,如何在pygame中写文字
python趣味编程第二课:本文仅针对8-16岁的青少年,所以流程是按如何去教好中小学生走的,并不适合成人找工作学习,因为进度也是按照青少年走的 大家好,我是C大叔,上一篇文章已经跟大家介绍了一款开发 ...
- Spark 3000门徒第二课scala面向对象总结
昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...
- 【C++探索之旅】第一部分第二课:C++编程的必要软件
内容简介 1.第一部分第二课:C++编程的必要软件 2.第一部分第三课预告:第一个C++程序 C++编程的必要软件 经过上一课之后,大家是不是摩拳擦掌,准备大干一场了呢. 这一课我们来做一些C++开发 ...
- Scala编程基础
Scala与Java的关系... 4 安装Scala. 4 Scala解释器的使用... 4 声明变量... 5 数据类型与操作符... 5 函数调用与apply()函数... 5 if表达式... ...
- Scala 编程(一)Scala 编程总览
Scala 简介 Scala 属于“可伸展语言”,源于它可以随使用者的需求而改变和成长.Scala 可以应用在很大范围的编程任务上,小到脚本大到建立系统均可以. Scala 跑在标准 Java 平台上 ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...
- 【Web探索之旅】第二部分第二课:服务器语言
内容简介 1.第二部分第二课:服务器语言 2.第二部分第三课预告:框架和内容管理系统 第二部分第二课:服务器语言 介绍了Web的客户端,我们来谈谈Web的服务器端. 既然客户端有客户端的编程语言(HT ...
- 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布
内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...
随机推荐
- SQLServer2005+分页SQL
declare @pagenum int = 1; declare @pagesize int = 3; WITH Tmp AS ( SELECT ROW_NUMBER() OVER (ORDER B ...
- 一款很实用的jQuery鼠标悬浮有动画效果的响应式瀑布流插件
一款很实用的jQuery鼠标悬浮有动画效果的响应式瀑布流插件 在线预览 下载地址 实例代码 <!doctype html> <html lang="zh"> ...
- BitcoinJS - 支持比特币交易的 JavaScript 库
BitcoinJS 是一个干净,可读的 JavaScript 开发库,用于比特币交易.支持 Node.js 平台和浏览器端.已有超过150万的钱包用户在使用, BitcoinJS 是几乎所有的 Web ...
- jquery原型方法map的使用和源码分析
原型方法map跟each类似调用的是同名静态方法,只不过返回来的数据必须经过另一个原型方法pushStack方法处理之后才返回,源码如下: map: function( callback ) { re ...
- 使用Javascript来编写贪食蛇(零基础)
引用的东西都很基础,注释也很多,这里就不多说了. <head> <meta http-equiv="Content-Type" content="t ...
- C#复习⑦
C#复习⑦ 2016年6月22日 11:50 Main Exception & Namespaces & Assemblies 异常 & 命名空间 & 程序集 1.tr ...
- 关于SQLSERVER2012版本远程登录问题
最近公司新配置了一台服务器,安装的数据库版本为sqlserver2012企业版本,一切安装正常,本地登录也正常 需要远程客户端登录,防火墙也开放的端口,路由器也做了端口映射,因为我们有两台服务器,14 ...
- CSS3 rgba
复制粘贴: <!DOCTYPE html > <html > <head> <meta charset="utf-8"> <t ...
- 字符输出流Writer简要概括
偷个懒,直接参考上篇字符输入流Reader的形式,其实Reader和Writer本来就大同小异: 字符输出流Writer 本篇将对JAVA I/O流中的字符输出流Writer做个简单的概括: 总得来说 ...
- 判断字符串的首字母 ---------startsWith
列: { xtype : 'gridcolumn', ...