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

时间:2013-07-03 16:22:28

标签: matlab code-standards

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

据我所知,除了document之外,MATLAB编程指南的主题并不多。该文件写得很好,反馈很好。标准版于2002年由Richard Johnson在matlab中心发布,但自那以后一直没有更新。是否有更强大的最新版本或类似文档? (我真的没有想到其他的东西)。

背景动机假设

  • 编码标准很重要
  • 虽然MATLAB自2002年以来没有太大变化,但其他语言及其方法也有。人们可以从这些做法中获益。
  • 事实上很多人都在使用MATLAB或Octave编写新代码。 虽然,人们会说这种语言几乎已经死了(等等)。我宁愿不去那里(让我们把它标记为一个offtopic)。

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

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

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

我猜这种工具尚未开发的原因实际上是缺乏广泛接受的编码标准。

我非常感谢您对标准或信息的批评关于更好的批评。

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

1 个答案:

答案 0 :(得分:3)

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

“同一作者(理查德约翰逊)”已发表book '元素的MATLAB风格'(另见wiki)2011:

cover

  

目录

     
      
  1. 一般原则
  2.   
  3. 格式
  4.   
  5. 命名
  6.   
  7. 文档
  8.   
  9. 编程
  10.   
  11. 文件和组织
  12.   
  13. 发展。
  14.   

Loren有一个review of the book的博客文章。我将在这里发表评论:

  • 7在优雅点处拆分长代码行 - 我觉得这个很有用,因为在任何编辑器中都要向远处向右移动,即使有可能也是如此。
  • 10不要使用硬标签 - 这有助于在可能具有不同编辑环境的组中工作时保持理智。

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

  • 69他们做什么的名称函数 - 由于函数执行操作,名称应包含有关操作的信息。

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

  • 97确保评论同意守则 - 我永远不会忘记我的论文顾问给我打电话的时间,因为他真的很恼火。我给他留下了一份Fortran程序的副本,该程序有大量的评论,最后一个是“忽略上面的所有评论;它们是以前的版本。”

  • 135避免使用隐秘代码 - 我发现,通常情况下,编写含糊不清的代码所获得的收益低于我预期的好东西,并且比它保证的更令人头痛。有时候,我在时间关键的时候使用了神秘的代码来提高性能。当我这样做时,我会尝试对其进行全面评论,包括我已经测试过的评论中的直接实现。这样,当性能权衡变化时,我理解代码应该做什么,并有两个启动代码更新的起始选项。

  • 150,151最大限度地减少全局变量的使用并最大限度地减少全局常量的使用 - 我自己会更强烈地说这一点。处理您想要共享的信息有各种优越的技术,无论它们是函数句柄,类及其属性,还是其他一些方法。这些技术使用起来要安全得多,原因很多 - 例如,任何需要的更容易控制的副作用,并且代码可能更适合并行性。

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

  • 176尽可能避免使用eval - 我确信对于一些MATLAB用户来说似乎不是这样,但是eval在大多数情况下是可以避免的。

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

  • 271-275第一个是写小测试 - 我喜欢理查德已经测试了这个风格指南的核心原则。如果没有强大的测试套件,我不会看到程序员如何运作良好。

结论

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