11章インタフェースの定義
前章ではユーザ定義型の作り方を学んだが、作っただけで道のりはまだ半ばだ。他の開発者はあなたのデータ型を実際に使わなければならない。彼らはそのためにデータ型のAPIを使う。APIとは、他の開発者がコードを使うために実際に操作するデータ型と関連する関数(外部にある関数を含む)を集めたものである。
利用者の前にあなたが定義したデータ型を差し出すと、そのデータ型は想像もつかなかったような方法で利用、誤用、悪用される。そして、彼らがあなたのデータ型に依存するコードを書き出すと彼らの行動を変えるのは難しくなる。すると、私がコードインタフェースのパラドックスと呼ぶものが起きる。
インタフェースを正す機会は1度しかないのに、実際に使われるまでインタフェースが正しいかどうかはわからない。
開発者たちはあなたが作ったデータ型を使い始めた途端、データ型の振る舞いに依存する。後方互換性のない変更を加えるとすべての呼び出し元のコードが動作しなくなる可能性がある。インタフェースの変更が抱えるリスクはそれに依存する外部コードの数に比例する。
定義したデータ型に依存するコードがすべてあなたの管理下にある場合はこのパラドックスは起きない。インタフェースを変更できる。しかし、そのデータ型が本番稼働に移ると同時に人々はそれを使い始め、データ型は変更しづらくなる。ロバストネスと保守性が重要な意味を持つ大規模なコードベースでは、全面的な変更を加えるために必要な承認の手続きにコストがかかる。また、オープンソースライブラリやプラットフォームSDKなど社内で管理できないものに含まれるデータ型に対しては変更がほぼ不可能だ。そのため、扱いにくいコードが簡単に生まれ、開発者の作業を遅らせることになる。
Get ロバストPython ―クリーンで保守しやすいコードを書く now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.