我覺得C++整個語言其實一直在做兩件事情
1.讓靜態語言的C++盡量提供動態的功能
2.讓C++提供資料處理的功能
動態功能:
1.多型:C++利用inheritance + dynamic binding和template達成polymorphism。
2.動態資料:classic C++靠new、linked list,modern C++靠STL container等支援動態資料。
資料處理:
1.classic C++靠資料結構那些方式,如array,linked list,tree...。
2.modern C++靠STL的container。
以上是C++花了很大的力氣跟篇幅盡量完成動態和資料處理的功能。
為什麼VFP從來沒有這些問題呢?
1.VFP是動態語言,所以天生就是多型,根本不需用額外的機制達成多型。
2.動態資料方面,VFP內建資料庫引擎,所以動態資料用資料庫解決即可,這也是我以前寫VFP時,幾乎沒用過array,都是用cursor去寫,此時可用SQL處理,若SQL真的寫不出來,還有xBase去處理。
3.資料處理方面,由於VFP內建資料庫引擎,用資料庫處理就好,又內建SQL和xBase語言,所以就算不用資料結構那些東西,也一樣可以處理資料,甚至更好用。
這也是為什麼我以前寫VFP好幾年,也沒遇到什麼寫不出來或不好寫的地方,原來VFP動態語言和資料庫的特性,剛剛好解決了C++靜態語言和不支援資料庫的問題。
以前寫VFP時,總覺得很自卑,覺得VFP只是個資料庫語言,不是如VB、VC++那種主流語言,一直想跳出VFP這個框框,但真的學會了VB和VC++後,真的體會出李潛瑞所說的:『簡單事情簡單做』,同樣是解決問題,VFP用簡單的方式解決了,VB、VC++卻要用很複雜的機制才能解決,現在的我又開始喜歡VFP了,不支援.NET有什麼關係,不支援Web有什麼關係,拿來當Programmer私藏的語言寫寫小tool和Win32仍然很方便,就像Python那些語言一樣。其實我覺得一個程式語言就如同80/20法則一樣,C++花了80%的力氣去完成20%的功能,為什麼不像VFP那樣將力氣放在常用的80%功能上,而放棄20%的功能呢?若真的在VFP還需要用到20%的功能,大可用C++寫dll給VFP呼叫,重要的是VFP將那80%弄的更簡單,更方便,更好用。Python和C++的搭配不也是如此?C++負責寫core部分,而Python負責control部分,這樣剛好是動態語言和靜態語言完美搭配,若用這種思維來看VFP亦然,C++負責core部分,VFP負責control部分,也是另一種動態語言和靜態語言的完美搭配。
學其他語言沒用嗎?我一直認為VFP的高手,很多也是其他語言的高手,他們用其他語言的觀念和技巧拿到VFP來實作,VFP雖然是OOP,不過若你一直緊守在VFP領域,要在OOP有所突破很難,畢竟VFP專講OOP的書很少,從C++可以學到很多OOP和Design Pattern的技術,只要將OO的精神學到,再拿來VFP活用即可,畢竟OO是個觀念和『信仰』,呵呵,並不限定語言,在Delphi領域有句話:『Real programmer uses C++,smart programmer uses Delphi』,這句話應該改成『Real programmer uses C++,smart programmer uses Visual FoxPro + C++』,程式功力高強的人到了一個境界,其實不會很堅持非用什麼語言不可,完全是問題導向,看哪種語言適合什麼問題,就用那種語言,最後整合之。