热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

scala学习笔记三scala函数式编程风格学习

接着昨天的进度继续学习scala,现在的所有东西仅仅是借助课本的帮助,在scala的交互式shell中进行简单的写一下代码,也想借此学习一

    接着昨天的进度继续学习scala,现在的所有东西仅仅是借助课本的帮助,在scala的交互式shell中进行简单的写一下代码,也想借此学习一下最基本的语法,掌握基础,下面是今天 的笔记记录内容:

1.识别函数式风格
在scala中,val 和 var 只不过是你工具箱里两种不同的工具,它们都很有用。
def printArgs(args: Array[String]): Unit = {
var i = 0
while (i println(args(i))
i += 1
}
}
你可以通过去掉 var 的办法把这个代码变得更函数式风格,例如,像这样:
def printArgs(args: Array[String]): Unit = {
for (arg <- args)
println(arg)
}
或这样&#xff1a;
def printArgs(args: Array[String]): Unit &#61; {
args.foreach(println)
}
减少使用var的一个好处&#xff1a;重构后&#xff08;更函数式&#xff09;的代码比原来&#xff08;更指令式&#xff09;的代码更简洁&#xff0c;明白&#xff0c;也更少机会犯错。Scala鼓励函数式风格的原因&#xff0c;实际上也就是因为函数式风格可以帮助你写出更易读懂&#xff0c;更不容易犯错的代码
重构后的 printArgs 方法并不是纯函数式的&#xff0c;因为它有副作用——本例中&#xff0c;其副作用是打印到标准输出流。函数有副作用的马脚就是结果类型为 Unit。如果某个函数不返回任何有用的值&#xff0c;就是说其结果类型为Unit&#xff0c;那么那个函数唯一能让世界有点儿变化的办法就是通过某种副作用。更函数式的方式应该是定义对需打印的 arg 进行格式化的方法&#xff0c;但是仅返回格式化之后的字串&#xff0c;如下&#xff1a;
def formatArgs(args: Array[String]) &#61; args.mkString("\n")
println(formatArgs(args))
可以通过检查结果来测试 formatArgs&#xff1a;
val res &#61; formatArgs(Array("沂", "水", "寒","城"))
assert(res &#61;&#61; "沂\n水\n寒\n城")
Scala 的 assert 方法检查传入的 Boolean 并且如果是假&#xff0c;抛出 AssertionError。如果传入的 Boolean 是真&#xff0c; assert 只是静静地返回。
结果如下&#xff1a;
scala> def formatArgs(args: Array[String]) &#61; args.mkString("\n")
formatArgs: (args: Array[String])String
scala> val res &#61; formatArgs(Array("沂", "水", "寒","城"))
res: String &#61;




scala> assert(res &#61;&#61; "沂\n水\n寒\n城")


参考&#xff1a;

《scala编程中文版》

上一篇博客给出了下载链接


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
author-avatar
耿世述_511
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有