2017年,你用Matlab寫了多少行代碼
前不久,看了知乎上的一個問題,蠻有意思的,是關於程序員的代碼量,有興趣的朋友可以看一下這篇帖子《程序員代碼量過20萬行,是一種什麼體驗?》
雖然寫代碼不屬於我的工作範疇,最多只是下班後的一種消遣,但是我還是挺好奇這一年來我到底寫了多少代碼。
接下來就來聊一聊,如何通過寫腳本來統計自己的代碼量。
1. Matlab腳本注釋的形式
首先,在計算代碼量的過程中,注釋行不應該算在代碼量中。那麼,就先來聊一聊Matlab中注釋的那些事。
相信接觸過Matlab腳本的朋友都知道,如果我想對一行命令或是一段命令進行注釋時,會寫一個%,然後在百分號後面寫下注釋,比如:
其中第一行並不屬於代碼行,而第二行屬於代碼行。因此在判斷是否為有效代碼行時的一個標註就是,每一行的第一個非空格字元是否為百分號。
在這裡說一個關於注釋的題外話,選取幾行代碼,按鍵ctrl + R,所選行就會變成注釋,然後按鍵ctrl + T,所選注釋就會減少一個百分號。
除了上述這種注釋的方法之外,還有另外兩種注釋的方式:
一種是使用兩個連續的百分號,正如下面這幅圖所展示的,滑鼠所在模塊顏色會加深,通過這種形式的注釋,代碼層次感更強,更有助於代碼的管理。
判斷這種注釋形式的邏輯與第一種相同,都是去判斷每一行的第一個非空字元是否為百分號
另一種方式是通過%{與%}將一整段代碼變成注釋。判斷這種注釋的邏輯是,判斷該行非空字元串是否為%{或%}。這其中可以參考的函數為strcmp函數。
2. Matlab腳本中的續行符
除了注釋行會影響代碼量之外,還有續行符也會影響。關於續行符,通過一個簡單的例子來說明:
顧名思義,通過續行符,能將一行代碼多次換行來寫,以避免單行代碼過長,不便閱讀的情況。判斷一行代碼是否有續行符的邏輯也非常簡單,去判斷每一行的末三位字元串是否為續行符,同樣可使用的函數為strcmp。
3. 讀取一個文件夾下所有.m文件
在理清了代碼量的影響因素之後,就可以著手開始寫腳本了。
在開發一個工具的過程中,有一些代碼會被大量的重複使用,因此,這部分代碼會單獨作為一個function函數文件,通過主腳本調用的形式進行使用。這就意味著對於一個工具,存在多個.m文件。
為了避免人為手動的去累加每個.m文件的代碼量,在這裡建議通過腳本的形式去讀取該工具所在文件夾下所有的.m文件。對此,可以考慮使用以下的函數:
dirOutput=dir(fullfile(filepath,*.m));nfileNames={dirOutput.name};n
其中filepath為工具所在文件夾的路徑,而dir(fullfile(filepath,*.m))表示獲取該路徑下所有拓展名為.m的文件,而fileNames={dirOutput.name}表示獲取每個.m文件的文件名。
然後通過一個for循環,例遍每一個.m文件,而在循環過程中,以讀取txt文件的形式去讀取每一個.m文件,並且以.m文件中的行數為導向,例遍每一行,結合之前兩點所介紹的,去判斷每一行是否為注釋行或者是否存在續行符,計算該.m文件最終的有效代碼量
以上就是統計代碼量的主要邏輯,接下來看一下,今年我所寫的幾個主要的小工具的代碼量
1. Simulink建模工具
代碼量:3008行
相關介紹:Matlab如何大規模修改Simulink模型
當初寫這個工具,純屬自己太懶,不想自己動手去改Simulink模型,結果這工具,一寫就是兩個月。這個工具目前仍然在開發中,正如先前所言,我正在開發Learn Mode。此後,我將會陸續開發模擬功能(Simulation),資料庫管理功能(Database),以及模擬數據分析功能(Analyse)。
說來實在是慚愧,本來說好的要儘快通過公眾號上線的,但是我懶。。。請有需求的朋友耐心等耐,我會加把勁的
2. 項目評估工具
代碼量:1790行
相關介紹:【一個被斃掉的作品】如何評估一隻股票的買點
最初寫完這個工具之後,真的挺興奮的,因為解決了幾個技術難題,包括Word報告的自動生成,雷達圖的分析。不過這個工具出來之後,反響並不盡如人意,為此那個禮拜,我尤其的沮喪。不過很感謝有這個機會來開發這個工具,這個工具是我在技術點上收穫最多的一個工具。
3. 曲線原始數據獲取工具
代碼量:491行
相關介紹:Matlab如何從曲線圖中提取原始數據
當初想寫這個工具,是因為在網上找了一張鋰離子電池的電壓電量的曲線圖,想扒原始數據下來做模擬,於是就有了這個工具。其中可再開發的點還是有挺多的,比如發動機、電機的一些特性圖。
除此以外,包括動圖製作工具,dcm文件讀取標定量,Simulink模型加密工具,網路爬蟲等,2017年用MATLAB一共寫了9672行代碼,老實說,離專業的程序員還差好幾萬行代碼量的距離。
以上
祝大家周末愉快!
如果你有興趣,歡迎關注我的微信公眾號"打浦橋程序員",謝謝!
推薦閱讀:
※Cleve Moler 的複數步長數值微分方法
※MATLAB代碼提速技巧之In-place Optimizations
※如何自學Matlab
※Matlab如何製作滑鼠精靈
※即將出版!《數學建模與數學實驗》書稿目錄
TAG:MATLAB |