欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-22 20:19:41
...

一、 首先谈谈前言

这本书是O’Reilly书籍,同时也是本很厚的书籍,至于多厚,京东一看便知,博主不多说,打开第一眼,基本上所有的书籍都是些前言和感谢信之类的东西(技术书籍的通病),但是我没有直接进入正文急着去看书籍的内容,正因为前言吸引了我(我的习惯一般是前言如果写得不错才会看下去,不然直接跳正文)。至于前言吸引我的地方,是因为不仅大致讲了书本的内容概览,还通过实例说明了scala的优劣性,因为scala基于java的JVM,所以有很多相似之处,其中还说明到scala相较于java来说,就是在某一些地方scala可以处理得更容易,让程序员从编码当中解脱出来。

二、 第一章---字符串

1、 从引言开始说起

 

//scala末尾一般是不加分号的,这点和python类似
println("Hello,world".getClass.getName)

 

 

结果:
《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 

 不言而喻,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方法。

小结如下:

 
《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 
 

3、 创建多个字符串

 
《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 
 

说明:为什么这个例子我需要截图,原因后续说明

接下来看几段代码:

val foo ="""This is a muitiline String"""
val foo1 =
"""This is
  | a muitiline
  | String""".stripMargin

 

至于变量foo1是怎么来的呢,书籍当中因为是命令行的方式,就讲到需要用到stripMargin方法以及默认”|”的使用,但实际上ide没有这么复杂,直接在对应字符敲回车就是,比如你要从is隔断,就在is处回车就好,就会自动生成相应代码,但是如果不加”|”以及stripMargin会怎样呢,看下执行结果:

 
《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 

就会不左对齐,一眼就明白.

然后说说自定义:

val foo2 =
  """This is
    # a muitiline
    # String""".stripMargin('#')

 

很明显符号是可以自定义的,不光可以使用”|”,还可以在方法当中自定义为”#”,附stripMargin api(idea快捷键:ctrl+q)

 
《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 

 

 

 

  • 《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 
  • 大小: 1.1 KB
  • 《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 
  • 大小: 37.7 KB
  • 《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 
  • 大小: 12.3 KB
  • 《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 
  • 大小: 14.4 KB
  • 《scala编程实战》读书笔记------前言和第一章前2小节
            
    
    博客分类: Java scala字符串 
  • 大小: 12.3 KB
相关标签: scala 字符串