【问题标题】:Modern MATLAB codestyle: what is missing? [closed]现代 MATLAB 代码风格:缺少什么? [关闭]
【发布时间】:2013-07-01 10:52:32
【问题描述】:

我寻求采用 MATLAB 的编码标准,但我不确定我是否选择了正确的标准。

据我所知,除了 document 之外,没有太多关于 MATLAB 编程指南的主题。文档写得很好,反馈也很好。标准由 Richard Johnson 于 2002 年(在 matlab 中心)发布,但此后一直没有更新。是否有它的最新版本或类似文档? (我真的没能用谷歌搜索其他东西)。

背景动机假设

  • 编码标准很重要
  • 尽管自 2002 年以来 MATLAB 没有太大变化,但其他语言及其方法却发生了变化。人们真的可以从这些做法中受益。
  • 事实上,很多人都在使用 MATLAB 或 Octave 编写新代码。 虽然,有人会争辩说这种语言实际上已经死了(废话)。我宁愿不去那里(让我们将其标记为离题)。

为什么代码样式对我来说不够好

我想在这里总结一些事情。如果您花时间阅读该文档,您可能会发现它

  • 尽量太hungarian(它很神秘,在大多数情况下我真的很讨厌这个)
  • 它的快捷方式太多(与上一点不太相似)
  • Mathworks 不支持它(但它实际上可能是一件好事,因为 MATLAB 中的所有好东西都来自用户社区 IMO)
  • 没有符合这种编码风格的自动质量控制工具(这里我的意思不是像 *lint 系列中的 mlint,而更像是 python 的 pep8.py)

我想没有开发出这样一个工具的原因实际上是缺乏一个被广泛接受的编码标准。

非常感谢您对标准或信息的任何批评,以了解更好的标准。

您有使用此标准的经验吗?它的哪些部分不适合你?如果您从未使用过正式的编码标准,但确实有不适合它的有价值的做法 - 请提供一个示例。

【问题讨论】:

标签: matlab code-standards


【解决方案1】:

到目前为止,最好的答案之一是引用 Amro 的评论:

“同一作者(Richard Johnson)”发表了一篇book'The Elements of MATLAB Style'(另见wiki)2011:

目录

  1. 一般原则
  2. 格式化
  3. 命名
  4. 文档
  5. 编程
  6. 文件和组织
  7. 发展。

Loren 的博客条目是 review of the book。我将只关注这里的 cmets 行:

  • 7 在优雅的点分割长代码行 - 我发现这个很有用,因为在任何编辑器中都必须向右拖得很远,尽管这是可能的。
  • 10 不要使用硬标签 - 这有助于在编辑环境可能不同的团队中工作时保持理智。

  • 43 为具有大范围的变量使用有意义的名称 - 如果需要,这会使代码更易于阅读、理解和调试。

  • 69 为它们的作用命名函数 - 由于函数执行一项操作,因此名称应包含有关该操作的信息。

  • 86 在数据文件名中使用可排序编号 - 如果您有许多相似的数据文件,采用有理编号方案只能帮助您解决问题。

  • 97 确保评论与准则一致 - 我永远不会忘记我的论文导师因为非常恼火而打电话给我的时间。我给他留了一份包含大量 cmets 的 Fortran 程序的副本,最后一个是“忽略上面的所有 cmets;它们是针对以前的版本的。”

  • 135 避免使用隐秘代码 - 我发现,一般而言,编写隐秘代码所购买的好东西比我预期的要少,而且比它所保证的更令人头疼。有时,我会在一些时间紧迫的事情上使用神秘代码来实现性能。当我这样做时,我会尝试对其进行全面评论,包括我测试过的 cmets 中的直接实现。这样,当性能权衡发生变化时,我了解代码应该做什么,并且有两个开始选项来进行代码更新。

  • 150, 151 最小化全局变量的使用和最小化全局常量的使用——我自己会更强烈地这么说。处理您想要共享的信息有很多高级技术,无论它们是函数句柄、类及其属性,还是其他一些方法。由于许多原因,这些技术使用起来更安全 - 例如,如果需要任何副作用,更容易控制副作用,并且代码可能更适合并行性。

  • 172 使用括号 - 明确含义至关重要,尤其是在其他人需要理解、修改或翻译代码时。

  • 176 尽可能避免使用 eval - 我确信在某些 MATLAB 用户看来并非如此,但 eval 在大多数情况下是可以避免的。

  • 185-188 第一个是避免复杂的条件表达式 - 这些条目包含一些关于处理条件构造、案例排序等的有用想法。

  • 271-275 其中第一个是编写小型测试 - 我喜欢 Richard 将测试作为本风格指南的中心原则。如果没有强大的测试套件,我看不出程序员如何运作良好。

结论

与 2002 年的原始文档相比,这本书似乎过于笼统。我将继续阅读它并提供更多见解,但它似乎并不完全符合我对编码标准所需严格性的理解。它融合了许多对初学者有用的通用想法,但对编程并不严格,以便他们可以自动测试代码(再次PEP8)。

【讨论】:

  • 按照承诺+1。恐怕我知道没有 PEP8 类似的 MATLAB 工具来强制执行代码样式。 IDE 代码分析器(以前称为 mlint)是我能想到的最接近的东西,但那不是完全相同的东西......你总是可以开始一个新项目并实现这样的工具 :)跨度>
  • 这里有一些可能感兴趣的东西:undocumentedmatlab.com/blog/parsing-mlint-code-analyzer-output
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多