日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Scala講座:全局變量問(wèn)題的解決

本文節(jié)選自最近在日本十分流行的Scala講座系列的第七篇,由JavaEye的fineqtbull翻譯。本系列的作者牛尾剛在日本寫(xiě)過(guò)不少有關(guān)Java和Ruby的書(shū)籍,相當(dāng)受歡迎。fineqtbull由于時(shí)間關(guān)系先翻譯了他認(rèn)為最精彩的第七篇,這篇文章節(jié)選了第七篇中關(guān)于Scala全局變量的描述。

專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)右玉免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

前言

這個(gè)連載也持續(xù)了不少的“刺激”內(nèi)容了,這次為還沒(méi)有習(xí)慣函數(shù)式編程的讀者寫(xiě)一些東西。

這樣寫(xiě)那好像我就是函數(shù)式編程的高手了,其實(shí)不是。到現(xiàn)在為止做的盡是Java的工作,從去年開(kāi)始對(duì)于羽生田先生的Scala工作感興趣之后投身于Scala語(yǔ)言以來(lái),一直沒(méi)有習(xí)慣函數(shù)式的思考方法,整天在這里面摸爬滾打。看了大量文章,寫(xiě)了大量代碼之后終于覺(jué)得抓住了函數(shù)式編程的重點(diǎn)。

用面向?qū)ο蠛秃瘮?shù)式方法來(lái)解決全局變量問(wèn)題

關(guān)于需要函數(shù)式編程的動(dòng)機(jī),想從“全局變量問(wèn)題”這個(gè)側(cè)面來(lái)考慮一下。

“全局變量問(wèn)題”是有關(guān)程序維護(hù)方面的問(wèn)題(圖1)。在編寫(xiě)多模塊共享全局變量的時(shí)候,很難知道在何時(shí)哪個(gè)模塊使用了該全局變量,程序也就比較容易出錯(cuò)了。而且,當(dāng)準(zhǔn)備刪除全局變量時(shí),由于不知道是否還有其他模塊在使用它,所以最終把全局變量的定義留在那里不動(dòng)了。類(lèi)似情況大家都應(yīng)該碰到過(guò)吧。

Scala講座 圖1:全局變量問(wèn)題

解決“全局變量問(wèn)題”有兩個(gè)方法,一是收窄數(shù)據(jù)的有效范圍;二是使變量被賦值一次后就不能更改。

面向?qū)ο蟮姆绞讲扇〉氖堑谝环N方法。多模塊共有的數(shù)據(jù)被封裝在“對(duì)象”中,只有在“對(duì)象”內(nèi)部才能夠被使用(圖 2)。

Scala講座 圖2:面向?qū)ο蠓绞较陆鉀Q全局變量問(wèn)題的方法

函數(shù)式語(yǔ)言采用的是第二種方法,也就是一旦給變量賦值后該變量的值將不會(huì)改變(圖3)。

Scala講座 圖3:函數(shù)式語(yǔ)言解決全局變量問(wèn)題的方法

因此,下述的代碼可以認(rèn)為將數(shù)字“100”綁定在變量“price”上。感覺(jué)上就像變量“price”可以像數(shù)字“100”那樣被使用。以前的連載也提到過(guò),Scala中如果用val來(lái)定義變量的話(huà),該變量將不能被重新賦值。為了正真的函數(shù)式編程就用val來(lái)定義變量吧。

 
 
 
 
  1. scala> val price = 100
  2. price: Int = 100

這樣使變量的再賦值變得不可能之后,就能保證引用的透明性了。也就是說(shuō),使用同樣的值作為參數(shù)來(lái)調(diào)用同一函數(shù)的情況下,任何時(shí)候取得的返回值都是一致的。

例如面向?qū)ο蟮那闆r下,由于對(duì)象實(shí)例含有內(nèi)部狀態(tài),所以一旦內(nèi)部狀態(tài)改變后,即使使用相同的參數(shù)向同一個(gè)對(duì)象實(shí)例傳遞消息,取得的結(jié)果也有可能不同(圖4)。如果是函數(shù)式編程的話(huà)就沒(méi)有這種“副作用”了。

Scala講座 圖4:副作用概念圖

【編輯推薦】

  1. 萬(wàn)物皆對(duì)象:介紹Scala對(duì)象
  2. Scala的泛型:最強(qiáng)大的特性
  3. Scala的Trait:可以包含代碼的接口
  4. Scala的模式匹配和條件類(lèi)
  5. Scala類(lèi):復(fù)數(shù)類(lèi),無(wú)參方法,繼承和覆蓋

分享名稱(chēng):Scala講座:全局變量問(wèn)題的解決
URL標(biāo)題:http://www.5511xx.com/article/ccsispe.html