函数式编程

函数式编程,结构化编程,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. rabbitmq inequivalent arg 'x-message-ttl' for queue 'QUEUE_NAME' in vhost '/'异常解决

    中午调整了一台应用服务的mq ttl参数后,重启时出现如下异常: Caused by: com.rabbitmq.client.AlreadyClosedException: channel is a ...

  2. jQuery立体式数字动态增加(animate方法)

    1.HTML结构 <div class="integral">已有<span class="ii"></span>积分< ...

  3. 高性能javascript学习笔记系列(1) -js的加载和执行

    这篇笔记的内容主要涉及js的脚本位置,如何加载js脚本和脚本文件执行的问题,按照自己的理解结合高性能JavaScript整理出来的 javascript是解释性代码,解释性代码需要经历转化成计算机指令 ...

  4. web时代变迁及html5与4的区别

    HTML5的新结构标签 在之前的HTML页面中,大家基本上都是用了Div+CSS的布局方式.而搜索引擎去抓取页面的内容的时候,它只能猜测 你的某个Div内的内容是文章内容容器,或者是导航模块的容器,或 ...

  5. iOS UISlider的使用

    UISlider是一个方便的控件,让用户能够以可视化的方式设置指定范围内的值. 和按钮一样,滑块也能响应事件,还可像文本框一样被读取.如果希望用户对滑块的调整立刻影响应用程序,则需要让他触发操作. 下 ...

  6. Linux下运行windows程序

    现在Winxp停止了支持,那我们的windows程序是否可以再linux上执行呢,如下是一些参考的信息 在您的 Linux/Mac 操作系统上运行 Windows 软件 http://www.wine ...

  7. Java解析Soap XML

    package com.jstrd.tipstock.webservice.jt.base; import java.io.ByteArrayInputStream; import java.util ...

  8. Java中的引用类型(强引用、弱引用)和垃圾回收

    Java中的引用类型和垃圾回收 强引用Strong References 强引用是最常见的引用: 比如: StringBuffer buffer = new StringBuffer(); 创建了一个 ...

  9. 使用ContentProvider访问其他应用的SharedPreferences数据

    @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs ...

  10. 使用imeOptions

    Android的软键盘右下角有Action按钮,如下图的“上一步” 在EditText中有 android:imeOptions选项,它包括完成按钮“actionDone”,发送按钮“actionSe ...