Essential Scala: Ice Breaker

Scala是一門結(jié)合OO, FP特性的混血兒渗常,支持多種范式的程序設(shè)計(jì)語言。本文通過一個(gè)簡單的例子汗盘,開啟Scala的破冰之旅皱碘。

需求:將一個(gè)字符串序列依次轉(zhuǎn)化為大寫

破冰

object Strings {
  def upper(strs: String*): Seq[String] = {
    strs.map((s: String) => s.toUpperCase())
  } 
}

單鍵對(duì)象

Scala摒棄了static的語義,使用object隐孽,體現(xiàn)了Scala純正的OO血統(tǒng)癌椿。諸如靜態(tài)工廠方法,工具類等實(shí)現(xiàn)模式菱阵,是Scala單鍵對(duì)象最佳的使用場景踢俄。

變長參數(shù)

strs: String*表示變長的字符串列表,可以向Strings.upper傳遞任意多的字符串晴及。事實(shí)上都办,strs: String*的真正類型為scala.collection.mutable.WrappedArray,所以strs: String*擁有普通集合類的一般特征虑稼,例如調(diào)用map方法琳钉。

泛型

Seq[String]Scala的泛型表示,而非Seq<String>蛛倦。Seq表示一個(gè)有序的集合歌懒。事實(shí)上,strs.map返回的類型實(shí)際為scala.collection.mutable.ArrayBuffer胰蝠,但用戶無需感知這個(gè)事實(shí)歼培,這也體現(xiàn)了「按照接口編程」的良好設(shè)計(jì)原則震蒋。

一等函數(shù)

(s: String) => s.toUpperCase()是一個(gè)函數(shù)字面值,或者將其看成一個(gè)匿名函數(shù)躲庄。事實(shí)上查剖,它真正的類型為:Function1[String, String],表示入?yún)?code>String類型噪窘,返回值為String的一元函數(shù)笋庄,從而將FP很優(yōu)雅地融入到OO的世界之中。

表達(dá)式

Scala一切都是面向表達(dá)式的倔监,包括函數(shù)或方法直砂;此外,函數(shù)返回值的=語法浩习,也增強(qiáng)了Scala類型推演的能力静暂,而且常常略去顯式的return關(guān)鍵字(顯式的return,相反削弱了函數(shù)返回值自動(dòng)推演的能力)谱秽。

特殊地洽蛀,當(dāng)函數(shù)只包含單條語句時(shí),常常略去大括號(hào)疟赊,使得函數(shù)更像表達(dá)式郊供,程序因此也變得極其優(yōu)雅,簡單近哟,漂亮驮审。

def upper(strs: String*): Seq[String] = 
  strs.map((s: String) => s.toUpperCase()) 

類型推演

事實(shí)上,編譯器可以很容易地推演出匿名函數(shù)的入?yún)㈩愋图矗瘮?shù)字面值可以變得更加簡單疯淫。

def upper(strs: String*): Seq[String] = 
  strs.map(s => s.toUpperCase()) 

省略括號(hào)

按照慣例,略去s.toUpperCase()的括號(hào)鼠证,強(qiáng)調(diào)函數(shù)是無副作用的峡竣。

def upper(strs: String*): Seq[String] = 
  strs.map(s => s.toUpperCase) 

占位符

因?yàn)楹瘮?shù)字面值s => s.toUpperCase中的s在函數(shù)體內(nèi)僅出現(xiàn)一次,可以使用「占位符」進(jìn)一步簡化程序量九。

def upper(strs: String*): Seq[String] = 
  strs.map(_.toUpperCase) 

重載

  • 第二個(gè)upper重載函數(shù)适掰,必須顯式地聲明返回值類型;不能指望根據(jù)第一個(gè)重載的upper函數(shù)能夠自動(dòng)推演其返回值類型荠列。

  • strs: _*是將集合對(duì)象展開為變長參數(shù)的特殊語法类浪。

object Strings {
  def upper(strs: String*): Seq[String] = 
    strs.map(_.toUpperCase)
  
  def upper(strs: Array[String]): Seq[String] = 
    upper(strs: String*) 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肌似,隨后出現(xiàn)的幾起案子费就,更是在濱河造成了極大的恐慌,老刑警劉巖川队,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件力细,死亡現(xiàn)場離奇詭異睬澡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)眠蚂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門煞聪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逝慧,你說我怎么就攤上這事昔脯。” “怎么了笛臣?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵云稚,是天一觀的道長。 經(jīng)常有香客問我沈堡,道長静陈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任诞丽,我火速辦了婚禮窿给,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘率拒。我一直安慰自己,他們只是感情好禁荒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布猬膨。 她就那樣靜靜地躺著,像睡著了一般呛伴。 火紅的嫁衣襯著肌膚如雪勃痴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天热康,我揣著相機(jī)與錄音沛申,去河邊找鬼。 笑死姐军,一個(gè)胖子當(dāng)著我的面吹牛铁材,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奕锌,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼著觉,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了惊暴?” 一聲冷哼從身側(cè)響起饼丘,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辽话,沒想到半個(gè)月后肄鸽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卫病,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年典徘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟀苛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烂斋,死狀恐怖屹逛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汛骂,我是刑警寧澤罕模,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站帘瞭,受9級(jí)特大地震影響淑掌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝶念,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一抛腕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媒殉,春花似錦担敌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桃犬,卻和暖如春刹悴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背攒暇。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工土匀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人形用。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓就轧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尾序。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钓丰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容