tl;dr算法抽象同2第二種看著簡(jiǎn)潔,但未必永遠(yuǎn)都最好;在本例中當(dāng)然是好的,大部分時(shí)候也應(yīng)該是除了可讀性之外都更優(yōu)于第一種的,然而即使是第一種,好程序員也不應(yīng)該寫(xiě)成那個(gè)樣子,還有改善空間。說(shuō)到可讀性方面也要看受眾:對(duì)于數(shù)學(xué)不好的的人,比如我,看第一種更容易明白。但對(duì)于數(shù)學(xué)基礎(chǔ)扎實(shí)的人,第二種應(yīng)該也沒(méi)什么障礙吧。因此,若你追求第二種寫(xiě)法,就去提高用數(shù)學(xué)解決/表達(dá)問(wèn)題的能力。這方面我很差,就不多扯了。抽取更小粒度的方法是重構(gòu)里最基礎(chǔ)最常用的技巧,應(yīng)否抽取是要看上下文的?;旧现灰锌芍赜玫臋C(jī)會(huì),抽取出來(lái)就是OK的。你舉的例子,我明白你的意思,但由于缺少上下文,所以無(wú)法說(shuō)好與壞?,F(xiàn)實(shí)中的選擇,也是要取決于實(shí)際的代碼環(huán)境,沒(méi)有必然的規(guī)則。第2條實(shí)際上是從一個(gè)方面體現(xiàn)了你的抽象思維能力,第3條也是類(lèi)似的——從代碼組織的層面。我覺(jué)得這方面的話題真是見(jiàn)仁見(jiàn)智,而且很多時(shí)候并不是自己決定就OK了,還得看身邊的人。說(shuō)白了,你寫(xiě)的代碼如果只是你自己看,你寫(xiě)成什么樣都無(wú)所謂,只要它能用;如果糟糕的結(jié)構(gòu)和組織性帶來(lái)了性能和維護(hù)上的問(wèn)題,你自然會(huì)慢慢改善它——但是好代碼都不是一次寫(xiě)成的。另一方面,如果你不是只給自己看,你要考慮和團(tuán)隊(duì)之間的協(xié)作等問(wèn)題,那么代碼風(fēng)格或規(guī)范之類(lèi)的東西應(yīng)該是來(lái)自整個(gè)團(tuán)隊(duì)的共識(shí)。有時(shí)候你不得不妥協(xié)退化,或者努力學(xué)習(xí)進(jìn)步,一切都是為了讓大家能夠說(shuō)“同一個(gè)宇宙的語(yǔ)言”,否則你會(huì)很痛苦,用不了多久就會(huì)心灰意冷。題主應(yīng)該是有受Ruby語(yǔ)言影響的人,上個(gè)月RailsConf開(kāi)場(chǎng)時(shí)DHH作的KeynotePresentation不知道你看了沒(méi)有?如果沒(méi)有,去看看吧,你要的答案里面就有:WritingSoftware-RailsConf2014byDHH