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