最近,經(jīng)常見到一些高手寫的程序,看完之后,除了驚訝、佩服,更多的是反思;為什么別人可以寫出那么漂亮的程序?為什么別人的程序的數(shù)據(jù)結(jié)構(gòu)設計的那么工整?為什么別人的程序結(jié)構(gòu)寫的那么工整?為什么別人的命名那么準確?等等很多地方。 再想想自己,寫程序雖然不多,但是也有3年多了。為什么還是寫的那么爛(在結(jié)構(gòu)、命名和可讀性),近一年雖然在編程思想上有了很多改變,可是結(jié)構(gòu)和命名依舊很爛?自己什么時候才能做到那樣,可是改變意味著要經(jīng)受折磨。自己改如何面對? 說說別人寫的程序吧!很明顯的,數(shù)據(jù)、程序、配置分開。 關于系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設計: 根據(jù)整個系統(tǒng)的結(jié)構(gòu),對數(shù)據(jù)分好類,以及做好有可能操作的的準備,整個數(shù)據(jù)結(jié)構(gòu)是以結(jié)構(gòu)體為主打,將數(shù)據(jù)全部分成一類一類的。 然后根據(jù)數(shù)據(jù)屬性進行劃分,進行結(jié)構(gòu)體嵌套。嵌套到系統(tǒng)最頂層時,就剩那么幾大類數(shù)據(jù)類型,那么當需要操作數(shù)據(jù)時,可以按結(jié)構(gòu)一級一級索引下去。即使增加或刪減數(shù)據(jù),都很方便。整個系統(tǒng)中枚舉、共用體與位域用的也是相當多的。 程序中,很大一部分選項是可以在有限的屬性中選擇的,因此用了枚舉,使程序的可讀性更高。 共用體和位域的聯(lián)合使用,使程序的整體性和操作性變的更好,當需要寫位時,用位域?qū)懭耄枰x取時,再共用體中整體讀出,可以將多個同一類的標志位劃分到一個字節(jié)中,大量節(jié)約了系統(tǒng)空間。 關于數(shù)據(jù)與程序分開: 當一個系統(tǒng)的需求定下來之后,那么基本上結(jié)構(gòu)已經(jīng)定了,更多的是需要改一些參數(shù),那么對于一些全系統(tǒng)或者在系統(tǒng)中存在于很多地方的常量來說,需要不停的去修改,(本人曾經(jīng)是把它們定義成一個全局變量,需要改變時,去改初始值)我看到的最NB的程序是,整個程序中,基本上看不到數(shù)字。數(shù)字跑哪兒去了?到被宏替換掉了。用宏代替常量的好處是,程序的可讀性很高。修改也很方便。(當我每次看到這種程序時,總會發(fā)出感慨:真是變態(tài)的設計啊!!) 關于配置結(jié)構(gòu)的設計: 需求定了,系統(tǒng)邏輯就定了,可是有很多可以變化、調(diào)整的東西;例如:系統(tǒng)的端口轉(zhuǎn)移、系統(tǒng)時鐘、PWM初始參數(shù)、定時器的初始參數(shù)、.....(此處省略幾百字)太多東西需要變化的。怎么搞??? 加入到一個配置文件中,用宏將他們代替掉,那么程序的可讀性又提高了修改配置也方便了。還有那些預編譯開關的設計,那可真是邏輯性太強悍了,本人明白原理,可是從來沒有用過,實在是不知道該怎么用,對于那些把預編譯用的活靈活現(xiàn)的人,我是佩服的十體投地。那可真是對系統(tǒng)的結(jié)構(gòu)從需求提出的那一刻,就已經(jīng)知道有哪些內(nèi)容的大神級別的人搞的。 你是否有相同的感想呢,一起來21ic 思想與裸編程 版塊和大牛們一起探討吧~ 點擊 閱讀原文 查看大牛回復 特別推薦 中國電子網(wǎng) 微信號:weixin21ic |
|