zoukankan      html  css  js  c++  java
  • 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的内存溢出。

  • 相关阅读:
    定时器Timer的使用
    Queue和BlockingQueue的使用以及使用BlockingQueue实现生产者-消费者
    ReentrantReadWriteLock读写锁的使用
    利用Lucene与Nutch构建简单的全文搜索引擎
    再见了,DM
    互联网公司高并发图片(缩略图)处理中间层服务架构设计一
    poj 3131 双向搜索+hash判重
    [置顶] linux常用命令大全
    堆排序
    iOS UIView非常用方法及属性详解
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/5227776.html
Copyright © 2011-2022 走看看