scala 包導(dǎo)入的那些事兒

import依賴庫(kù)是編程首要事件。就像呼吸一樣是那么的自然。scala也不能免俗。我們知道JavaScala存在大量差異,但在import依賴上卻包含大量類似。

本文列舉下scala使用import的一些特殊的點(diǎn),對(duì)那些通用import方法咱就不描述啦。

默認(rèn)(隱含) import

在正式開始之前,咱們跑個(gè)題。
在使用scala時(shí),我們發(fā)現(xiàn)即使沒有導(dǎo)入任何依賴, 如下代碼為何可以正常運(yùn)行?

println("hello world.")
"01".toInt

編程語言是邏輯最嚴(yán)格的命令集合。代碼編譯/運(yùn)行正常并不是銀彈。正常運(yùn)行背后,它必然需要合理邏輯和解釋。而上面代碼正常執(zhí)行合理邏輯是:scala默認(rèn)導(dǎo)入依賴庫(kù),才保證常用api可以正常使用。

//默認(rèn)導(dǎo)入庫(kù)
import java.lang._   
import scala._      
import Predef._     

上面3個(gè)庫(kù)是代碼正常運(yùn)行的邏輯支撐。

命名沖突 - 重命名庫(kù)中成員

在開發(fā)過程中,命名沖突并不在少數(shù).項(xiàng)目對(duì)命名規(guī)則要求越規(guī)范,命名沖突機(jī)會(huì)會(huì)越多.簡(jiǎn)單來個(gè)例子:Date在各個(gè)公共包中是常見的類.

import java.sql.Date //sql date 處理類
import java.uitl.Date //java 工具類中date處理類    

如何正確使用合適的類,解決命名沖突的問題.方式有很多,scala重命名類就是其中的一個(gè)。如下所示:

import java.sql.{Date => SqlDate}
import java.util.{Date => JavaDate}

scala REPL示例:

scala> import java.util.{Date => JavaDate}
scala> import java.sql.{Date => SqlDate}

scala> new JavaDate()
res0: java.util.Date = Tue Mar 17 16:05:39 CST 2020
scala> new SqlDate(111111)
res2: java.sql.Date = 1970-01-01

重命名庫(kù)的成員既規(guī)避了命名沖突,又對(duì)類庫(kù)進(jìn)行分類,增加了可讀性。

隱藏對(duì)象/排除對(duì)象

隱藏對(duì)象import方法和重命名思想類似,操作方式如下:

import java.util.{Date => _} //隱藏對(duì)象Date

REPL 隱藏對(duì)象導(dǎo)入效果:

scala> import java.util.{Date => }
import java.util.{Date =>
}

scala> new Date()
<console>:15: error: not found: type Date //Date對(duì)象被隱藏
? new Date()
? ^

至于原理,熟悉=>操作符的很容易理解。

排除對(duì)象操作:

import java.util.{Date => _, _} //隱藏對(duì)象Date,在加上通配導(dǎo)入所有對(duì)應(yīng)
靜態(tài)導(dǎo)入
//示例1
val a = sin(0) 
//示例2
val a = Math.sin(0)

示例1,2 最大的區(qū)別就是可讀性更強(qiáng).這是靜態(tài)導(dǎo)入的功能,靜態(tài)導(dǎo)入適用范圍是:java的靜態(tài)類和scala的object方法。

//示例1
import java.lang.Math._ // _ 導(dǎo)入Math所有方法和變量供導(dǎo)入方使用
//示例2
import java.lang.Math

可讀性是提升效率和可維護(hù)性關(guān)鍵指標(biāo)。

按需導(dǎo)入(import statement anywhere)

上文命名沖突需要重命名類, 按需導(dǎo)入也能夠解決。按需導(dǎo)入通過限制類/包作用域起到導(dǎo)入的作用.import可作用在對(duì)象/函數(shù),甚至變量中.

//在類中
class ImportInClass{
import scala.util.Random
def printRandom {
val r = new Random
}
}
//在方法中
class ImportInMethod {
def printRandom {
import scala.util.Random
val r = new Random
}
}

以上是scala包導(dǎo)入一些非常規(guī)操作,使用起來對(duì)代碼易用和可讀性上提升不少。

2020第一篇心情: [青海長(zhǎng)云暗雪山,孤城遙望玉門]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容