1.1 我為什么開(kāi)發(fā)Ruby
1993年開(kāi)始開(kāi)發(fā)Ruby
1.1.1 編程語(yǔ)言的重要性
語(yǔ)言體現(xiàn)了人類思考的本質(zhì)。
語(yǔ)言可以影響說(shuō)話者的思想。
程序員由于使用的編程語(yǔ)言不同,他的思考方法和編寫(xiě)出來(lái)的代碼都會(huì)受到編程語(yǔ)言的很大影響。
如果我們選擇了好的編程語(yǔ)言,那么成為好程序員的可能性就會(huì)大很多。
一個(gè)程序員,不管他使用什么編程語(yǔ)言,他在一定時(shí)間里編寫(xiě)的程序行數(shù)是一定的。
程序員根據(jù)所選擇編程語(yǔ)言的不同,他的開(kāi)發(fā)效率會(huì)有十倍、百倍甚至上千倍的差別。
軟件開(kāi)發(fā),要求能夠用更少的成本、更短的時(shí)間,開(kāi)發(fā)出更多的軟件。
需要開(kāi)發(fā)的軟件越來(lái)越多,開(kāi)發(fā)成本卻有限,所以對(duì)于開(kāi)發(fā)效率的要求就很高。編程語(yǔ)言就成了解決這個(gè)矛盾的重要工具。
1.1.2 Ruby的原則
Ruby編程語(yǔ)言的設(shè)計(jì)目標(biāo)是,讓作為語(yǔ)言設(shè)計(jì)者的我能夠輕松編程,進(jìn)而提高開(kāi)發(fā)效率。
三個(gè)設(shè)計(jì)原則:
- 簡(jiǎn)潔性
- 擴(kuò)展性
- 穩(wěn)定性
1.1.3 簡(jiǎn)潔性
編程語(yǔ)言在這半個(gè)世紀(jì)以來(lái)是向著簡(jiǎn)潔化的方向發(fā)展的,從程序的簡(jiǎn)潔程度就可以看出一門(mén)編程語(yǔ)言本身的能力。
隨著編程語(yǔ)言的演進(jìn),程序員已經(jīng)可以更簡(jiǎn)單、更抽象地編程了。
隨著計(jì)算機(jī)性能的提高,以前在編程語(yǔ)言里實(shí)現(xiàn)不了的功能,現(xiàn)在也可以做到了。
面向?qū)ο蟮乃枷胫皇前褦?shù)據(jù)和方法看做一個(gè)整體,當(dāng)做對(duì)象來(lái)處理,并沒(méi)有解決以前解決不了的問(wèn)題。
面向?qū)ο蟮姆椒ú](méi)有實(shí)現(xiàn)任何新的東西,卻要在運(yùn)行時(shí)判定要調(diào)用的方法,傾向于增大程序的運(yùn)行開(kāi)銷。
現(xiàn)在,由于計(jì)算機(jī)性能大大提高,只要可以提高軟件開(kāi)發(fā)效率,浪費(fèi)一些計(jì)算機(jī)資源也無(wú)所謂了。
變量和表達(dá)式的類型檢查,在執(zhí)行時(shí)已經(jīng)可以自動(dòng)檢查,而不用在編譯時(shí)檢查了。
Ruby不進(jìn)行明確的數(shù)據(jù)類型定義,不必要的聲明都可以省略。
Ruby的目標(biāo)就是成為開(kāi)發(fā)效率高、“能直接運(yùn)行的偽碼式編程語(yǔ)言”。
class Sample {
private static int fib (int n) {
if (n < 2) {
return n;
} else {
return fib(n-2) + fib(n-1);
}
}
public static void main(String[] args) {
System.out.println("fib(6)=" + fib(6));
}
}
def fib(n)
if n < 2
n
else
fib(n - 2) + fib(n - 1)
end
end
print "fib (6) =", fib(6), "\n"
1.1.4 擴(kuò)展性
編程語(yǔ)言作為軟件開(kāi)發(fā)工具,其最大的特征就是對(duì)要實(shí)現(xiàn)的功能事先沒(méi)有限制。
編程語(yǔ)言開(kāi)發(fā)者實(shí)際上并不知道這種編程語(yǔ)言會(huì)用來(lái)開(kāi)發(fā)什么,會(huì)在哪些領(lǐng)域中應(yīng)用。所以,編程語(yǔ)言的擴(kuò)展性非常重要。
實(shí)現(xiàn)擴(kuò)展性的一個(gè)重要方法就是抽象化。抽象化就是把數(shù)據(jù)和要做的處理都封裝起來(lái),就像一個(gè)黑盒子,我們不知道它的內(nèi)部是怎么實(shí)現(xiàn)的,但是可以用它。
以前的編程語(yǔ)言在抽象化方面是很弱的,要做什么處理首先要了解很多編程語(yǔ)言的細(xì)節(jié)。而很多面向?qū)ο蠡蚝瘮?shù)式的現(xiàn)代編程語(yǔ)言,都在抽象化方面做得很好。
程序塊——>List高階函數(shù)的特性
已有類的擴(kuò)展特性
編程語(yǔ)言不是從安全性角度考慮為減少程序員犯錯(cuò)誤,而是在程序員自己負(fù)責(zé)的前提下為他提供最大限度發(fā)揮能力的靈活性。
不要因?yàn)橄氘?dāng)然而加入無(wú)謂的限制。
從某種角度說(shuō),編程的歷史就是因?yàn)橄氘?dāng)然而失敗的歷史。
Ruby對(duì)整數(shù)范圍不做任何限制,盡最大努力排除“想當(dāng)然”。
1.1.5 穩(wěn)定性
Ruby沒(méi)有宏。
宏可以替換掉原有的程序,給原有的程序加入新的功能。如果有了宏,不管是控制結(jié)構(gòu),還是賦值,都可以隨心所欲地進(jìn)行擴(kuò)展。
Lisp流,其語(yǔ)言核心部分僅僅提供極為有限的特性和構(gòu)造,其余的控制結(jié)構(gòu)都是在編譯時(shí)通過(guò)用宏來(lái)組裝其核心特性來(lái)實(shí)現(xiàn)的。
如果在編程語(yǔ)言中引入宏,活用宏的程序就會(huì)像是用完全不同的專用編程語(yǔ)言寫(xiě)出來(lái)的一樣。
寫(xiě)出來(lái)的程序是否具有很高的可讀性非常重要。從整體來(lái)看,程序員讀程序的時(shí)間可能比寫(xiě)程序的時(shí)間還長(zhǎng)。讀程序包括為理解程序的功能去讀,或者是為維護(hù)程序去讀,或者是為調(diào)試程序去讀。
編程語(yǔ)言的語(yǔ)法是解讀程序的路標(biāo)。
1.1.6 一切皆因興趣
編程語(yǔ)言存在的目的是讓人用它來(lái)開(kāi)發(fā)程序,并且盡量能提高開(kāi)發(fā)效率。這樣的話,才能讓人在開(kāi)發(fā)中體會(huì)到編程的樂(lè)趣。
程序開(kāi)發(fā)本來(lái)就是一件很快樂(lè)、很刺激和很有創(chuàng)造性的事情。