怎樣用 Matlab 寫出優雅的代碼?

來源:互聯網
上載者:User
看著大家在這個問題(為什麼不少程式員認為Matlab的語言設計不優雅甚至比較醜?能否舉出一些例子來說明? - 數學)下面吐槽,背上涼颼颼的。因為組裡的曆史原因,換語言不現實。。。
我自己的體驗是用matlab寫小規模(1000行以內)的gui很快速,互動性不是特彆強的gui可以直接用guide搞定。但是代碼的複雜度隨著代碼長度的平方上升。
求問怎樣改善用matlab寫代碼的程式風格,寫出簡明易維護的程式呢?

回複內容:

想到哪說哪,有點亂。

用deal實現Python中的“一行賦多值”。
[H, W, N] = deal(42);         % H = 42, W = 42, N = 42[H, W, N] = deal(28, 28, 32); % H = 28, W = 28, N = 32, respectively
啊謝謝師兄@渡子厄邀請。
並不是很會寫MATLAB,我只是說一說看到的MATLAB代碼的一些問題和建議。

第一是設計模式,
一些的MATLAB工程師並沒有設計模式,一般都是把一個小過程式的demo擴充成為一個大程式,代碼中有很多重複的代碼,其實在基於命令列的demo完成之後就應該考慮要設計一個怎麼樣的程式,然後推倒重來,減少每一行沒有必要的代碼,利用每個可以利用的資料。

第二是資料結構的管理,
MATLAB提供了很方便的一些資料結構,如何善用他們是一個很大的問題,在這方面,應該說是盡量減少每一行自己手寫的代碼,在用每個功能前Google一下是否有內建支援,花十分鐘看一下文檔理解內建支援有何優劣之處,然後使用MATLAB語言設計者的思維來寫MATLAB。
MATLAB使用者似乎很喜歡使用全域變數,這本身其實無可厚非,全域變數有時候會導致程式出一些問題,可以使用類似於命名空間的方法加以區分。

第三是代碼的管理,
業餘程式員有時候會有一個問題,就使用注釋複製粘貼和壓縮檔來管理代碼,這樣在稍微龐大的系統中代碼就會變得不可讀,而且工程人員自己也不知道自己在幹什麼,這方面我的建議是花一個下午時間學習一下git

第四是結構上的分離,
在設計GUI的時候可以盡量符合MVC,視圖,控制,資料分離,盡量每個.m檔案擁有各自的功能,每個函數邏輯分離。當然可以做的輕量級一些。個人不喜歡把檔案放的太長。

第五是使用更高階的編程範式,
MATLAB可以寫的OO一些,不過MATLAB對於函數式編程的支援不是很好,因為寫的不多就不多談了。

以上是我讀一些工程師,科學家的代碼看到的一些問題,並不僅限於MATLAB,如有不當還請多指教。唉我來慢慢更新自己的學習筆記吧。

1. 代碼風格:
提完問題順手Google了一下,下面這個guideline可以參考:
MATLAB Style Guidelines 2.0

2. 怎樣優雅地寫gui
Stackoverflow中解決gui代碼糟糕的問題:matlab - What's the "right" way to organize GUI code?
官方文檔:Writing Apps in MATLAB
範例:File Exchange 裡一個使用OO寫gui的範例,看起來很棒。

3. 使用APP功能“封裝”程式

4. Google
沒必要自己重新造輪子,大部分問題都是有人遇到過並且解決過的。因此遇到幾分鐘以內解決不了的問題,可以Google一下解決方案。畢竟大部分matlab使用者都不是程式開發專家,大多數時候Get things done才是好的工作態度。
這裡還有另外一個問題:
基礎不好,遇到問題連搜什麼關鍵詞都不知道。
我的笨辦法是問師兄師弟、去stackoverflow和Mathwork網站上提問,或者乾脆把書快速掃一遍,只注意概念和定義,忽略技術細節。

5.用正版
如果有條件用正版的話,就用正版吧,遇到問題可以直接呼叫Mathwork支援人員,也可以節省很多時間。

唉看起來matlab好像也不是那麼無藥可救呢我是做工程應用的,我覺得一個好的演算法只有得到應用才是好的演算法,所以我個人不推崇使用natlab的GUI,matlab做演算法分析簡潔高效,邏輯夠複雜,人機互動沒有必要做matlab的GUI。

其實上面的回答都是關於OO以上的風格,因為設計思想的原因。設計模式的思想是可以用,前提是你本來就用得比較熟,在matlab中邊學邊用還是算了吧。

我覺得能夠直接按原文轉化為C++的matlab程式才是好程式,這才是一個演算法脫離理論,投入應用的終極歸宿。

話說回來,當可以沒有障礙地用C++做演算法的時候,你就輕易不想再回來用matlab了,除非是一些中間過程要繁瑣顯示的才拿matlab分析一下。

話說回來,我個人覺得windows和matlab對中國大學生的傷害之大其實難以估量,我們一開始就用上了最為高大上的成熟工具,卻忽視了他們的底層實現和設計思想,知道和實現過是兩種層次,在需要創造性的時候經驗和手段就能顯現作用,不能搶了先機、失了後手,如果有讀大學的孩子的話,建議用用那些開源的作業系統和數值演算法,不要貪圖方便,在最需要思考和實踐的年齡自廢武功,把思考和實踐的樓閣建在了空中。MATLAB大法真的好!但就是不喜歡。
同問為何。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.