Scala筆記(1)——基本知識

Scala與Java的關係

  • 一、都是基於JVM虛擬機運行的nginx

    Scala編譯以後的文件也是.class,都要轉換爲字節碼,而後運行在JVM虛擬機之上。算法

  • 二、Scala和Java相互調用數據庫

    在Scala中能夠直接調用Java的代碼,同時在Java中也能夠直接調用Scala的代碼編程

  • 三、Java8 VS Scala數據結構

    1)Java8(lambda)沒有出來以前,Java只是面向對象的一門語言,可是Java8出來之後,Java就是一個面向對象和麪向函數的混合語言了。閉包

    2)首先咱們要對Scala進行精肯定位,從某種程度上講,Scala並非一個純粹的面向函數的編程語言,有人認爲Scala是一個帶有閉包的靜態面嚮對象語言),更準確地說,Scala是面向函數與面向對象的混合。編程語言

    3)Scala設計的初衷是面向函數FP,而Java起家是面向對象OO,如今二者都是OO和FP的混合語言,是否能夠這麼認爲:Scala= FP + OO,而Java =OO + FP?函數

    因爲面向對象OO和麪向函數FP兩種範式是相似橫座標和縱座標的二者不一樣座標方向的思考方式,相似數據庫和對象之間的不匹配阻抗關係,二者若是結合得很差恐怕就不會產生1+1>2的效果。oop

    面向對象是最接近人類思惟的方式,而面向函數是最接近計算機的思惟方式。若是你想讓計算機爲人的業務建模服務,那麼以OO爲主;若是你但願讓計算機能本身經過算法從大數據中自動建模,那麼以FP爲主。因此,Java可能還會在企業工程類軟件中佔主要市場,而Scala則會在科學計算大數據分析等領域搶佔Java市場,好比Scala的Spark大有替代Java的Hadoop之趨勢大數據

 

Scala Lazy特性

一、當val被聲明爲lazy時,它的初始化將被推遲,直到咱們首次對它取值。例如,

lazy val lines= scala.io.Source.fromFile("D:/test/scala/wordcount.txt").mkString

二、若是程序從不訪問lines ,那麼文件也不會被打開。但故意拼錯文件名。在初始化語句被執行的時候並不會報錯。不過,一旦你訪問words,就將會獲得一個錯誤提示:文件未找到。

三、懶值對於開銷較大的初始化語句而言十分有用。它們還能夠應對其餘初始化問題,好比循環依賴。更重要的是,它們是開發懶數據結構的基礎。(spark 底層嚴重依賴這些lazy)

四、加載(使用它的時候纔會被加載)

println(lines)
相關文章
相關標籤/搜索