ある言語から別の言語にコードライブラリを移植したり、別のコンパイラ、環境で動作するようにコードライブラリを書き直したりする人に対して、どのようなアドバイス(ヒント、テクニック、落とし穴など)がありますか?
すべてのプラットフォーム(言語およびシステムライブラリ)には、独自のペルソナがあります。 RubyプログラマーがAPIを設計する方法は、Rubyを作成する独自の機能と文化を利用しています。これは、Cの方法とは明らかに異なります。またはC++開発者はAPIを設計しますが、これはJavaまたはC#開発者が行う方法とは異なります。
元のプラットフォームからアイデアを取り、それらを新しいプラットフォームが何であるかを示す概念に組み入れたいと考えています。プラットフォームの他のライブラリとはまったく異なる方法で設計されたライブラリを使用するほど、自然に感じるものはありません。実際にうまく設計され、エレガントなプログラミングプラットフォームがいくつかあります。これらの強みをポートに活用したいと考えています。
「to」と「from」の両方の言語/フレームワークのネイティブ機能を把握します。
JavaScriptからカレンダーライブラリをiOSに移植しました。 iOSには強力なカレンダークラスがありますが、JavaScriptには私にとって役に立たないものがありました。 (私は宗教的な暦からグレゴリオ暦に、そしてその逆に変換していました。)
私はコード全体が冗長であることを理解するためだけに、Objective-Cでライブラリ全体を書き換えるのに時間をかけました。 (ちなみに、私は仕事がうまくいかず、不正確な結果が出ていました。そのとき、一歩下がって自分の間違いに気付きました。)
数十行の変換メソッドを6行程度のネイティブフレームワークコードに置き換えることができました。
これが重要なプロジェクト(多くの場合、移植が重要)の場合は、コードの各部分とシステム全体を移植する前に、完全なテスト計画(理想的にはターゲット言語での単体テスト)を記述します。
移植が最初の試行で100%正確になることは世界中であり得ないため、事前にすべてをキャッチしていることを確認する必要があります。
可能であれば、元のコードに対して同じ計画を実行してください。正確に記述された保証はなく、実際、同等の動作をすることは、正しくない実装に依存している可能性があります。
->コーディングされた方法ではなく、機能に焦点を当てます。
->一部の要素はすでに言語、プラットフォームなどで処理できるため、書く前に考えてください。
->新しいプラットフォームの利点を活用します。
「移植」-Wordを使用しているように見える-は、迷惑なレガシーコードを使用したTDDにすぎません。
テストケースを正しく取得します。レガシーコードがテストケースに合格することを確認します。
次に、レガシーコードを破棄します。
次に、テストケースに合格する新しいコードを新しい言語で記述します。
クラスダイアグラム/階層ツリーを作成して、最初に移植するものを把握します。基本的なデータ型をマップします(int-> Int32?)。データ構造についても同じことを行います。