本文由 Koon 發表在 ScalaCool 團隊部落格。
關於筆記
大家好⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄,我是 Koon ,作為一名剛剛離開學校,開始體悟社會百態的大學僧, Scala
將作為我第一份工作不可或缺的一部分。為了高效學習、鞏固知識以及督促自我,我決定記錄我的學習歷程。
這裡所有的記錄內容都將是我遇到的問題的解決,以及一些問題的看法,我會將所有所遇到的問題用學習清單的方式展示,而這些問題的來源,可能來自下面的學習列表,也可能來自我的學習內容,但是我都將註明出處。
關於學習
我為什麼選擇Scala
作為我今後學習、工作的主要語言?
很簡單,因為我喜歡嘗試。在初學計算機程式設計時,我想大多數人的經歷會和我一樣,學校為我們挑選一門語言,大多為 C
或 Java
,先是基本的資料型別,然後是程式控制語句,學習定義一個函式,那麼程式就是一條一條的指令,告訴計算機該如何操作即可。那麼 Scala
對於我而言就是一場冒險。
另一個原因,我並不滿足現在所學的知識框架,就像前面所提及的學習過程一樣,慢慢地,我們開始嘗試一些邏輯上的概念來簡化程式,比如迭代,比如遞迴。老師用事實告訴我們,就像斐波那契數列,在指令式的環境下,迭代優於遞迴。
在長期的教學過程中,只有指令式程式設計得到了強調,那就是程式設計師要告訴計算機應該怎麼做,而不是告訴計算機做什麼。而遞迴則通過靈巧的函式定義,告訴計算機做什麼。我們為自己某種能力的喪失編織了一個美麗的謊言,直到越來越多的程式語言變得流行起來,使我們有機會看到各種語言、各種風格寫出的程式,才發現自己應該重新審視遞迴這一概念。
無獨有偶,很多優秀的性質在Scala
或者其他函式式的語言上得以體現,現在我們可以將函式視作數學上的函式,變數視作代數系統的變數,語句視作函式的語法糖,如果把物件導向比作搭積木的話,那麼函式式就是拼線條,更靈活更有創意。
我認為,正確的學習方式是魯迅先生所謂的拿來主義,既不全盤吸收,也不全盤放棄。現在網路上充斥著各種聲音,有些激進有些委婉,同樣的意思,不同人的說法可能帶來的理解也不一樣,因此你需要自己的標準,我認為最好的標準就是教科書,我現在使用的是 Cay S.Horstmann著 高宇翔譯《快學Scala》,當然,書,肯定有更好的。
關於使用
如何使用這本筆記?我是一名初學者,每一天的學習,我都會遇到各種各樣的問題,之後的每一篇的開始,我都將列下一份列表與清單,就像這裡的例子。
如果你與我一樣正在學習,你也可以根據自己的所學,進行一個測試,你可以給自己的學習做一個判斷,然後去解決沒有解決的問題,我會對於清單中的難點和重點進行深層次的調研。
如果你走在我的前面,非常歡迎你給我提供任何的意見,無論是內容排布,或者是在內容理解方面。
學習列表(例)
- twitter Scala 課堂, by twitter
- 菜鳥教程, by 菜鳥教程
- 寫點什麼, by hongjiang
- Coursera 課程, by coursera
- 其他學習資料整合, by 小柑
學習清單(例)
Scala 中的 String 就是 Java 中的 String ,因此可以使用 String 的所有方法;但是 Scala 不僅僅是更好的 Java ,應該用全新的頭腦來學習他。
在命令列下可以使用直譯器建立的變數名,但是在 idea 下,不能在 worksheet 下直接使用這個變數名。
Scala 中
if-else if…
最終一定要有else
。函式和方法很相似,而當真正遇到方法和函式之間的差異的時候,你可能會感到困惑。區別有:方法不是一個值,而函式是,可以將一個方法轉為函式賦值給變數,有時候根據上下文編譯器可以自動將方法轉化為函式,而不需要使用下劃線。
什麼時候應該使用特質而不是抽象類。使用特質優先;而需要使用建構函式引數的時候,使用抽象類,因為
trait t(i: Int){}
中引數 i 是非法的。關於函式的泛型,用方括號語法引入的型別引數。
關於 apply 方法,當類或物件有一個主要用途的時候, apply 方法提供了一個很好的語法糖。定義一個 def ,用
apply()=…
表示了類的主要功能或者說是用途...
寫在最後
這裡是《Scala學習筆記》的序言,因為內容較多,所以乾脆取名為"1",下一篇,我們將開啟新世界的大門,以上 :)
停止炫耀你的忙碌!從“慢些匆忙”到“告別匆忙”,從“從容不迫”到“懂慢的人”。
慢慢來,比較快。