日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Scala學(xué)習(xí)筆記及與Java不同之處總結(jié)

 看風(fēng)景D人 2016-10-07

  Scala與Java具有許多相似之處,但又有許多不同。這里主要從一個(gè)Java開(kāi)發(fā)人員的角度,總結(jié)在使用Scala的過(guò)程中所面臨的一些思維轉(zhuǎn)變。這里只是總結(jié)了部分兩種語(yǔ)言在開(kāi)發(fā)過(guò)程中的不同,以后會(huì)陸續(xù)更新一些切換后在開(kāi)發(fā)過(guò)程中值得注意的地方。下面列舉了部分,但令人印象深刻的Scala語(yǔ)言的不同之處,具體的代碼示例及詳細(xì)闡述見(jiàn)下文。

  • Scala中可直接調(diào)用Java代碼,與Java無(wú)縫連接;
  • 語(yǔ)句可以不用“;”結(jié)束,且推薦不適用“;”;
  • 變量聲明時(shí)以var或val開(kāi)頭,可不必指定變量類(lèi)型,編譯器可推斷變量類(lèi)型;
  • 函數(shù)可以不定義返回值類(lèi)型(特殊情況除外);
  • 函數(shù)返回值可不用return返回;
  • 無(wú)參函數(shù)定義及調(diào)用時(shí),函數(shù)名后可不跟括號(hào);
  • 數(shù)組訪問(wèn)下標(biāo)使用括號(hào),而不用中括號(hào);
  • 元組使用“._n”的方式訪問(wèn)元素,n從1開(kāi)始;
  • ……。

指定Main函數(shù)

  在Java中運(yùn)行程序,只要指定入口的Main函數(shù)即可。一個(gè)工程中可以有多個(gè)Main函數(shù),每個(gè)類(lèi)內(nèi)都可以定義Main函數(shù)。但是與Java不同的是,Scala工程中,只有定義在object中的Main函數(shù)才能作為程序入口,下圖中定義在class中的Main函數(shù)是無(wú)法作為程序入口的。
這里寫(xiě)圖片描述
  要想程序能夠執(zhí)行,需要如下圖所示,將Main函數(shù)定義在object中。在Scala中,class同Java中的類(lèi)一樣,但是Scala中沒(méi)有static類(lèi)型的類(lèi),與此同時(shí),Scala中提供了一種object的定義方式,通過(guò)這種方式定義的“類(lèi)”類(lèi)似于Java中的static類(lèi),使用時(shí)不需要new相應(yīng)的對(duì)象,直接使用外面能訪問(wèn)的變量和函數(shù)。object中定義的方法也類(lèi)似于static方法,直接通過(guò)object名訪問(wèn)。
這里寫(xiě)圖片描述

變量和字段聲明

  與Java中定義變量不同,在Scala中變量是通過(guò)“var|val 變量名 [: 類(lèi)型] = 值”這種方式聲明和定義的。在聲明字段的時(shí)候,可以使用編譯器自動(dòng)推斷類(lèi)型,即不用寫(xiě)“ : 類(lèi)型”,比如

var i : Int = 2;
或直接
var i = 2;
  • 1
  • 2
  • 3

  var和val的區(qū)別是:var聲明的變量的值之后還可以改變,而val聲明的變量只能在聲明時(shí)賦值,之后不能改變?cè)撟兞康闹担?lèi)似只讀變量,但不是常量)。Scala的函數(shù)式編程更推薦使用val。

類(lèi)的定義及不同

  如下圖所示,在Scala中也是通過(guò)class關(guān)鍵字定義類(lèi),看起來(lái)與Java中類(lèi)似。在Scala類(lèi)中默認(rèn)的訪問(wèn)符是public,如果不明確的寫(xiě)明private或其他訪問(wèn)符,則類(lèi)里的成員默認(rèn)都是可以公開(kāi)訪問(wèn)的。
這里寫(xiě)圖片描述
  但是Scala在構(gòu)造函數(shù)方面與Java存在許多不同,Scala類(lèi)中包括主構(gòu)造器和附屬構(gòu)造器。Scala中類(lèi)的主構(gòu)造器:主構(gòu)造器直接跟在類(lèi)名后面,主構(gòu)造器中的參數(shù)會(huì)被編譯成類(lèi)的字段;主構(gòu)造器執(zhí)行的時(shí)候會(huì)執(zhí)行類(lèi)中的所有不包含在方法體中的語(yǔ)句;如果在主構(gòu)造器函數(shù)的參數(shù)中沒(méi)有用val或者var去聲明變量,那此時(shí)的變量是private[this]級(jí)別的,只能夠被類(lèi)內(nèi)部訪問(wèn)。Person類(lèi)的主構(gòu)造器如下圖所示,主構(gòu)造器中的參數(shù)name和age會(huì)被作為Person類(lèi)的兩個(gè)成員變量,未被包含在任何方法內(nèi)部的打印語(yǔ)句會(huì)作為主構(gòu)造器中的語(yǔ)句被執(zhí)行。
