Новый стиль с одним файлом имеет некоторые преимущества. Это позволяет и поощряет вас писать множество небольших методов, которые, я думаю, приводят к улучшению кода. Сложность создания нового файла, его сохранение и добавление его в исходный элемент управления (we : все с использованием управления источником, правда?) Незначительно, но добавлено несколько десятков небольших методов, что обычно отговаривает меня от факторинг класса в более мелкие фрагменты функциональности. И редактирование всего вашего класса удобно для просмотра, поиска и замены и не нужно открывать десятки отдельных вкладок редактора, которые затем могут использоваться для организации исходного кода для разных классов.
Для более крупных кодовых баз могут существовать преимущества производительности для однофайлового стиля. Системы контроля и развертывания источников, которые выполняют итерацию по исходному дереву, имеют стоимость каждого файла для таких вещей, как операции 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
В кодовой базе, которая делает много вызовов методов, это может оказать значительное влияние на производительность. (Смотрите также Is MATLAB OOP slow or am I doing something wrong?)
одна гниды, что MatLab шоссейно-индентор будет отступ каждого раздела и каждый метод в определении класса, поэтому базовый уровень все исполняемой коды две Табулостопов в, теряя 8 столбцов экрана недвижимость.
В целом, если бы не соображения производительности OO, я бы, вероятно, пошел с одним файлом, и я пишу новые классы производительности, отличные от производительности.
UPDATE: Он также выглядит как полезный генератор документации, содержащийся в файле contentsrpt(), не работает с функциями, определенными внутри файла classdef; только те, которые находятся в отдельных файлах функций.
Надеемся, что для рефакторинга вы можете использовать 'sed' или' perl -pi -e', и если вы находитесь в Git, переименовывая foo с помощью панели в тысячу файлов, это просто: 'git ls-files | xargs perl -pi -e s/foo/bar/g'. Вы в Windows? Нет проблем, просто установите Cygwin или MinGW. Я предполагаю, что ваш последний аргумент недействителен. – nowox