现代MATLAB编码风格:缺少什么?

12

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

据我所知,关于MATLAB编程指南的内容并不多,除了这篇文档。该文档写得很好,反馈也不错。2002年由Richard Johnson在MATLAB中心发布了此标准,但自那以后就没有更新过。是否有更 更新 或类似的文档?(我真的找不到其他东西)。

背景动机假设

  • 编码规范很重要
  • 尽管MATLAB自2002年以来没有太大变化,但其他语言及其方法不同。人们可以从这些实践中受益。
  • 事实是许多人正在使用MATLAB或Octave编写新代码。尽管有人会认为该语言几乎已死(啰嗦话)。我不想去那里(我们将其标记为离题)。

为什么编码风格对我不够好

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

  • 试图过于 匈牙利式(它很神秘,我大多数情况下都讨厌这个)
  • 有太多的快捷方式(与前一个点更或多或少相似)
  • 未得到Mathworks的支持(但实际上这可能是一件好事,因为在我看来,MATLAB中所有好的东西都来自用户社区)
  • 没有自动化的质量控制工具来尊重这种编码风格(这里我的意思不是像* lint系列中的mlint那样的东西,而更像Python中的pep8.py)

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

我非常感谢您对标准或更好标准的信息的任何批评。 您是否有使用过此标准的经验?它的哪些部分对您没有起作用? 如果您从未使用正式编码标准,但确实具有不适合其中的有价值的做法-请提供一个例子。

2
这里有一个:https://dev59.com/zW445IYBdhLWcg3wGWZ7#5042797。还有一些有用的东西在这里:https://dev59.com/UnE95IYBdhLWcg3wadGq。 - Amro
@Amro:这实际上非常好。如果《MATLAB 风格元素》那么好,我可能已经找到答案了! - Yauhen Yakimovich
1
这是同一位作者(Richard Johnson)编写的。我还发现了这个维基:https://sites.google.com/site/matlabstyleguidelines/ - Amro
Loren Shure的MathWorks博客上发布了一篇文章,推荐阅读《Best Practices for Scientific Computing》(科学计算的最佳实践)。该文章链接为http://dx.doi.org/10.1371/journal.pbio.1001745。 - horchler
我启动了一个MEP8工具,这样我们就可以拥有自己的PEP8。看看这是否有帮助,如果你看到潜力,请加入我们的力量。 - Yuval Harpaz
显示剩余5条评论
1个回答

4
到目前为止最好的答案之一是引用Amro的评论:
“相同的作者(Richard Johnson)”出版了一本书籍“MATLAB风格的要素”(也请参阅维基百科)2011年:

cover

目录

  1. 基本原则
  2. 格式
  3. 命名
  4. 文档
  5. 编程
  6. 文件和组织
  7. 开发

Loren在博客文章中回顾了这本书。我将在这里跟随她的评论:

  • 7 在合适的位置拆分长代码行 - 我认为这个很有用,因为在任何编辑器中都需要向右滚动很远,即使可能是可行的。
  • 10 不要使用硬制表符 - 这有助于在可能具有不同编辑环境的组中工作时保持清晰。

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

  • 69 根据其功能命名函数 - 由于函数执行一个操作,因此名称应包含有关该操作的信息。

  • 86 在数据文件名中使用可排序编号 - 如果您有许多类似的数据文件,则有一个合理的编号方案只能帮助您。

  • 97 确保注释与代码一致 - 我永远不会忘记我的导师给我打电话的那个时刻,他非常恼火。我留给他的Fortran程序有很多注释,最后一个注释是“忽略上面的所有注释;它们是之前版本的。”

  • 135 避免使用难懂的代码 - 我发现通常来说,编写难懂的代码所带来的好处比我预期的要少,而带来的头疼则更多。偶尔,我会在某些时间关键的东西中使用难懂的代码来提高性能。当我这样做时,我尽量详细地注释它,包括在注释中测试过的直观实现。这样,当性能权衡发生变化时,我就知道代码应该做什么,并有两个起点选项来更新代码。

  • 150、151 最小化全局变量的使用和最小化全局常量的使用 - 我自己会更加强烈地说这一点。有更好的处理您想要共享的信息的技术,无论是函数句柄、类及其属性还是其他方法。这些技术在许多方面都更安全易控制,如需要,则更适合并行处理。

  • 172 使用括号 - 意义的清晰度至关重要,尤其是如果其他人需要理解、修改或翻译代码。

  • 176 尽可能避免使用eval - 我相信对一些MATLAB用户来说,它似乎并非如此,但大多数情况下可以避免使用eval。

  • 185-188 其中第一个是避免复杂的条件表达式 - 这些条目包含一些有关处理条件结构、排序情况等的有用思想。

  • 271-275 其中第一个是编写小型测试 - 我喜欢Richard将测试作为这个风格指南的核心原则之一。我认为没有一个强大的测试套件,程序员很难正常运作。

结论

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


如约而至的+1。恐怕我所知道的MATLAB中没有类似PEP8的工具来强制执行代码风格。IDE Code Analyzer(以前是mlint)是我能想到的最接近的东西,但那并不完全相同...您可以始终启动一个新项目并实现这样的工具 :) - Amro
1
这里有可能会感兴趣的内容:http://undocumentedmatlab.com/blog/parsing-mlint-code-analyzer-output/ - Amro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接