一、 首先谈谈前言
这本书是O’Reilly书籍,同时也是本很厚的书籍,至于多厚,京东一看便知,博主不多说,打开第一眼,基本上所有的书籍都是些前言和感谢信之类的东西(技术书籍的通病),但是我没有直接进入正文急着去看书籍的内容,正因为前言吸引了我(我的习惯一般是前言如果写得不错才会看下去,不然直接跳正文)。至于前言吸引我的地方,是因为不仅大致讲了书本的内容概览,还通过实例说明了scala的优劣性,因为scala基于java的JVM,所以有很多相似之处,其中还说明到scala相较于java来说,就是在某一些地方scala可以处理得更容易,让程序员从编码当中解脱出来。
二、 第一章---字符串
1、 从引言开始说起
//scala末尾一般是不加分号的,这点和python类似 println("Hello,world".getClass.getName)
结果:
不言而喻,scala确实很多地方是基于java实现的
然后引言大致说了一点函数式编程(书籍应该是java8没出之前出版的,因为书籍当中有提到java不支持函数式,这点需要说明)
val result = "hello world".filter(_!='l') println(result)
懂一点函数式的应该都知道返回结果是: heo word,因为filter在很多支持函数式编程语言当中都有用到,python,java8都可以实现此结果。但是scala的实现却不是java类,而是扩展出来的StringOps,其次列出了StringOps的层级结构和超类。
最后说一个例子:
println("scala".drop(2).take(2).capitalize)
说说我的感受吧,看到这段代码的时候其实并不知道是干嘛的,然后因为此需求我就去把src添加上,然后利用ctrl+左键的方式查看源码。
源码分别为:
override /*TraversableLike*/ def drop(n: Int): Repr = slice(n, length)
override /*TraversableLike*/ def take(n: Int): Repr = slice(0, n)
/** Returns this string with first character converted to upper case. * If the first character of the string is capitalized, it is returned unchanged. * This method does not convert characters outside the Basic Multilingual Plane (BMP). */ def capitalize: String = if (toString == null) null else if (toString.length == 0) "" else if (toString.charAt(0).isUpper) toString else { val chars = toString.toCharArray chars(0) = chars(0).toUpper new String(chars) }
懂一点语言的都应该知道slice代表的是啥,这时我才恍然大悟,这并不是什么很高深的东西,其实就是2个截取字符串的方法,然后看了最后一个方法的注释就知道首字母大写,最后得出结果Al,当然书籍当中花了不少篇幅阐述了这些用法,但是如果想把一本书籍看得比较快一点,不能一心的去咬文嚼字,得靠自己的经验学习新的东西,这是博主的感受。
2、 测试字符串相等
我开始看到例子的时候还是有一点惊讶的,例子如下
val s1 = "Hello" val s2 = "Hello" println(s1 == s2) val s3 = "hello" println(s1.toUpperCase == s3.toUpperCase) //null不能调用方法 val s4 = null val s5 = null println(s4 == s5) // println(s4.toUpperCase == s5.toUpperCase)
当时我的感受是既然scala基于java,为什么不是equals方法判断字符串相等,然后我一一的运行了一遍,判断结果和预想当中的是一样的,至于如果赋值为null,是不能调用方法的,会报java程序员经常看见的一个异常,空指针,不赘述。
最开始想到的是这是不是scala算是脚本语言,是不是和大部分脚本语言实现机制一样,比如最常见的js,最后看到小结之时才明白并不是如此,而是scala会先去判断null,然后才会调用java的equals方法。
小结如下:
3、 创建多个字符串
说明:为什么这个例子我需要截图,原因后续说明
接下来看几段代码:
val foo ="""This is a muitiline String""" val foo1 = """This is | a muitiline | String""".stripMargin
至于变量foo1是怎么来的呢,书籍当中因为是命令行的方式,就讲到需要用到stripMargin方法以及默认”|”的使用,但实际上ide没有这么复杂,直接在对应字符敲回车就是,比如你要从is隔断,就在is处回车就好,就会自动生成相应代码,但是如果不加”|”以及stripMargin会怎样呢,看下执行结果:
就会不左对齐,一眼就明白.
然后说说自定义:
val foo2 = """This is # a muitiline # String""".stripMargin('#')
很明显符号是可以自定义的,不光可以使用”|”,还可以在方法当中自定义为”#”,附stripMargin api(idea快捷键:ctrl+q)
相关推荐
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款著名的集成开发环境(IDE),广泛用于Java、Scala和其他 JVM 语言的开发。"scala-intellij-bin-2020.2.3.zip" 是一个...
Scala是一种多范式编程语言,融合了面向对象和函数式编程的概念。它被设计成可以在Java虚拟机(JVM)上运行,并可以充分利用Java的生态系统。IntelliJ IDEA的Scala插件提供了对Scala语法的深度支持,包括智能代码...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款广受赞誉的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能来提升开发效率。"Scala-intellij-bin-2017.2.13...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java和Scala开发者中非常流行。"scala-intellij-bin-2017.2.6" 是一个特定版本的...
scala-intellij-bin-2018.3.2.zip插件,亲测可用!!!scala-intellij-bin-2018.3.2.zip插件,亲测可用!!!scala-intellij-bin-2018.3.2.zip插件,亲测可用!!!
赠送jar包:scala-xml_2.12-1.0.6.jar; 赠送原API文档:scala-xml_2.12-1.0.6-javadoc.jar; 赠送源代码:scala-xml_2.12-1.0.6-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.12-1.0.6.pom; 包含翻译后的API...
Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受开发者喜爱的集成开发环境(IDE),它提供了丰富的功能来支持各种编程语言,包括Scala。"scala-intellij-bin-...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款非常流行的集成开发环境(IDE),尤其受到Java和Scala开发者喜爱。在本压缩包"scala-intellij-bin-2016.3.1.zip"中,...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java开发者中备受推崇。它提供了丰富的功能来支持各种编程语言,包括Scala。`...
Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受赞誉的Java开发集成环境,为开发者提供了高效、智能的代码编写体验。"scala-intellij-bin-0.41"是专门为...
Scala是一种强大的多范式编程语言,它结合了面向对象和函数式编程的特点,为开发者提供了丰富的表达能力和灵活性。在Java虚拟机(JVM)上运行的Scala,因其高效性和与Java的无缝集成,成为了开发大规模分布式计算...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的Java开发集成环境,同时也为多种其他语言提供了支持,包括Scala。"scala-intellij-bin-2021.1.22.zip" 是一个...
赠送jar包:flink-scala_2.12-1.14.3.jar 赠送原API文档:flink-scala_2.12-1.14.3-javadoc.jar 赠送源代码:flink-scala_2.12-1.14.3-sources.jar 包含翻译后的API文档:flink-scala_2.12-1.14.3-javadoc-API...
赠送jar包:scala-compiler-2.11.8.jar; 赠送原API文档:scala-compiler-2.11.8-javadoc.jar; 赠送源代码:scala-compiler-2.11.8-sources.jar; 赠送Maven依赖信息文件:scala-compiler-2.11.8.pom; 包含翻译后...
scala-SDK-4.7.0-vfinal-2.12-linux.gtk.x86_64.tar.gz scala-SDK-4.7.0-vfinal-2.12-linux.gtk.x86_64.tar.gz
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个压缩包“scala-intellij-bin-2020.2.23.zip”是为IntelliJ IDEA设计的一个特定版本的Scala插件,适用于2020.2.23更新。IntelliJ IDEA是...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java和Scala开发者中有着极高的赞誉。"scala-intellij-bin-2021.3.6.zip"是一个...
Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受赞誉的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能来提升开发效率。针对Scala语言,IntelliJ ...
scala eclipse插件.对应scala版本:2.10--2.11,对应eclipes版本:4.4--4.5. update site:http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site 下载地址:...
赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 赠送Maven依赖信息...