Scala基礎-語法特性(一):類型和變量

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"統一類型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在數據類型方面Scala與Java的最大區別在於:"},{"type":"text","marks":[{"type":"strong"}],"text":"Scala沒有所謂的基本數據類型,秉承一切皆對象的徹底性,所有的數據類型和函數都是以對象的形式存在。 "},{"type":"text","text":"Scala類型層次結構:"}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b0/b00a3faba352116148300d76aaccd120.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Any是所有類型的超類,也稱頂級類型,它定義了一些通用的方法如equals、hashCode和toString,Any有兩個之間的子類AnyValue和AnyRef。"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"AnyVal代表值類型,它有9個預定義的非空的值類型,分別是Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是不帶任何意義的類型,Unit可以作爲返回類型。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"AnyRef代表引用類型,所有非值類型都被定義爲引用類型,用戶聲明的自定義類型都屬於AnyRef引用類型的子類型,同時在Java運行環境中調用Scala。AnyRef會被當做java.lang.Object基類。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Nothing是所有類型的子類型,包括值類型和引用類型,同時Nothing也是Null的子類型,也稱爲底部類型。沒有一個值是Nothing類型的。Nothing類型通常用於程序非正常結束的信號,可以被理解爲不定義值的表達類型,在非正常返回時使用。這點與Java中返回Null,C++中用-1作爲返回符類似。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Null是所有引用類型的子類型(即AnyRef的任意子類型),它有一個單例值由關鍵字Null所定義。Null主要是使得Scala滿足和其他JVM語言的互操作性,但是null是非常容易引發程序崩潰,同時Scala也採用了各種機制來避免使用Null類型。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下面實現將各種類型的數據存放在List中,並進行遍歷打印:"}]},{"type":"codeblock","attrs":{"lang":"java"},"content":[{"type":"text","text":"package HelloScala\n\nobject HelloScala {\n def main(args: Array[String]): Unit = {\n val list:List[Any] = List(\n \"A String\", // 字符串\n 68, // 整形\n \"c\", // 字符\n \"\"\"Hello,\nNice to meet you\"\"\", // 多行字符串\n () => \"an anonymous function returning a string\" // 函數\n )\n list.foreach(element => println(element))\n }\n}"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"變量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Scala的變量聲明和Java有很大區別,Scala變量可分爲"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"變量,指的是在程序運行過程中值可能會改變的量,用關鍵詞"},{"type":"codeinline","content":[{"type":"text","text":"var"}]},{"type":"text","text":"聲明。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"常量,指的是程序運行中值不會發生改變的量,使用關鍵詞"},{"type":"codeinline","content":[{"type":"text","text":"val"}]},{"type":"text","text":"聲明常量,如果對常量修改在編譯時會報錯。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Scala支持語法糖,可以像Python一樣省略變量類型,編譯器自動根據變量和常量的初始值推測類型。"}]},{"type":"codeblock","attrs":{"lang":"java"},"content":[{"type":"text","text":"object HelloScala {\n def main(args: Array[String]): Unit = {\n // 變量,可以被修改\n var myVar : String = \"Spark Streaming\"\n // 常量,不可修改,若修改,編譯會報錯\n val myVal : String = \"Spark Streaming\"\n myVar = \"Action\"\n println(myVar + \", \" + myVal)\n // 語法糖,編譯器自動根據變量和常量的初始值推測類型\n var age = 18\n }\n}"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"horizontalrule"},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"參考資料"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"書籍《Spark Streaming 實時流式大數據處理實戰》"}]}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章