本文继续Scala讲座的第三部分内容,即编程的思考方法,希望大家喜欢。

这篇是Scala讲座第七篇的第三部分,总括了函数式编程的考虑办法。

在进行什么编程的时分,你用什么办法来考虑呢?用指令是办法来考虑的话,一定是考虑“首要有一个变量,然后一边循环一边判别一下这样的条件,接着进行这种操作···”这样的操作进程吧。

面向目标式办法来考虑时,一定是先考虑“程序中呈现的这个目标里有什么东西(数据)呀?”,然后再给目标分配 “动作”(办法)吧。全体形象应该是,“目标”们相互分配好自己的作业,目标自己只做自己的作业其他的作业交给其他目标来完结,“目标”们相互合作来完结一个处理吧。即使是面向目标的状况下,关于一般言语来说,目标办法内也是用指令办法来完成的。

那么,函数式编程该是怎样的现象呢?函数式编程是“将函数应用在值或许目标上”这种考虑办法,也便是函数仅仅将值或许目标转换成不同的其他东西。这样说,或许函数式办法仍是很难在读者脑中显现,那么就以“指令型”和“函数式”两种类型的比方为根底进行论述吧。

[Scala讲座]标题:架子上的苹果

标题内容为模仿“架子上有100个苹果,一个个剥皮吃掉***一个也没有了。“这个进程。运转成果的姿态因该如下所示:

  1. >scalaAppleCounter
  2. 99applesonthewall.
  3. 98applesonthewall.
  4. :
  5. 2applesonthewall.
  6. 1appleonthewall.
  7. noappleonthewall.
当苹果只要1或0个的时分,因为不是复数状况,所以处理办法有所不同。先用指令办法来完成一下。
  1. objectAppleCounter{
  2. defmain(args:Array[String]):Unit={
  3. varappleList:List[String]=List()
  4. for(iprintln(x))
  5. }
  6. }
首要准备好列表变量appleList,接着做100次循环。循环顶用变量counter来寄存当时所剩的苹果数,并依据该数字向例表结尾参加描绘文本,其间关于1个和0个的状况进行特别处理。***运用appleList的foreach办法对每一列表成员进行打印操作。题外话,因为Scala是函数式+面向目标言语,所以能够以这种指令式办法来编程,这关于不熟悉函数式编程的用户来说也还真不错。
好了,这次用函数式的办法来从头完成一下相同的逻辑。那么该怎样考虑函数式的完成呢?下面是完成比方。
  1. objectAppleCounter{
  2. defmain(args:Array[String]):Unit={valappleList=(0until100).reverse.map(x=>xmatch{
  3. case1=>"1appleonthewall."
  4. case0=>"noappleonthewall."
  5. case_=>x+"applesonthewall."
  6. })
  7. appleList.foreach(x=>println(x))
  8. }
  9. }
这儿不是想阐明“程序短了不少啊···”,而是期望我们理解考虑办法的不同之处(不过这儿并没有声明变量appleList的类型,能够进行如此杂乱的类型揣度也真是挺凶猛的呀!)。编写这段程序的时分,我一开始就没有考虑到循环这个概念。比起循环,我考虑的是怎么将函数用在数字列表变量上。首要不是逻辑,而是创立用于履行函数的目标(这儿是数字列表),然后考虑挑选哪种函数来履行。
首要考虑创立如下的列表目标。
  1. List(99,98,97,....2,1,0)
这个经过(0 until 100).reverse部分来完成。接着关于这个列表的一个个数字,考虑回来数字相对应字符串的函数。对应部分如下
  1. (上面的列表).map(x=>xmatch{
  2. case1=>"1appleonthewall."
  3. case0=>"noappleonthewall."
  4. case_=>x+"applesonthewall."
  5. })
用Scala进行像样的函数式编程时,map是最重要的函数之一。也便是,关于列表中的每个元素用map函数传进来的函数履行一下,然后回来他的成果列表。这儿传递给map函数的参数(函数目标)内容是:关于1回来1 apple on the wall.;关于0回来no apple on the wall;其他状况比方22,回来22 apples on the wall。依据该内容,map函数回来如下列表
  1. List("99applesonthewall.","98applesonthewall.",…"noappleonthewall.")

***一行类似于指令式编程,关于例表appleList用foreach办法循环遍历,并用foreach传进的函数打印列表一切的元素,然后程序完毕。
函数map不仅在List类中有,其他许多类中也有。

Scala讲座:编程的考虑办法(scala编程思想)  Scala讲座 Scala 第1张

Scala讲座 图:map函数概念图

函数式言语中List具有强壮的功用,这儿再一次着重,函数式编程不是考虑怎么循环,而是首要考虑创立作为操作源的列表,然后考虑将怎样的函数适用于列表中的元素。因为运用如此风格的编程办法,所以就不需求保存用于循环的计数器呀,暂时变量什么的了。

Scala讲座到这儿,第七篇第三部分内容就完毕了。

【修改引荐】

  1. 万物皆目标:介绍Scala目标
  2. Scala的泛型:***大的特性
  3. Scala的Trait:能够包括代码的接口
  4. Scala的形式匹配和条件类
  5. Scala类:复数类,无参办法,承继和掩盖
转载请说明出处
知优网 » Scala讲座:编程的考虑办法(scala编程思想)

发表评论

您需要后才能发表评论