私の質問はインポートステートメントの使用についてです。
私が出会ったほとんどのプログラミング言語(Python、Scala、Goなど)では、その関数を使用する前に、まずライブラリをインポートする必要があります。
このインポート文を指定する必要があるのはなぜですか?
関数/メソッドを使用するだけで、環境が関連するライブラリ/関数を自動的に見つけて「インポート」できないのはなぜですか?
その主な理由は3つ考えられます。
関数またはクラスの名前があいまいになる可能性があります。何十もの画像処理ライブラリがあります。どちらからImage
クラスを使用しますか?
同時に使用したい複数の同じ名前のクラスがある場合areimport
in pythonおよび他の言語の同様のステートメント、 aliasクラス名を許可するので、各クラスを明確な名前で使用できます。これを行うにはステートメントが必要なので、インポートにはそれを使用します。
ライブラリがマシンに存在しない可能性があります。失敗したインポート文は、問題を解決するために何をする必要があるかを即座に通知します。実行時の障害はそれほど明白ではありません。
提案するものis JavaおよびC#などの一部の言語で可能):使用するクラスの完全修飾名を使用する場合、必要はありません明示的に何かをインポートすると、環境によって自動的に検出されます。
ただし、new System.Web.MailMessage()
のような完全修飾名を使用する必要があります。これは面倒です(特により深い名前空間の場合)。名前空間をインポートすることで、new MailMessage()
のような非修飾名を使用できます。
では、なぜすべての名前空間がデフォルトでインポートされないのでしょうか?名前の衝突のため。たとえば、両方のSystem.Net.MailMessage
とSystem.Web.MailMessage
。あいまいさを避けるために、インポートするネームスペースを明示的に指定する必要があります。
もちろん、ライブラリ開発者は同じ名前の再利用を避けることができます(一般的には避けることをお勧めします)。しかし、独立して開発された複数のサードパーティライブラリがある場合、これを普遍的に回避する方法はありません。したがって、これはネームスペースとインポートによって解決されます。
Scalaは知りませんが、Javaと同じように機能するのではないかと思います。
Pythonは、その動的な性質によりかなり異なります。 Python importステートメントは、実際にはライブラリファイルのトップレベルのコードを実行します。このコードは、ライブラリの関数とクラスを定義します。したがって、import
ステートメントがないと、型は単に存在しないので、言語がそれらを見つける方法はありません。