這里寫(xiě)圖片描述
  由于上圖中定義的age沒(méi)有使用val或var修飾,所以會(huì)被作為private類(lèi)型的成員變量使用,這類(lèi)變量只能在類(lèi)內(nèi)部訪問(wèn)。因此如下圖所示,name能在類(lèi)外部訪問(wèn),而age不能被外部訪問(wèn)。
這里寫(xiě)圖片描述
  以上是主構(gòu)造器的情況,Scala中還包括一類(lèi)附屬構(gòu)造器,即除主構(gòu)造器外的其他構(gòu)造函數(shù),附屬構(gòu)造器有以下特點(diǎn):附屬構(gòu)造器是用this來(lái)聲明的;附屬構(gòu)造器中必須調(diào)用主構(gòu)造或者其它附屬構(gòu)造器。如下圖所示為附屬構(gòu)造器的例子。
這里寫(xiě)圖片描述

特別的函數(shù)定義

  Scala中的函數(shù)定義與Java中有所區(qū)別,總體來(lái)說(shuō)如下這種方式,返回值類(lèi)型在參數(shù)列表后面通過(guò)“: 類(lèi)型”這種方式指定,然后通過(guò)“=”承接函數(shù)體。對(duì)于無(wú)返回值類(lèi)型的,類(lèi)型可以寫(xiě)“Unit”(類(lèi)似Java中的void),對(duì)于函數(shù)體簡(jiǎn)單的,“=”后面可直接接語(yǔ)句,不用“{}”。
這里寫(xiě)圖片描述
  與Java不同的是,語(yǔ)句塊或函數(shù)返回值可以不用顯示的通過(guò)“return”語(yǔ)句返回,一般塊的最后一個(gè)表達(dá)式的值就是函數(shù)的返回值。因此上述函數(shù)可修改為下面的形式。
這里寫(xiě)圖片描述
  同變量聲明不需要顯示指定類(lèi)型相同(變量可以推斷變量類(lèi)型),所以函數(shù)也可以推斷返回類(lèi)型,因此可以簡(jiǎn)寫(xiě)成如下所示:
這里寫(xiě)圖片描述
  然而,需要注意的是:如果函數(shù)使用return返回,那么必須明確指定函數(shù)的返回類(lèi)型;此外如果是遞歸函數(shù),也需要指定返回類(lèi)型。下圖所示為通過(guò)“return”返回的函數(shù),函數(shù)定義時(shí)沒(méi)有指定返回類(lèi)型,編譯器報(bào)錯(cuò)。
這里寫(xiě)圖片描述
  對(duì)于函數(shù)參數(shù)列表為空的,定義時(shí)函數(shù)名后可以不跟“()”,使用時(shí)也可以不跟“()”,如下圖所示:
這里寫(xiě)圖片描述

數(shù)組及元組的使用

  兩種數(shù)組定義如下圖所示,與Java不同的是需要用到Array關(guān)鍵字。同Java中一樣,數(shù)組長(zhǎng)度不可變,數(shù)組元素可變。
這里寫(xiě)圖片描述
  Scala中數(shù)組通過(guò)下標(biāo)對(duì)元素訪問(wèn)的方式如下圖所示,主要通過(guò)2種方式,第一種是通過(guò)“arr(i)”這種方式,與Java中不同,Java中主要通過(guò)“arr[i]”這種方式訪問(wèn)。這是因?yàn)樵赟cala中,任何操作符都是函數(shù)調(diào)用的方式進(jìn)行的。此外還提供了“arr.apply(i)”這種訪問(wèn)方式。
這里寫(xiě)圖片描述
  數(shù)組賦值和修改可通過(guò)下面兩種方式進(jìn)行,第一種適合代碼顯示賦值和修改,第二種適合程序運(yùn)行階段根據(jù)條件對(duì)特定元素賦值和修改。
這里寫(xiě)圖片描述
  對(duì)于數(shù)組的遍歷可通過(guò)以下2種方式。其中第一種注意for循環(huán)的to也會(huì)取到;第二種遍歷方式是通過(guò)foreach的方式傳遞匿名函數(shù),如果數(shù)組元素需要指定類(lèi)型,需要用“(item : String)”括號(hào)括起來(lái),如果處理代碼較復(fù)雜,可用“{}”語(yǔ)句塊表示。
這里寫(xiě)圖片描述
  Scala中元組的定義和元素訪問(wèn)如下所示,定義時(shí)直接使用“()”將不同的類(lèi)型的若干變量或字面值包圍起來(lái)即可。值得注意的是,對(duì)于元組元素通過(guò)“._n”的方式進(jìn)行訪問(wèn),且n從1開(kāi)始計(jì)數(shù)。
這里寫(xiě)圖片描述

參考

Scala學(xué)習(xí)筆記系列
Scala基礎(chǔ)之函數(shù)
Scala的循環(huán)和數(shù)組
面向 Java 開(kāi)發(fā)人員的 Scala 指南系列

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多