看着大家在这个问题(为什么不少程序员认为Matlab的语言设计不优雅甚至比较丑?能否举出一些例子来说明? - 数学)下面吐槽,背上凉飕飕的。因为组里的历史原因,换语言不现实。。。
我自己的体验是用matlab写小规模(1000行以内)的gui很快速,交互性不是特别强的gui可以直接用guide搞定。但是代码的复杂度随着代码长度的平方上升。
求问怎样改善用matlab写代码的程序风格,写出简明易维护的程序呢?
回复内容:
想到哪说哪,有点乱。用deal实现Python中的“一行赋多值”。
<span class="p">[</span><span class="n">H</span><span class="p">,</span> <span class="n">W</span><span class="p">,</span> <span class="n">N</span><span class="p">]</span> <span class="p">=</span> <span class="n">deal</span><span class="p">(</span><span class="mi">42</span><span class="p">);</span> <span class="c">% H = 42, W = 42, N = 42</span>
<span class="p">[</span><span class="n">H</span><span class="p">,</span> <span class="n">W</span><span class="p">,</span> <span class="n">N</span><span class="p">]</span> <span class="p">=</span> <span class="n">deal</span><span class="p">(</span><span class="mi">28</span><span class="p">,</span> <span class="mi">28</span><span class="p">,</span> <span class="mi">32</span><span class="p">);</span> <span class="c">% H = 28, W = 28, N = 32, respectively</span>
啊谢谢师兄@渡子厄邀请。并不是很会写MATLAB,我只是说一说看到的MATLAB代码的一些问题和建议。
第一是设计模式,
一些的MATLAB工程师并没有设计模式,一般都是把一个小过程式的demo扩充成为一个大程序,代码中有很多重复的代码,其实在基于命令行的demo完成之后就应该考虑要设计一个怎么样的程序,然后推倒重来,减少每一行没有必要的代码,利用每个可以利用的数据。
第二是数据结构的管理,
MATLAB提供了很方便的一些数据结构,如何善用他们是一个很大的问题,在这方面,应该说是尽量减少每一行自己手写的代码,在用每个功能前Google一下是否有内建支持,花十分钟看一下文档理解内建支持有何优劣之处,然后使用MATLAB语言设计者的思维来写MATLAB。
MATLAB使用者似乎很喜欢使用全局变量,这本身其实无可厚非,全局变量有时候会导致程序出一些问题,可以使用类似于命名空间的方法加以区分。
第三是代码的管理,
业余程序员有时候会有一个问题,就使用注释复制粘贴和压缩文件来管理代码,这样在稍微庞大的系统中代码就会变得不可读,而且工程人员自己也不知道自己在干什么,这方面我的建议是花一个下午时间学习一下git
第四是结构上的分离,
在设计GUI的时候可以尽量符合MVC,视图,控制,数据分离,尽量每个.m文件拥有各自的功能,每个函数逻辑分离。当然可以做的轻量级一些。个人不喜欢把文件放的太长。
第五是使用更高阶的编程范式,
MATLAB可以写的OO一些,不过MATLAB对于函数式编程的支持不是很好,因为写的不多就不多谈了。
以上是我读一些工程师,科学家的代码看到的一些问题,并不仅限于MATLAB,如有不当还请多指教。 唉我来慢慢更新自己的学习笔记吧。
1. 代码风格:
提完问题顺手谷歌了一下,下面这个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大法真的好!但就是不喜欢。
同问为何。

这两张图片是截取官网上提供的展示效果图:主题切换简单的主题切换,由于当前窗口上组件很少,所以感觉效果不明显,但是当组件布局很多时就会很好看。importttkbootstrapasttkfromttkbootstrap.constantsimport*root=ttk.Window()style=ttk.Style()theme_names=style.theme_names()#以列表的形式返回多个主题名theme_selection=ttk.Frame(root,padding=(10,10

1获取鼠标在全屏位置屏幕左上角为坐标原点,获取鼠标位置和获取鼠标像素颜色建议和while循环或者timer函数结合使用:importjava.awt.MouseInfo;mousepoint=MouseInfo.getPointerInfo().getLocation();mousepoint=[mousepoint.x,mousepoint.y]2获取当前剪切板内容importjava.awt.Toolkitimportjava.awt.datatransfer.DataFlavorclip=

如果说程序员有什么怕的,那我想可能就是 —— 需求又变了!这不,客户在笔者开发完一个基于浏览器的 Web 应用程序之后说:程序需要在内(无)部(网)环境中运行……这就意味着无法安装 Python 环境!谁叫咱是程序员呢,不就开发一个 GUI 版本吗,难不倒我……可是听到给的时间后,就不淡定了……为了不影响客户的评测,只能给出一周时间!构思GUI 虽然也不难,不过需要梳理一遍服务以及与用户的交互接口,弄不好就得为 GUI 单独编写接口,这点时间显然不够呀。不行,就再想想办法……不然直接将 Web

Curses首先出场的是 Curses[1]。CurseCurses 是一个能提供基于文本终端窗口功能的动态库,它可以: 使用整个屏幕 创建和管理一个窗口 使用 8 种不同的彩色 为程序提供鼠标支持 使用键盘上的功能键Curses 可以在任何遵循 ANSI/POSIX 标准的 Unix/Linux 系统上运行。Windows 上也可以运行,不过需要额外安装 windows-curses 库:pip install windows-curses 上面图片,就是一哥们用 Curses 写的 俄罗斯

scilab和matlab的区别:1、注释符号;2、预设变量的表示;3、操作符的用法;4、矩阵的定义与调用;5、程序的编辑与执行;6、数据类型;7、函数库;8、图形界面;9、社区支持与生态系统;10、跨平台兼容性;11、价格。详细介绍:1、注释符号,在Scilab中,注释是用“//”引导,而在Matlab中,注释是用“%”引导;2、预设变量的表示,在Scilab中等等。

图形用户界面(GUI)图形用户界面(GUI)只不过是一个桌面应用程序,可帮助我们与计算机进行交互像文本编辑器这样的GUI应用程序可以创建、读取、更新和删除不同类型的文件数独、国际象棋和纸牌等应用程序则是游戏版的GUI程序还有GoogleChrome、Firefox和MicrosoftEdge之类的GUI应用程序是用来浏览Internet的这些都是我们日常在电脑上使用的一些不同类型的GUI应用程序,其实我们通过Tkinter也是可以构建简单的类似应用程序的今天我们作为GUI的入门,将创建一个非常简

1、Frame的tkraise()方法介绍通常,一个Tkinter应用程序由多个Frame组成。而且您经常需要在Frame之间切换以显示与用户选择相关的Frame。Tkinter允许将Frame堆叠在一起。要显示特定Frame,只需按堆叠顺序将一个放在另一个之上。顶部Frame将可见。要将Frame置于顶部,可以使用Frame小部件的tkraise()方法,如下所示:frame.tkraise()2、tkraise用法示例下面将实现一个温度转换小应用,华氏温度和摄氏温度分别使用两个不同的Fram

在MATLAB中,您可以使用 "set" 函数来修改图形的坐标轴属性。详细介绍:1、修改坐标轴的范围:set(gca, 'XLim', [0 10], 'YLim', [0 10]);2、修改坐标轴的标签:set(gca, 'XLabel', 'My X-axis', 'YLabel', 'My Y-axis');3、修改坐标轴的刻度等等。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

WebStorm Mac version
Useful JavaScript development tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
