程序猿的口味-从C++STL聊到MSYS2-Qt
一直以來,我在教授C++語言編程課程的時候,總是在泛型上慌得很,生怕自己的半吊子C++知識貽笑大方。還好我發現同學們和我一樣都是糊涂蟲,只滿足于把STL的容器和算法當作簡單類型用就完了。印象深刻的一次尷尬就是學生問我:丁老師,怎么你給的例子的鏈表,和std::list的鏈表差別這么大,學了泛型,怎么還是看不懂STL庫的代碼呢?
我只能說,師傅領進門,修行靠個人,我也不懂哩!其實老師眼都看花了,也是看不懂。最近終于看完了,更覺得頭大。通過20年的教學,悲哀的發現一個事實,** 哪怕學完一本教材,讓我實現一個鏈表或者字典,也絕對不會長得像STL庫 **。每次試著研究STL庫、BOOST庫的源碼,總是覺得在鞭撻我的靈魂,PUA我,讓我知道我只是一個C語言學了一半的三流本科野路子。這種情況讓我痛不欲生,直到看到了Qt的源碼,才重新心情好起來:原來Qt的源碼風格非常適合我的口味,每次一打開,我受傷的靈魂就得到了安慰。
Qt實現可讀性好
對于這種泛型庫,都是沒有CPP的,也就是在頭文件里直接引入所有代碼。可以認為是內聯的。但哪怕只有.h文件,可讀性也有不同。
文本排版
雖然對頭文件來說,ALLinOne可以不管排版,但一般來說,我們實現一個類,還是喜歡不把實現直接寫在類的聲明里。這樣會顯著分散接口的文本描述,讓維護者不知道這個類有多少方法。STL庫大部分方法是直接寫在A的聲明里:
class A{ //...FunA(){//50行}FunB(){//50行}//... }Qt把比較冗長的方法的聲明、實現分開陳述。
class A{ //...FunA();FunB();//... } A::FunA(); {//50行 } A::FunB() {//50行 }Qt這樣做的好處是,這個類的全貌盡收眼底。就像是你寫論文的時候,有個目錄,而不是上來就第一段。STL庫這樣寫,2000多行的程序,上來就把人打蒙了。
此外,Qt的縮進、大括號的配對都比較美觀。相對起來g++的STL就隨意多了。
命名風格
二者的命名風格大不相同。就拿 list::push_front來看
STL:
Qt:
inline void push_front(const T &t) { prepend(t); } template <typename T> inline void QList<T>::prepend(const T &t) {if (d->ref.isShared()) {Node *n = detach_helper_grow(0, 1);QT_TRY {node_construct(n, t);} QT_CATCH(...) {++d->begin;QT_RETHROW;}} else {if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) {Node *n = reinterpret_cast<Node *>(p.prepend());QT_TRY {node_construct(n, t);} QT_CATCH(...) {++d->begin;QT_RETHROW;}} else {Node *n, copy;node_construct(©, t); // t might be a reference to an object in the arrayQT_TRY {n = reinterpret_cast<Node *>(p.prepend());;} QT_CATCH(...) {node_destruct(©);QT_RETHROW;}*n = copy;}} }STL庫的變量名,太多的下劃線(__)和奇怪的前綴,比如_M_, 可讀性太差。namespace是可以嵌套的,既然這么怕重名,還不如定義namespace呢。
其實Qt吸引我的遠不止上述這些,我在開發工具上的個人口味,決定了我在用Windows開發時,只愛 MSYS2, 以及里面的Qt。
個人口味
我一直覺得自己水平很差,還敢教學生寫代碼。唉,真的慚愧。不過我發現可能我這樣水平的人,真的不適合學習純粹的C++、不適合學Java,不適合學Python,不適合學C#,還是學習Qt吧。沒辦法,寫了這么多年程序,從Logo語言(中華學習機)、GWBasic, Qbasic, VisualBasic, TC2.0, TC3.1, Borland C++/BCB,VC/MFC 到 GNU C++, Java, Python,node.js, plpgSql, plsql , Excel 以及VBScript, bash,……需要啥子,就學啥子,但是不代表我都喜歡——有些東西,我一直難以習慣,即使看得懂,也很難喜歡——不合口味。
討厭的口味
喜歡MSys2Qt的原因
總觀點
MSYS2 + Qt是給一個一般水平的科研工作者開發出工業級別生產力工具的極佳解決方案。不需要很多的投入,就可以開發出跨平臺的、綠色版的高度可用的生產力工具。
總結
以上是生活随笔為你收集整理的程序猿的口味-从C++STL聊到MSYS2-Qt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总结:计算机原理
- 下一篇: 哪些行业可以申请高新技术企业?