《scala程式設計實戰》讀書筆記——前言和第一章前2小節
一、 首先談談前言
這本書是O’Reilly書籍,同時也是本很厚的書籍,至於多厚,京東一看便知,博主不多說,打開第一眼,基本上所有的書籍都是些前言和感謝信之類的東西(技術書籍的通病),但是我沒有直接進入正文急著去看書籍的內容,
二、 第一章---字串
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類,
最後說一個例子:
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方法判斷字串相等,然後我一一的運行了一遍,判斷結果和預想當中的是一樣的,
最開始想到的是這是不是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)
就會不左對齊,一眼就明白.
然後說說自訂:
val foo2 = """This is # a muitiline # String""".stripMargin('#')很明顯符號是可以自訂的,不光可以使用”|”,還可以在方法當中自訂為”#”,附stripMargin api(idea快速鍵:ctrl+q)