上一篇文章中程序員的幸福生活——有你的日子,每天都是情人節,收到了大家的很多好評、鼓勵和祝福,非常感動,真誠的謝謝大家。也希望每個朋友都能保持一個積極向上的心態,去迎接豐富多彩的人生。
在開發過程中,我們經常會遇到大量重復或者類似的代碼需要編寫,當然我們可以通過各種模式來避免這種情況出現,但肯定有些時候我們是無法避免的,那么遇到這種情況,我們該如何快速完成這些重復或類似的代碼的編寫呢。下面來說一下我的方法,當然,如果大家有更好的方法,希望能分享出來。
大量重復代碼——switch/case枚舉的遍歷
說到大量重復類似代碼,就不得不說switch/case,如果一個枚舉里面有幾十項,在switch的時候,每一項都要寫一個case,如下所示:
enum GoldenTagFieldIndex { Tag, Id, Type, Table, Desc, Unit, Archive, Digits, Shutdown, Lowlimit, Highlimit, Step, Typical, };
編寫switch/case后,達到的效果:
GoldenTagFieldIndex index = GoldenTagFieldIndex.Tag; switch (index) { case GoldenTagFieldIndex.Tag: case GoldenTagFieldIndex.Id: case GoldenTagFieldIndex.Type: case GoldenTagFieldIndex.Table: case GoldenTagFieldIndex.Desc: case GoldenTagFieldIndex.Unit: case GoldenTagFieldIndex.Archive: case GoldenTagFieldIndex.Digits: case GoldenTagFieldIndex.Shutdown: case GoldenTagFieldIndex.Lowlimit: case GoldenTagFieldIndex.Highlimit: case GoldenTagFieldIndex.Step: case GoldenTagFieldIndex.Typical: default: break; }
這樣的代碼,如果純手寫,既枯燥,又浪費時間,但是代碼必須要寫,如何快速的生成這些switch/case代碼才是關鍵,我總結了我在編寫代碼過程中使過的五種方法:
- VS直接生成——只適用於2010版本以上的VS,而且必須是DotNet開發
- ReSharper一鍵生成——只適用於DotNet開發
- 通過快捷鍵進行操作
- 使用代碼生成器
- 使用Excel完成代碼生成
VS自動生成
當進行DotNet開發的時候,這種switch/case可以很容易的使用2010以上版本的VS自動生成,當然也只能是DotNet,如果是C++,那么不好意思了,不支持。
在VS中可以通過一個switch的snippet來自動生成枚舉的項的case語句。具體操作步驟:先寫switch,然后按Tab鍵,然后寫入枚舉變量名,然后按Enter鍵,這樣其余所有代碼就可由VS自動完成了。是不是很方便呢,下面直接看圖:
DotNet神器——ReSharper一鍵生成
說到ReSharper,就不得不說,DotNet開發人員實在是太幸福了,各種標准庫,各種幫助類,就連輔助工具也堪稱神器,讓我等在工作中使用C++的碼農羡慕嫉妒恨啊。
直接上圖,看了圖,你就知道什么是神器了:
貌似裝了ReSharper后,VS的自動完成功能就不好用了,不知道只有我這樣,還是普遍現象。不過既然用了ReSharper,而且也這么好用,那么就不去計較VS的自動完成了。
ReSharper還有很多強大的功能,等待你的發現。
通過快捷鍵進行操作
VS自動完成、ReSharper一鍵生成固然十分方便,以至於其他方法都弱爆了,但是這是有前提的,只有DotNet開發才有這么感人的功能。而C++呢,我們只能求助於下面的方法了。
對於程序員來說,想要高效的完成代碼的編寫,就需要熟練掌握各種快捷鍵,有了這些方便強大的快捷鍵,那么完成這些重復的switch/case,只是分分鍾的事。
下面是操作過程中用到的快捷鍵:
- Alt:選擇代碼中某幾列
- Ctrl + C :復制
- Ctrl + V :粘貼
- Ctrl + H :替換
- Tab :添加制表符
- Shift + Tab :取消制表符
如果想了解更多VS快捷鍵的介紹,請參考小坦克的這兩篇文章:Visual Studio 常用快捷鍵 和 Visual Studio 常用快捷鍵 (二)。
使用代碼生成器
做Web開發的朋友應該對代碼生成器不是很陌生,至少我當初寫三層時,就經常使用代碼生成器來生成操作數據庫的代碼,代碼的編寫效率那叫一個快。雖然現在轉戰C++了,但是代碼生成器還是能夠派上用場的。
我所接觸過的代碼生成器主要有三種:
- CodeSmith:CodeSmith是我接觸的最早的一個代碼生成器,個人感覺功能十分強大。自從有了他,就基本上不再用其他的工具。詳細的使用資料可以參考官方的幫助文檔,或者參考Terrylee的這篇文章 CodeSmith開發系列資料總結。
- T4:T4是微軟的代碼生成引擎,由於本人沒有使用過,所以功能上就不做評論了。
- 動軟代碼生成器:動軟代碼生成器是國產的一款軟件,本人也只是在操作SQL的時候用過,對於數據庫的支持功能比較強大。
由於T4、動軟代碼生成器用的不多,所以只介紹一下使用CodeSmith生成switch/case代碼的方法。
CodeSmith語法什么的,這里就不介紹了,直接上模板:
<%@ Template Language="C#" TargetLanguage="C#" %> <%@ Assembly Name="CodeSmith.CustomProperties" %> <%@ Property Name="List" Type="CodeSmith.CustomProperties.StringCollection" Category="Custom" Description="This is the list." %> <% for (int i = 0; i < List.Count; i++) { %> case <%= List[i].Trim().Trim(',') %>: <% } %>
有了此模板就可以很方便的生成代碼了:
使用Excel完成代碼生成
相比於以上兩種方法,使用Excel可能會麻煩一些,但是這里只是提供一種思路和方法,在真正遇到問題的時候,要具體問題具體對待。其實Excel功能是很強大的,能熟練的使用Excel,在很多情況下,是可以提高工作效率、編碼效率等很多效率的。廢話不多說,下面就演示一下如何使用Excel來完成代碼的生成:
總結——善於使用工具可以提高效率
當我們遇到switch/case等大量重復或相似代碼的時候,最好不要純手敲,或者通過復制粘貼后再修改,這樣不僅效率低,而且對自身也沒有提高,可以說是費力不討好。
而如果能夠熟練的使用一些輔助工具,那么就可以事半功倍,大大的提高工作效率,何樂而不為呢。
假設你是一個武林高手,如果再能得到一個神兵利器,那么是不是可以天下無敵了呢。
你的編程水平很高,能夠使用各種模式來避免重復代碼,如果再能熟練的使用VS(快捷鍵)、代碼生成器等工具,那么恭喜你,終於可以從大量重復的體力勞動工作中解脫了,終於,整個世界清靜了。
以上幾種只是我比較常用的方法,消滅重復代碼編寫的方法還有很多。如果你有比較好的方法,那么希望你能分享出來,本人必將不勝感激。