新しい単一ファイル スタイルには、いくつかの利点があります。これにより、多くの小さなメソッドを作成することが可能になり、奨励されます。これにより、コードの因数分解が改善されると思います。新しいファイルを作成し、それを保存し、ソース管理に追加する (私たちは皆、ソース管理を使用していますよね?) 手間はかかりませんが、数十個の小さなメソッドを追加するだけで十分であり、通常は因数分解を思いとどまらせます。よりきめ細かい機能に分類します。また、クラス全体を編集することは、ブラウズ、検索、置換に便利であり、さまざまなクラスのソース コードを整理するために使用できる多数の個別のエディター タブを開く必要がありません。
大規模なコードベースの場合、単一ファイル スタイルの方がパフォーマンス上の利点がある場合があります。ソース ツリーを反復処理するソース管理および展開システムには、stat 操作や diff 操作などのファイルごとのコストがかかります。大規模なコードベース、たとえば数千のメソッドの場合、特にネットワーク ドライブ上では重要です。Matlab コンパイラで展開されたアプリのパフォーマンスにも影響があると思います。デプロイされたコードベースのサイズに応じて、起動時間が長くなります。このコストには、ファイル操作からのファイルごとの部分があり、ファイル (私が思うに) は個別に暗号化されているためです。実験的にはテストしていませんが、単一のファイル クラス定義を使用すると、コンパイル済みの Matlab アプリの起動コストが削減されるのではないかと思います。
ただし、ほとんどのコードで古いマルチファイル編成を使用しています。新しいスタイルが一般的に利用可能になる数年前にコードベースが開始されたことが一因です。しかし、部分的にはパフォーマンスのためです。新しい単一ファイル構成は、新しいスタイルの MCOS Matlab クラスでのみ機能し、メソッド ディスパッチのオーバーヘッドが高いため、古いスタイルの Matlab クラスよりも遅くなります。たとえば、何もしない nop() メソッドの実行時間を示すベンチマーク スニペットを次に示します。
各関数/メソッドを 100000 回呼び出す
nop() 関数: 呼び出しごとに 0.02715 秒 0.27 秒
nop(obj) メソッド: 呼び出しごとに 0.24629 秒 2.46 usec
classdef nop(obj): 呼び出しごとに 0.98572 秒 9.86 usec
classdef obj.nop(): 呼び出しごとに 1.81307 秒 18.13 usec
多くのメソッド呼び出しを行うコードベースでは、これはパフォーマンスに大きな影響を与える可能性があります。(「MATLAB OOP が遅いか、何か間違っているか? 」も参照してください。 )
もう 1 つの問題は、Matlab の自動インデンターがクラス定義のすべてのセクションとすべてのメソッドをインデントするため、すべての実行可能コードのベースラインは 2 つのタブ ストップであり、8 列の画面領域を浪費します。
結局のところ、オブジェクト指向のパフォーマンスを考慮する必要がなければ、おそらく単一のファイルを使用することになり、パフォーマンス クリティカルではない新しいクラスをそのように作成しています。
更新: また、便利なドキュメント ジェネレーターである contentsrpt() は、classdef ファイル内で定義された関数では機能しないようです。個別の関数ファイルにあるもののみ。