ラッパー関数とは、ソフトウェアライブラリまたはコンピュータプログラム内の関数(サブルーチンの別名)であり、その主な目的は、追加の計算をほとんどまたは全く行わずに、別のサブルーチン[ 1 ]またはシステムコールを呼び出すことです。ラッパー関数は、サブルーチンの実装の詳細を抽象化することで、コンピュータプログラムの記述を簡素化します。
目的
[編集]ラッパー関数は委任の手段であり、さまざまな目的に使用できます。
プログラミングの利便性
[編集]ラッパー関数はコンピュータプログラムの記述を簡素化します。例えば、Java AWTMouseAdapterライブラリの や類似のクラスがその例です。[ 2 ]
これらは、サードパーティのライブラリ関数を使用するアプリケーションの開発に役立ちます。サードパーティ関数ごとにラッパーを作成し、ネイティブアプリケーションで使用することができます。サードパーティ関数が変更または更新された場合、ネイティブアプリケーション内のサードパーティ関数のすべてのインスタンスを変更するのではなく、ネイティブアプリケーション内のラッパーのみを変更すれば済みます。
クラス/オブジェクトインターフェースの適応
[編集]ラッパー関数は、既存のクラスまたはオブジェクトを異なるインターフェースに 変更するために使用できます。これは、既存のライブラリコードを使用する場合に特に便利です。
コードテスト
[編集]ラッパー関数は、関数の各呼び出しに対して同じエラーチェックを繰り返すことでコードの長さを大幅に増やすことなく、既存のシステム関数のエラーチェックルーチンを作成するために使用できます。 [ 3 ]元の関数のすべての呼び出しをラッパーの呼び出しに置き換えることができるため、ラッパーを作成してしまえば、プログラマはエラーチェックを忘れることができます。 テストドライバはラッパー関数の一種で、コードモジュールを実行するものです。通常は、異なる設定やパラメータで繰り返し呼び出して、可能性のあるパスをすべて厳密に追跡します。これは配布可能なコードではありませんが、使い捨てのコードでもなく、通常は回帰テストで使用するために保持されます。 インタフェースアダプタはラッパー関数の一種で、コードモジュールへのインタフェースを簡素化、カスタマイズ、または拡張して、ユーザーにとってよりわかりやすく、関連性のあるものにすることを目的としています。パラメータの名前変更、パラメータの結合、パラメータのデフォルト設定などを行うことができます。
多重継承
[編集]基底クラスの多重継承をサポートしていないプログラミング言語では、ラッパー関数を使用して多重継承をシミュレートできます。以下は、LinkedListとHashSetから「継承」するJavaクラスの一部の例です。実装の詳細については、 メソッドを参照してください。
public class Test はLinkedListとHashSetを実装します{ @Override // データ メンバーとデータ メソッドが含まれています// 共変の戻り値}
ライブラリ関数とシステムコール
[編集]C標準ライブラリに含まれるものなど、 多くのライブラリ関数は、システムコールを抽象化するためのインターフェースとして機能します。glibcのfork関数とexecve関数はその一例です。これらの関数は、それぞれ低レベルのforkシステムコールとexecveシステムコールを 呼び出します。
これにより、「システムコール」や「syscall」という用語が、それらがラップする同様の名前のシステムコールではなく、高レベルのライブラリコールを指すために誤って使用される可能性があります。[ 4 ] [ 5 ]
ヘルパー関数
[編集]ヘルパー関数は、計算の一部をグループ化し、わかりやすい名前を付けて計算の再利用を可能にする関数です。 [ 6 ]すべてのラッパーがヘルパー関数というわけではありませんが、すべてのヘルパー関数はラッパーであり、頻繁に使用される操作をグループ化するヘルパー関数の注目すべき用途は、動的バイナリ変換です。動的バイナリ変換では、特定のアーキテクチャのヘルパー関数が、ある命令セットから別の命令セットへの命令の変換に使用されます。[ 7 ]
参照
[編集]- ラッパーライブラリ
- ドライバーラッパー
- アダプタパターン
- デコレータパターン
- 委任(プログラミング)
- 転送(オブジェクト指向プログラミング)
- 別の言語への言語バインディングラッパー
- SWIG自動ラッパージェネレータ
- ネストされた関数
- 部分適用
参考文献
[編集]- ^ Reselman, Bob; Peasley, Richard; Pruchniak, Wayne (1998). Visual Basic 6の使い方. Que. p. 446. ISBN 9780789716330。
- ^ Javaチュートリアル
- ^ Stevens, Richard; Fenner, Bill; Rudoff; Andrew M. (2003). UNIX ネットワークプログラミング. Addison-Wesley. pp. 5– 6, 29. ISBN 9780131411555。
- ^ "syscalls(2) - Linuxマニュアルページ" . man7.org . 2020年4月25日閲覧。
- ^ 「システムコール(GNU Cライブラリ)」www.gnu.org . 2020年4月25日閲覧。
- ^ Fisler, Kathi (2005). 「CS 1101: ヘルパー関数」ウースター工科大学. 2021年5月7日時点のオリジナルよりアーカイブ。 2021年11月17日閲覧。
- ^ Wang, Wenwen (2021年3月3日).動的バイナリ変換におけるヘルパー関数のインライン化. CC: Compiler Construction. ニューヨーク、アメリカ合衆国: Association for Computing Machinery . p. 107. doi : 10.1145/3446804.3446851 . ISBN 978-1-4503-8325-7。