El nuevo estilo de un solo archivo tiene algunas ventajas. Te permite y te anima a escribir muchos métodos pequeños, que creo que conducen a un código mejorado. La molestia de crear un nuevo archivo, guardarlo y agregarlo al control de código fuente (nosotros son usando control de fuente, ¿no?) Es menor, pero sumado más de un par de docenas de pequeños métodos es suficiente para desanimarme. factorizando una clase en bits de funcionalidad más fina. Y editar toda la clase es conveniente para navegar, buscar y reemplazar, y no tener que abrir una docena de pestañas de editor por separado, que luego se pueden utilizar para organizar el código fuente de diferentes clases.
Para bases de código más grandes, puede haber ventajas de rendimiento para el estilo de archivo único. Los sistemas de control e implementación de origen que iteran sobre el árbol fuente tienen un costo por archivo para cosas como estadísticas y operaciones de diferencias. Para una base de código más grande, por ejemplo, miles de métodos, eso puede ser significativo, especialmente en una unidad de red. Sospecho que también hay un efecto de rendimiento para las aplicaciones implementadas con el compilador de Matlab. El tiempo de inicio aumenta con el tamaño de la base de código implementada. Hay una parte por archivo de este costo, desde las operaciones de archivos, y porque los archivos (creo) están encriptados individualmente. Sospecho, pero no he probado experimentalmente, que el uso de definiciones de clase de archivo único reducirá el costo de inicio de las aplicaciones compiladas de Matlab.
Sin embargo, uso la antigua organización de varios archivos para la mayor parte de mi código. En parte porque nuestra base de código se inició hace unos años antes de que el nuevo estilo estuviera disponible comúnmente. Pero en parte por el rendimiento. La nueva organización de un solo archivo solo funciona con las nuevas clases MCOS Matlab de estilo, y son más lentas que las clases antiguas de Matlab debido a una mayor sobrecarga de despacho de métodos. P.ej. Aquí hay un fragmento de referencia que muestra el tiempo de ejecución de los métodos 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
En una base de código que realiza muchas llamadas a métodos, esto puede tener un impacto significativo en el rendimiento. (Ver también Is MATLAB OOP slow or am I doing something wrong?)
Otra nit es que la auto-penetrador de MATLAB sangría en cada sección y cada método en una definición de clase, por lo que la línea de base de todo el código ejecutable es de dos tabulaciones en, perdiendo 8 columnas de la pantalla bienes raíces.
En resumen, si no fuera por las consideraciones de rendimiento OO, probablemente iría con un solo archivo, y estoy escribiendo nuevas clases críticas no rendimiento de esa manera.
ACTUALIZACIÓN: También parece que contentsrpt(), un generador de documentación útil, no funciona con funciones definidas dentro del archivo classdef; solo aquellos en archivos de funciones separados.
Con suerte para la refactorización, puede usar 'sed' o' perl -pi -e' y si está en Git renombrar foo con barra en miles de archivos es tan fácil como esto: 'git ls-files | xargs perl -pi -e s/foo/bar/g'. Estás en Windows? No hay problema, solo instale Cygwin o MinGW. Supongo que tu último argumento no es válido. – nowox