真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Scala編程之惰性函數(shù)-創(chuàng)新互聯(lián)

一、為什么需要惰性函數(shù)

惰性計(jì)算(盡可能延遲表達(dá)式求值)是許多函數(shù)式編程語(yǔ)言的特性。惰性集合在需要時(shí)提供其元素,無(wú)需預(yù)先計(jì)算它們,這帶來(lái)了一些好處。首先,您可以將耗時(shí)的計(jì)算推遲到絕對(duì)需要的時(shí)候。其次,您可以創(chuàng)造無(wú)限個(gè)集合,只要它們繼續(xù)收到請(qǐng)求,就會(huì)繼續(xù)提供元素。函數(shù)的惰性使用讓您能夠得到更高效的代碼。Java并沒(méi)有為惰性提供原生支持, Scala提供了,使用很方便。

成都創(chuàng)新互聯(lián)公司專注于桓仁企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,成都做商城網(wǎng)站?;溉示W(wǎng)站建設(shè)公司,為桓仁等地區(qū)提供建站服務(wù)。全流程定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

二、java實(shí)現(xiàn)懶加載

懶漢式

public class LazyDemo {

    private String property;  //屬性也可能是一個(gè)數(shù)據(jù)庫(kù)連接,文件等資源
    public String getProperty(){
        if (property==null){
            property=initProperty();  //如果沒(méi)有初始化過(guò),那么進(jìn)行初始化
        }
            return property;
    }

    private String initProperty() {
        return "property";
    }
}

三、惰性函數(shù)介紹

當(dāng)函數(shù)被聲明為lazy的時(shí)候,函數(shù)并不會(huì)立即執(zhí)行,而是當(dāng)我們首次對(duì)這個(gè)函數(shù)進(jìn)行調(diào)用了,我們才會(huì)執(zhí)行這個(gè)函數(shù)。所以我們把這個(gè)叫做惰性函數(shù)(在java中叫做懶加載)。

四、案例

代碼一:

object LazyDemo {

  def main(args: Array[String]): Unit = {

  val res= sum(10,20) //沒(méi)有l(wèi)azy的修飾,這個(gè)函數(shù)就是eager的
    println("================")
   // println("res:"+res)
  }

  def sum(a:Int,b:Int):Int={
    println("sum執(zhí)行了")
    a+b
  }
}

輸出: ================
sum執(zhí)行了
res:30
代碼二:

object LazyDemo {

  def main(args: Array[String]): Unit = {

   lazy val res= sum(10,20) // lazy修飾,sum()函數(shù)不會(huì)被立即執(zhí)行,要首次被調(diào)用之后再執(zhí)行
    println("================")
   // println("res:"+res)
  }

  def sum(a:Int,b:Int):Int={
    println("sum執(zhí)行了")
    a+b
  }
}

輸出: ================

代碼二:

object LazyDemo {

  def main(args: Array[String]): Unit = {

   lazy val res= sum(10,20) // lazy修飾,sum()函數(shù)不會(huì)被立即執(zhí)行,要首次被調(diào)用之后再執(zhí)行
    println("================")
    println("res:"+res)      //調(diào)用sum方法
  }

  def sum(a:Int,b:Int):Int={
    println("sum執(zhí)行了")
    a+b
  }
}

輸出: ================
sum執(zhí)行了
res:30

綜上我們可以看出,scala中被lazy修飾之后,可以實(shí)現(xiàn)懶加載,這在大數(shù)據(jù)項(xiàng)目中數(shù)據(jù)的加載計(jì)算會(huì)非常有用?。?/p>

五:注意

1)lazy不能修飾var類型變量
2)函數(shù)被lazy修飾后,會(huì)導(dǎo)致函數(shù)的運(yùn)行被推遲,我們?cè)诼暶饕粋€(gè)變量,如果給變量加個(gè)lazy,那么變量的聲明也會(huì)被推遲,只有被使用時(shí)才會(huì)聲明生效。例如:

scala> val a=100
a: Int = 100

scala> lazy val b=1000
b: Int = 

scala> println(b)
1000

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前標(biāo)題:Scala編程之惰性函數(shù)-創(chuàng)新互聯(lián)
文章地址:http://weahome.cn/article/jidsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部