`
三个诸葛亮
  • 浏览: 17643 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

《scala编程实战》读书笔记------前言和第一章前2小节

    博客分类:
  • Java
阅读更多

一、 首先谈谈前言

这本书是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)

 


 

 

 

  • 大小: 1.1 KB
  • 大小: 37.7 KB
  • 大小: 12.3 KB
  • 大小: 14.4 KB
  • 大小: 12.3 KB
1
0
分享到:
评论

相关推荐

    scala-intellij-bin-2020.2.3.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款著名的集成开发环境(IDE),广泛用于Java、Scala和其他 JVM 语言的开发。"scala-intellij-bin-2020.2.3.zip" 是一个...

    scala-intellij-bin-2016.3.9

    Scala是一种多范式编程语言,融合了面向对象和函数式编程的概念。它被设计成可以在Java虚拟机(JVM)上运行,并可以充分利用Java的生态系统。IntelliJ IDEA的Scala插件提供了对Scala语法的深度支持,包括智能代码...

    scala-intellij-bin-2017.2.13

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款广受赞誉的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能来提升开发效率。"Scala-intellij-bin-2017.2.13...

    scala-intellij-bin-2017.2.6

    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插件,亲测可用!!!scala-intellij-bin-2018.3.2.zip插件,亲测可用!!!

    scala-xml_2.12-1.0.6-API文档-中文版.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-bin-2019.1.2.zip

    Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受开发者喜爱的集成开发环境(IDE),它提供了丰富的功能来支持各种编程语言,包括Scala。"scala-intellij-bin-...

    scala-intellij-bin-2016.3.1.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款非常流行的集成开发环境(IDE),尤其受到Java和Scala开发者喜爱。在本压缩包"scala-intellij-bin-2016.3.1.zip"中,...

    scala-intellij-bin-2019.2.28.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java开发者中备受推崇。它提供了丰富的功能来支持各种编程语言,包括Scala。`...

    scala-intellij-bin-0.41

    Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受赞誉的Java开发集成环境,为开发者提供了高效、智能的代码编写体验。"scala-intellij-bin-0.41"是专门为...

    scala插件 scala-intellij-bin-2018.3.5.zip scala-intellij-bin-2018.3.6.zip

    Scala是一种强大的多范式编程语言,它结合了面向对象和函数式编程的特点,为开发者提供了丰富的表达能力和灵活性。在Java虚拟机(JVM)上运行的Scala,因其高效性和与Java的无缝集成,成为了开发大规模分布式计算...

    scala-intellij-bin-2021.1.22.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的Java开发集成环境,同时也为多种其他语言提供了支持,包括Scala。"scala-intellij-bin-2021.1.22.zip" 是一个...

    flink-scala_2.12-1.14.3-API文档-中文版.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...

    scala-compiler-2.11.8-API文档-中英对照版.zip

    赠送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-SDK-4.7.0-vfinal-2.12-linux.gtk.x86_64.tar.gz

    scala-intellij-bin-2020.2.23.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个压缩包“scala-intellij-bin-2020.2.23.zip”是为IntelliJ IDEA设计的一个特定版本的Scala插件,适用于2020.2.23更新。IntelliJ IDEA是...

    scala-intellij-bin-2021.3.6.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java和Scala开发者中有着极高的赞誉。"scala-intellij-bin-2021.3.6.zip"是一个...

    scala-intellij-bin-2019.2.20.zip

    Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受赞誉的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能来提升开发效率。针对Scala语言,IntelliJ ...

    scala-ide-plugin-eclipse

    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 下载地址:...

    scala-parser-combinators-2.11-1.0.4-API文档-中文版.zip

    赠送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依赖信息...

Global site tag (gtag.js) - Google Analytics