通過代碼提高編程能力

原文發於:http://qing.weibo.com/2059598087/7ac2f90733002b1b.html

幾乎所有的程序語言都是作爲編程工具而出現的。因此每種語言必然有區別於其他語言的語法特性,後出現的語言可能會集成已出現程序語言的好的語法特性,也可能會適當創建合適的語言特性。早一些的,比如while、for、switch語句的出現。晚一些的,比如python中的生成器、生成器函數。在python中,還去掉了switch語句,增添了elif關鍵字。

因此,通過源代碼學習一門語言是能力進階畢竟的階段。畢竟初學者只是鸚鵡學舌的使用一門編程語言。而通過學習前輩的程序源碼,常常能豁然開朗,恍然大悟“原來還可以這樣寫代碼”。這種恍然大悟當然可以通過個人的編程實踐及聰明才智摸索創造出來。但終歸是“重新發明輪子”,效率是比較低的。
比如C語言中,“賦值語句也是表達式”。這句話對於初學者而言是晦澀的。他決不至能獨立創造出如下的代碼來:

while(c = getchar())
{
	...
}

而更可能寫出這樣的代碼:

c = getchar();
while(c)
{
    ...
    c = getchar();
}
而無論在那種語言中,初學者都絕無可能無師自通的學會遞歸函數的編寫。
void frecurse()
{
    ……
    ……frecurse()……
    ……
}
而對於一個從C轉到python的程序員來說,則可能會選擇性忽略for、while語句中的else語句塊。Python中去掉而來C語言中的switch語句,因爲該語句太過於靈活容易出錯。我也是在書上看到,原來switch語句中還可以嵌套if...else...語句。通過if...else...以及不使用break來控制程序流。顯然,在這樣寬容的約束之下,極可能產生控制流混亂的代碼。正是因爲switch語句這一缺點,在C#中,規定每一個case語句必須以break或者goto語句結束。這既限制但又保留了switch語句的靈活性。不過同樣地,goto語句的不當使用仍會使程序流更難理解。由此看來,python中取消switch語句是明智的。只是對於C程序員而言,這多少會有些不太適應。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章