加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Scala上实施函数式编程

发布时间:2020-12-16 08:56:06 所属栏目:安全 来源:网络整理
导读:我开始学习函数编程,我真的想学习 Scala,而不是Haskell或Lisp. 但是有些人声称学习Scala作为第一种函数式语言会减慢你对函数式编程的学习,因为Scala允许你对两种方式进行编程,并且当面对一个难题时,人们倾向于编写程序方式. 我的问题是,我怎样才能确保我以纯
我开始学习函数编程,我真的想学习 Scala,而不是Haskell或Lisp.

但是有些人声称学习Scala作为第一种函数式语言会减慢你对函数式编程的学习,因为Scala允许你对两种方式进行编程,并且当面对一个难题时,人们倾向于编写程序方式.

我的问题是,我怎样才能确保我以纯粹的功能方式编程?

(我的意思是,也许我无法区分两种风格,我无意中在程序上编程).

我知道,例如,我应该只使用val而不是vars.

解决方法

其他答案已经提出了一些好处,但是为了尝试快速制定一些指导方针,以下是我的开始:

首先,要完全避免一些事情:

>不要使用var关键字.
>不要使用while关键字.
>不要在scala.collection.mutable包中使用任何内容.
>不要使用asInstanceOf方法.
>不要使用null.如果您遇到过null(在别人的代码中),请立即将其包装在更合适的数据类型中(通常Option会很好地完成).

然后,通常要避免的一些事情:

>警惕调用返回类型为Unit的任何内容.返回类型为Unit的函数要么不执行任何操作,要么仅通过副作用执行操作.在某些情况下,你将无法避免这种情况(IO是显而易见的),但你在别处看到它可能是一种杂质的迹象.
>要小心调用Java库 – 它们通常不会考虑功能编程,并且通常需要您放弃功能方法.

一旦你避免了这些事情,你可以做些什么来使你的代码更具功能性?

>当您执行直接递归时,寻找机会通过使用更高阶的组合器来概括它. fold可能是你最大的候选者 – 列表上的大多数操作都可以通过合适的折叠来实现.
>当您在数据结构上看到解构操作时(通常通过模式匹配),请考虑是否可以将计算提升到结构中并避免对其进行解构.一个明显的例子是以下代码片段:

foo match {
  case Some(x) => Some(x + 2)
  case None => None
}

可以替换为:

foo map ( _ + 2 )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读