新的单文件样式有一些优点。它允许并鼓励您编写很多小的方法,我认为这会导致更好的代码。创建一个新文件,保存它,并将其添加到源代码控制(我们都使用源代码控制,对吗?)的麻烦是很小的,但加起来几十个小的方法就足够了,它通常会阻止我从因子分解类更精细的功能。编辑整个课程便于浏览,搜索和替换,而不必打开十几个单独的编辑器选项卡,然后可以用于组织不同类的源代码。
对于较大的代码库,单文件样式可能具有性能优势。在源代码树上迭代的源代码控制和部署系统对于stat和diff操作都有一个每文件的成本。对于更大的代码库,比如数千种方法,尤其是在网络驱动器上,这可能是重要的。我怀疑使用Matlab编译器部署的应用程序也有一个性能效果。启动时间随着部署代码库的大小而增加。每个文件的一部分是文件操作的成本,因为文件(我认为)是单独加密的。我怀疑,但没有实验测试,使用单个文件类定义将降低编译Matlab应用程序的启动成本。
但是,我使用旧的多文件组织来代替我的大部分代码。部分原因是我们的代码库在新风格通常可用前几年才启动。但部分是为了表演。新的单一文件组织仅适用于新型MCOS Matlab类,并且由于更高的方法调度开销,它们比旧式的Matlab类更慢。例如。这是一个显示do-nothing nop()方法的执行时间的基准片段。
Calling each function/method 100000 times
nop() function: 0.02715 sec 0.27 usec per call
nop(obj) method: 0.24629 sec 2.46 usec per call
classdef nop(obj): 0.98572 sec 9.86 usec per call
classdef obj.nop(): 1.81307 sec 18.13 usec per call
另一个原因是,Matlab的自动压缩将在类定义中缩小每个部分和每个方法,因此所有可执行代码的基准是两个制表位,浪费了8列屏幕空间。
总的来说,不是因为OO性能考虑,我可能会用单个文件,我正在编写新的非性能关键类。
更新:它也看起来像一个有用的文档生成器contentrpt()不适用于在classdef文件中定义的函数;只有那些在单独的功能文件。