在Scala中使用函数式编程(函数和高阶函数)

                                       

    图示,这是一个普通函数的定义(在java里面通常称为方法),函数可以定义在object单例对象中

 1 object MyModule {         //声明一个单例对象  —>  即同时声明一个类和它的唯一实例
 2   def abs(n: Int): Int =    //abs方法接收一个integer并返回一个integer
 3     if (n < 0) -n           //如果n小于0,返回-n
 4     else n                  //否则返回n
 5 
 6   private def formatAbs(x: Int) = {   //一个私有方法只能被MyModule里的其他成员调用
 7     val msg = "The absolute value of %d is %d"  //字符串里有2个占位符,%d代表数字
 8     msg.format(x,abs(x))                //在字符串里将2个%d占位符分别替换为x和abs(x)
 9   }
10 
11   def main(args: Array[String]): Unit = {     //Unit类似于Java或C语言里的void
12     println(formatAbs(-42))
13   }
14 }

    

    一些基础概念:

            通过def去定义一个函数,等号“=”左边的声明部分我们称为“函数签名”,右边则为“定义”

            val定义的变量的是一个值相当于java中的final,不可变

            Unit相当于类型空,当一个函数的返回值为空时,字面上会返回 "()"

            通常返回Unit类型的函数,暗示它包含副作用

    模块、对象和命名空间:

            Scala总每个值都可以当成一个对象,每个对象都有零个或多个成员

    对象的主要目的是给成员一个命名空间,也称模块

            区别于JAVA,Int在Scala中也被视为对象 --->

    1+2 可以看成1.+(2)的语法糖(只有对象才可以通过"."来调用成员)

    高阶函数:

            把一个函数当作参数传递给另一个函数被称为高阶函数

            函数是一等公民,函数也是值

            注:对于高阶函数的参数,我们通过以f、g来命名是一种习惯做法。在

    函数式编程中,我们更倾向于使用短的变量名,甚至单个字母命名。因为高阶函数通常没

    法表示参数到底执行什么,无法体现它们的含义(变量名的约定)

    默认参数:

 1 object HelloWorld {
 2   def main(args: Array[String]): Unit = {
 3     default()         //默认参数:调用时没有手动传参,函数参数列表默认使用初始值
 4     default("You")
 5   }
 6 
 7   def default(name: String = "My"): Unit = { //这里给予参数列表一个初始值
 8     println("hello "+name)
 9   }
10 }

    

    

      

猜你喜欢

转载自www.cnblogs.com/zhixiangshu/p/10062020.html