Ответ 1
Новый стиль с одним файлом имеет некоторые преимущества. Это позволяет и поощряет вас писать множество небольших методов, которые, я думаю, приводят к улучшению кода. Сложность создания нового файла, его сохранение и добавление его в исходный элемент управления (все мы используем источник управления, верно?) Незначительна, но добавлено несколько десятков небольших методов, что обычно отговаривает меня от факторинга класс в более мелкие части функциональности. И редактирование всего вашего класса удобно для просмотра, поиска и замены и не нужно открывать десятки отдельных вкладок редактора, которые затем могут использоваться для организации исходного кода для разных классов.
Для более крупных кодовых баз могут существовать преимущества производительности для однофайлового стиля. Системы контроля и развертывания источников, которые выполняют итерацию по исходному дереву, имеют стоимость каждого файла для таких вещей, как операции 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 OOP медленнее или я что-то не так?
Еще одна проблема заключается в том, что автоиндектор Matlab будет отступать каждый раздел и каждый метод в определении класса, поэтому базовый уровень всего вашего исполняемого кода составляет две вкладки, в результате чего теряется 8 столбцов экранной недвижимости.
В целом, если бы не соображения производительности OO, я бы, вероятно, пошел с одним файлом, и я пишу новые классы производительности, отличные от производительности.
UPDATE: он также выглядит как contentrpt(), полезный генератор документации, не работает с функциями, определенными внутри файла classdef; только те, которые находятся в отдельных файлах функций.