函数式编程

函数式编程,结构化编程,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. 点击div全选中再点击取消全选div里面的文字

    想做一个就是点击一个div然后实现的功能是div里面的文字都成选中状态,然后就可以利用浏览器的自带的复制功能,任意复制在哪里去了 在网上百度了一下 然后网上的答案感觉很大的范围 然后一些搜索 然后就锁 ...

  2. Pizza Pie Charts – 基于 Snap SVG 框架的响应式饼图

    Pizza Pie Charts 是一个基于 Adobe 的 Snap SVG 框架的响应式饼图插件.它着重于集成 HTML 标记和 CSS,而不是 JavaScript 对象,当然Pizza Pie ...

  3. JS 事件代理

    事件处理器:onclick.onmouseover.... 在传统的事件处理中,你需要为每一个元素添加或者是删除事件处理器.然而,事件处理器将有可能导致内存泄露或者是性能下降——你用得越多这种风险就越 ...

  4. TOCControl上实现右键

    第一步:新建另外一个窗体 首先要定义一个全局变量 ILayer. 窗体要带参数,以便将 ILayer 传递过来. 获取属性列表. using System; using System.Collecti ...

  5. GDAL关于读写图像的简明总结

    读写影像可以说是图像处理最基础的一步.关于使用GDAL读写影像,平时也在网上查了很多资料,就想结合自己的使用心得,做做简单的总结. 在这里写一个例子:裁剪lena图像的某部分内容,将其放入到新创建的. ...

  6. Android 调用已安装市场,进行软件评分的功能实现

    Uri uri = Uri.parse("market://details?id="+getPackageName()); Intent intent = new Intent(I ...

  7. AVAudioPlayer播放并实现了后台播放和远程控制

    // ViewController.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @class ...

  8. Mac&nbsp;常用快捷键

    Command+Tab 任意情况下切换应用程序 - 向前循环 Shift+Command+Tab 切换应用程序 - 向后循环 Command+Delete 把选中的资源移到废纸篓 Shift+Comm ...

  9. C语言中的循环结构与选择结构

    1. 为什么使用循环? 重复执行某段代码 2. while(条件){ 循环体: } 当条件成立的时候就执行循环体,条件不成立,就退出循环,继续执行while后面的语句 3. for ( 初始表达式 : ...

  10. maven编译java代码报“非法字符: \65279 ”错误的解决方法

    前段时间开发一个项目,使用maven进行编译时报“非法字符: \65279 ”,但是眼睛看怎么都正确的,文件转成utf-8编码还是报错. 最后没办法,暴力解决了这个问,步骤如下 1.把文件内容复制出来 ...