日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
學(xué)習(xí)Scala中的Rational類:分?jǐn)?shù)的模型化

Rational類的式樣書(shū)

10余年的黃山區(qū)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整黃山區(qū)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“黃山區(qū)網(wǎng)站設(shè)計(jì)”,“黃山區(qū)網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

分?jǐn)?shù):rational number是一種可以表達(dá)為比率 的數(shù)字,這里的nd是數(shù)字,其中d不能為零。n被稱作是分子:numerator,d被稱作是分母:denominator。分?jǐn)?shù)的例子有: , , 和 。與浮點(diǎn)數(shù)相比較,分?jǐn)?shù)的優(yōu)勢(shì)是小數(shù)部分得到了完全表達(dá),沒(méi)有舍入或估算。

編輯推薦:Scala編程語(yǔ)言專題

本章我們將要設(shè)計(jì)的類必須模型化分?jǐn)?shù)的行為,包括允許它們執(zhí)行加,減,乘還有除運(yùn)算。要加兩個(gè)分?jǐn)?shù),首先要獲得公分母,然后才能把兩個(gè)分子相加。例如,要計(jì)算 ,先把左操作數(shù)的上下部分都乘上3,右操作數(shù)的兩部分都乘上2,得到了 。把兩個(gè)分子相加產(chǎn)生結(jié)果, 。要乘兩個(gè)分?jǐn)?shù),可以簡(jiǎn)單的兩個(gè)分子相乘,然后兩個(gè)分母相乘。因此, 得到了 ,還可以簡(jiǎn)化表示成它的“通?!毙问?。除法是把右操作數(shù)分子分母調(diào)換,然后做乘法。例如 與相同,結(jié)果是 。

一個(gè)或許不怎么重要的發(fā)現(xiàn)是,在數(shù)學(xué)上,分?jǐn)?shù)不具有可變的狀態(tài)。一個(gè)分?jǐn)?shù)加到另外一個(gè)分?jǐn)?shù)上,產(chǎn)生的結(jié)果是一個(gè)新的分?jǐn)?shù)。而原來(lái)的數(shù)不會(huì)被“改變”。我們將在本章設(shè)計(jì)的不可變的Rational類將秉承這一屬性。每個(gè)分?jǐn)?shù)將都被表示成一個(gè)Rational對(duì)象。當(dāng)兩個(gè)Rational對(duì)象相加時(shí),一個(gè)新的帶著累加結(jié)果的Rational對(duì)象將被創(chuàng)建出來(lái)。

本章還將捎帶提一些Scala讓你寫(xiě)出感覺(jué)像原生語(yǔ)言支持的庫(kù)的方法。例如,在本章結(jié)尾你將能用Rational類這樣做:

 
 
 
 
  1. scala> val oneHalf = new Rational(1, 2)
  2. oneHalf: Rational = 1/2
  3. scala> val twoThirds = new Rational(2, 3)
  4. twoThirds: Rational = 2/3
  5. scala> (oneHalf / 7) + (1 twoThirds)
  6. res0: Rational = 17/42

創(chuàng)建Rational類

開(kāi)始設(shè)計(jì)Rational類的著手點(diǎn)是考慮客戶程序員將如何創(chuàng)建一個(gè)新的Rational對(duì)象。假設(shè)我們已決定讓Rational對(duì)象是不可變的,我們將需要那個(gè)客戶在創(chuàng)建實(shí)例時(shí)提供所有需要的數(shù)據(jù)(本例中,是分子和分母)。因此,我們應(yīng)該這么開(kāi)始設(shè)計(jì):

 
 
 
 
  1. class Rational(n: Int, d: Int)

這行代碼里首先應(yīng)當(dāng)注意到的是如果類沒(méi)有主體,就不需要指定一對(duì)空的大括號(hào)(當(dāng)然你如果想的話也可以)。在類名,Rational,之后括號(hào)里的n和d,被稱為
類參數(shù):class parameter。Scala編譯器會(huì)收集這兩個(gè)類參數(shù)并創(chuàng)造一個(gè)帶同樣的兩個(gè)參數(shù)的
主構(gòu)造器:primary constructor

不可變對(duì)象的權(quán)衡

不可變對(duì)象提供了若干強(qiáng)于可變對(duì)象的優(yōu)點(diǎn)和一個(gè)潛在的缺點(diǎn)。首先,不可變對(duì)象常常比可變對(duì)象更具邏輯性,因?yàn)樗鼈儧](méi)有隨著時(shí)間而變化的復(fù)雜的狀態(tài)空間。其次,你可以很自由地傳遞不可變對(duì)象,而或許需要在把可變對(duì)象傳遞給其它代碼之前,需要先建造個(gè)以防萬(wàn)一的副本。第三,沒(méi)有機(jī)會(huì)能讓兩個(gè)同時(shí)訪問(wèn)不可變對(duì)象的線程破壞它合理構(gòu)造的狀態(tài),因?yàn)楦緵](méi)有線程可以改變不可變對(duì)象的狀態(tài)。第四,不可變對(duì)象讓哈希表鍵值更安全。比方說(shuō),如果可變對(duì)象在被放進(jìn)了HashSet之后被改變,那么你下一次查找這個(gè)HashSet就找不到這個(gè)對(duì)象了。

不可變對(duì)象唯一的缺點(diǎn)就是它們有時(shí)需要復(fù)制很大的對(duì)象圖而可變對(duì)象的更新可以在原地發(fā)生。有些情況下這會(huì)變得難以快速完成而可能產(chǎn)生性能瓶頸。結(jié)果,要求庫(kù)提供可變替代以使其更容易在大數(shù)據(jù)結(jié)構(gòu)的中間改變一些元素也并非是一件稀奇的事情。例如,類StringBuilder是不可變的String的可變替代。

注意

這個(gè)最初的Rational例子凸顯了Java和Scala之間的不同。Java類具有可以帶參數(shù)的構(gòu)造器,而Scala類可以直接帶參數(shù)。Scala的寫(xiě)法更簡(jiǎn)潔——類參數(shù)可以直接在類的主體中使用;沒(méi)必要定義字段然后寫(xiě)賦值函數(shù)把構(gòu)造器的參數(shù)復(fù)制到字段里。這可以潛在地節(jié)省很多固定寫(xiě)法,尤其是對(duì)小類來(lái)說(shuō)。

Scala編譯器將把你放在類內(nèi)部的任何不是字段的部分或者方法定義的代碼,編譯進(jìn)主構(gòu)造器。例如,你可以像這樣打印輸出一條除錯(cuò)消息:

 
 
 
 
  1. class Rational(n: Int, d: Int) {
  2.  println("Created "+n+"/"+d)
  3. }

根據(jù)這個(gè)代碼,Scala編譯器將把println調(diào)用放在Rational的主構(gòu)造器。因此,println調(diào)用將在每次創(chuàng)建一個(gè)新的Rational實(shí)例時(shí)打印這條除錯(cuò)信息:

 
 
 
 
  1. scala> new Rational(1, 2)
  2. Created 1/2
  3. res0: Rational = Rational@a0b0f5

【相關(guān)閱讀】

  1. Scala中的富包裝器:富操作和富類列表
  2. Scala操作符的優(yōu)先級(jí)和關(guān)聯(lián)性
  3. Scala對(duì)象的相等性比較
  4. Scala的數(shù)學(xué)運(yùn)算、關(guān)系和邏輯操作及位操作符
  5. Scala的操作符:任何方法都可以是操作符

新聞名稱:學(xué)習(xí)Scala中的Rational類:分?jǐn)?shù)的模型化
分享地址:http://www.dlmjj.cn/article/cdgesos.html