AnVal(值类型),AnyRef(引用类型),都是对象
SDK相当于开发集成工具环境,API就是数据接口。在SDK环境下调用API数据。
yield返回的是一个不可变的Seq()序列或者序列的索引。
if(),for(),满足条件执行。
流程图:顺序,单分支,多分支,循环。
方法和函数几乎一样,只是函数的使用更加的灵活。
函数式编程中函数是一等公民,函数可以作为参数传递,函数可以赋值给变量,函数不依赖于类和对象。
面向对象编程是以对象为基础的编程。
scala中将二者结合起来了。
完成一个功能的代码中:当使用方法时就是面向对象,有对象才能调用方法,当使用函数时就是面向函数式编程。
scala中对象和函数都是一等公民,函数可以有默认参数,变长参数在最后添加*,数组作为变长参数输入时使用array(): _*,函数作为参数输入时添加空格横杠进行转换,例如 hanshu _
函数式编程中,将函数也当做数据类型,因此可以接受函数当作输入(参数)和输出(返回值)。
当一个函数的参数是函数,则这个函数就是高阶函数。
递归:def get(),get(get()),结合栈理解,每一次执行一个方法都会入栈,在这个栈的范围里面保存变量等,也就是保存现场。
http://blog.sina.com.cn/s/blog_185d6836e0102y2mg.html
scala的主构造器跟在类的后面,辅助构造器用def this(),辅助构造器中必须调用主构造器。伴生对象为单例对象,定义静态的字段和方法,通过对象名直接调用,其中定义方法外的其他方法会在第一次对象中方法被调用的时候执行一次。主构造器执行时,类中所有的方法都会执行。
闭包和柯里化:
闭包的本质是函数或者函数内部使用了外部的变量,从而改变了外部变量的生命周期,例如两个函数嵌套,内层函数用到了外层函数的变量,外层函数使用完该变量(入栈然后弹栈)后不能直接让该变量消失,因为内层函数还需要使用这个变量,那么这个变量就不能弹栈。
柯里化就是函数的嵌套调用,其实柯里化是离不开闭包的,因为函数的嵌套调用本身就是闭包。
定义匿名函数的返回值时,不要使用return语句,否则会引发错误。
控制抽象既:函数1定义的参数为一个无参数无返回值的函数2,那么在调用该函数1时就可以直接将函数2的匿名函数写到函数1后面,然后简化书写,用于简化代码。
函数1{…书写函数2的方法体…}
def 函数1(函数2:()=》Unit){
…
}
偏函数:如果你想定义一个函数,而让它只接受和处理其参数定义域范围内的子集,对于这个参数范围外的参数则抛出异常,这样的函数就是偏函数(顾名思异就是这个函数只处理传入来的部分参数)。
偏函数是个特质其的类型为PartialFunction[A,B],其中接收一个类型为A的参数,返回一个类型为B的结果。
其有个重要的函数就是:
def isDefinedAt(x: A): Boolean //作用是判断传入来的参数是否在这个偏函数所处理的范围内
偏函数和case配合使用