函数式编程

函数式编程,结构化编程,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编程第二课的更多相关文章

  1. 少儿编程:python趣味编程第二课,如何在pygame中写文字

    python趣味编程第二课:本文仅针对8-16岁的青少年,所以流程是按如何去教好中小学生走的,并不适合成人找工作学习,因为进度也是按照青少年走的 大家好,我是C大叔,上一篇文章已经跟大家介绍了一款开发 ...

  2. Spark 3000门徒第二课scala面向对象总结

    昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...

  3. 【C++探索之旅】第一部分第二课:C++编程的必要软件

    内容简介 1.第一部分第二课:C++编程的必要软件 2.第一部分第三课预告:第一个C++程序 C++编程的必要软件 经过上一课之后,大家是不是摩拳擦掌,准备大干一场了呢. 这一课我们来做一些C++开发 ...

  4. Scala编程基础

    Scala与Java的关系... 4 安装Scala. 4 Scala解释器的使用... 4 声明变量... 5 数据类型与操作符... 5 函数调用与apply()函数... 5 if表达式... ...

  5. Scala 编程(一)Scala 编程总览

    Scala 简介 Scala 属于“可伸展语言”,源于它可以随使用者的需求而改变和成长.Scala 可以应用在很大范围的编程任务上,小到脚本大到建立系统均可以. Scala 跑在标准 Java 平台上 ...

  6. (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

    本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...

  7. 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

    内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...

  8. 【Web探索之旅】第二部分第二课:服务器语言

    内容简介 1.第二部分第二课:服务器语言 2.第二部分第三课预告:框架和内容管理系统 第二部分第二课:服务器语言 介绍了Web的客户端,我们来谈谈Web的服务器端. 既然客户端有客户端的编程语言(HT ...

  9. 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

    内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...

随机推荐

  1. 【转】PHP调试开发工具你认识多少?

    来源:PHP100中文网(http://www.php100.com/html/itnews/PHPxinwen/2009/0902/3257.html) PHP现在已经是使用最为广泛的开源服务器端脚 ...

  2. 【自然框架】终于把源码弄到git上了。

    好久没写博客了,发现又从左面的排名里掉出去了. 说来惭愧,一直说是开源,但是源码一直没能放到git里面.原因是,不会用. 最近终于把git弄明白了.把源码都放进去了. 刚兴趣的话可以来看看. http ...

  3. Mithril – 构建杰出 Web 应用的 JS MVC 框架

    Mithril 是一个客户端的 Javascript MVC 框架.它是一个工具,使应用程序代码分为数据层,UI 层和粘合层.提供了一个模板引擎与一个虚拟的 DOM diff 实现,用于高性能渲染,支 ...

  4. jQuery的document ready与 onload事件——你真的思考过吗?

    在进行实验和资料查询时,我遇到了几个关键问题: 1. window.onload到底是什么加载完触发? 2. body为什么会有onload事件? 3. 为什么是window.onload,而不是do ...

  5. 更改SAP的字段翻译

    TC:SE63在SAP用户选择屏幕中,用鼠标选定一个栏位后按F1键,可以看到SAP对其具体解释,通常这种解释文本分为两部分,一部分为标题,一部分为正文.比如:  有时,SAP的翻译让人感觉很别扭,对于 ...

  6. spring-hellow word

          在大三的时候开了一门JAVAEE SSH框架,属于软件方向选修课程,虽然本人是搞硬件的,但是也选了这么课程,因为我在想有一天物联网也会走上大门户的,所以果断去蹭课了,时至今日,重新拾起来, ...

  7. JavaScript学习13 JavaScript中的继承

    JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...

  8. .framework使用注意、静态库配置及构架合成

    使用注意: 1.项目中使用的framework中包含了资源文件时,需要手动添加该framework中的资源文件 2.由于动态库(framework默认生成为动态库)不能上架,我们在生成的时候需要修改为 ...

  9. Android 友盟分享躺过的几个坑,大坑,坑爹啊

    前言:公司上线了一个项目,做Android 客户端集成友盟分享,在做得过程中,遇到了下面3个问题,希望其他小伙伴注意. ) 错误1: 1.错误描述 我是照着友盟的集成文档一步一步的集成的,做完后,发现 ...

  10. 【代码笔记】iOS-把<br!>换成\n

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...