您好,登錄后才能下訂單哦!
本篇內容主要講解“Scala怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Scala怎么使用”吧!
scala語言,從詞法上就與Java語言不同。支持完全符號作為命名,而且被命名的東西,不受任何限制。可以是方法、函數、類、特質、對象、變量。剛開始接觸的時候,往往被這些符號搞暈,進而心生恐懼。那么scala語言為什么要支持這個特征呢?
scala語言是完全面向對象的,不像Java語言存在那種primitive的東西
scala語言沒有運算符的概念,這些運算符都是對象(類)的方法
為了更好的支持領域專用語言(dsl),配合語言其他特征
當java程序員初步接觸scala時,往往覺得比較親切,我覺得主要有以下原因
同樣運行在JVM上
scala富語義,java相對貧語義;scala可以方便使用Java生態的任何框架、組件
熟悉的關鍵字
熟悉是表面的假象,掩蓋著本質的不同
相同的關鍵字,大多名同意不同,用法不同,如import
scala語言的關鍵字往往多義,有很多常見的關鍵字是多義的。如_,在不同的詞法上下文當中,會有如下含義:代表不同位置的參數、全部、除去、忽略 等等 。其他如var、va、 箭頭符號 、with、class
組合關鍵字:case class、 this.type ,有些時候站在Java語言的角度,甚至是兩個矛盾的關鍵字進行組合。如 abstract overwrite 、final treat
表達方式肯定是不能與關鍵字這樣的概念、特征相提并論、平起平坐的
但是也是阻礙因素之一,大多語言不支持
在特定的詞法和語法上下文兒的前提下,前綴表達、后綴表達、中綴表達
前綴表達:-1,而且這種表達方式可以讓開發人員使用,如你可以做到!Point(x,y)
后綴表達 : 以冒號(結尾的方法),如fold中的 /: :\。再比如buildSequenceFlow(maybeEnd.getOrElse(begin),rightEnd) +: rightEnd +: flowElements
在這里最要命的是中綴表達,當時看到這個語言特征的時候,充滿了很多的不理解。不理解這個語言支持這個特征到底是要干嘛?
一個參數的方法,一切符號皆方法。
兩個構造參數的case class
兩個型參數的高階Kind
在Java語言當中,動詞和名詞是涇渭分明的,動詞就是方法,可執行的東西。名詞就是數據被執行的東西
但是,scala語言中,除了函數是頭等公民以外,還有apply object。 這些都是可執行的名詞。
這樣就會有一種分不清流氓和警察的感覺,哪些是羊,哪些是放羊的? 甚至為一些東西進行命名的時候,都會發生困難。
再加上scala語言的其他特征,會感覺一片混沌。
scala語言是同時支持命令式的面向對象以及聲明式的函數式編程范式的,但鼓勵優先使用函數式的特征,如:val 不變的集合
函數式的可組和性,函數式的管理、推遲副作用是所謂的函數式的精髓
非常熟悉Java的命令式面向對象,設計模式了然于胸的朋友,在這里需要從頭開始,而你過去的辛苦積累沉淀的知識,很可能會成為你學習新東西的桎梏。
scala中的match讓你爽翻天 match 是數據處理的利器,極其方便,并且大量消除樣板式代碼
但是這個名字并沒有完全表達出這個功能的全部含義,我理解這個名稱包含了三個功能:匹、配、抽
但是由于Java虛擬機,自身類型擦除的限制,在一定程度上影響了模式匹配全部功能的完全發揮
另外,模式匹配,不僅可以通過關鍵字match case進行體現。還可以在賦值語句中直接使用,并且與for關鍵字配合使用
scala語言比較特有的特征,只是簡簡單單的一個implicit關鍵字
三個基本的語義,隱式值、隱式視圖、隱式類,隱式傳遞 隱式值與隱式視圖的組合
隱式觸發條件,這些使得隱式既簡單又神秘
隱式只是把基礎上編譯器的技術暴露給開發人員去使用,如
Java語言中的類型轉換
JavaScript語言中的:console.info(-“1” + 1) 、console.info(“1” + 1)
單獨使用隱式,簡單而功能有限。與類型系統的結合, 類型系統對型的限制,隱式上下 - 文兒界和視圖界,帶有優先級的隱式域,相互增強
scala語言中的maven
秉承了scala語言的特點:上手難,上手后,愛不釋手
Scala 概述
主要說了下Scala語言的由來,環境的搭建,以及簡單的scala代碼底層對應*.class 文件反編譯后結構。
Scala 變量
var,val,變量定義,Any,AnyRef,AnyVal,自動轉換,基本上根Java類似,不過有細節差別。
運算符跟 流程控制
算術運算,賦值運算,比較運算,邏輯運算,位運算,順序控制,分值控制,循環控制,scala中沒有break跟continue,scala不推薦用while跟do-while
函數式編程基礎 面向對象編程基礎
scala中函數跟方法的定義,過程,惰性函數,異常,訪問權限,BeanProperty, private[this],對象創建流程分析。
面向對象編程-中級(包,抽象,封裝,繼承,抽象類,匿名子類)
scala 中包存在的意義,靈活性使用跟Python一樣,包對象存在的意義跟底層。面向對象的幾個特征,抽象-封裝-繼承-多態。主構造器,輔助構造器, this,override,類構件的時候從左到右,調用函數時候從右到左。
面向對象編程-高級(伴生對象,trait,自身類型,implicit)
scala 中去除了static關鍵字,trait存在的意義,interface+ abstract,self=>,嵌套類,implicit 的使用細節。
數據結構-集合
scala.collection.mutable,scala.collection.immutable(默認)。Array,ArrayBuffer,Tuple,List,Queue,Map,Set,主要是如何增刪改查。
集合操作-重點
map,flatMap,reduce,flod,scan,zip,iterator,stream,view,par,強大的match 模式匹配。
函數編程高級
偏函數 三種形式,高級函數,匿名函數 =>,參數推斷,閉包,柯里化,控制抽象
遞歸方式思考
Option 這個包裝類的存在意義,遞歸的一些概念引入已經尾遞歸優化。
AKKA 網絡編程 Spark 注冊心跳
AKKA框架的引入,以及思想的理解,網絡編程基本知識點, Master跟Worker工作模式。
設計模式,泛型等概念
設計模式、泛型、上下界、視圖界定、上下文界定、協變逆變不變
WorkCount必會
lines.flatMap(.split(" ")).map((, 1)).groupBy((_._1)).map(x => (x._1, x.2.size)).toList.sortBy(._2))
scala與數據結構
稀松數組,隊列,鏈表,棧,遞歸,排序,查找,哈希表,二叉樹,二叉排序樹,紅黑樹,平衡二叉樹等等
目的:熟悉Scala編程模式。
scala知識點小練習
小demo
到此,相信大家對“Scala怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。