50167


ディレクティブ `using`、`#include`、
`#import`、および`import`はすべて、異なるプログラミング言語に対して基本的には同じことを意味しますか？


CC BY-SA 4.0
2018-11-09T19:21:34.797
50142
2020-03-07T09:01:22.673
2020-03-07T09:01:22.673
4236
30795
question
python c# c++
言語におけるディレクティブの違い


すべて同じではないです。  
だから、同じだと思い込んで使うとエラーとなる場合があります。

エラーが起きる場合と、エラーが起きない場合は、本質的に異なりますから、『本質的に同じではない』というのが回答になろうかと思われます。


CC BY-SA 4.0
2018-11-10T05:00:59.557
50155
2018-11-10T05:00:59.557
217
50142
answer


C++に関しては#includeディレクティブは、そのincludeするヘッダファイルの内容(テキスト)に置き換えられるものだと理解しています。コンパイル前に実行するプリプロセッサであり、テキストを置き換えるという意味ではマクロでもあります。

C#のusingディレクティブは、C#の名前空間解決に関するエイリアス、あるいは名前空間を省略することを宣言するために存在しています。.netがどのようにそれを実現しているかは知らないですが、C++的な解決方法ではないと思います。C#においてはusingディレクティブが無くても様々なライブラリを呼び出すことができます。モジュール利用のために必須ではないです。

pythonのimportはエイリアスや省略の宣言のほかに、必要な関数やクラスなどのコンポーネントを選択して呼び出す機能があります。pythonではimport宣言しなければ、モジュールを使用することができません。またpythonではimportは文であってディレクティブとは呼ばないです。

いずれも分割されたモジュールを利用したり簡単に取り扱うための宣言であるということに変わりはないのですがその実現方法や提供している機能には違いが見られます。


CC BY-SA 4.0
2018-11-10T09:31:34.313
50167
2018-11-10T09:31:34.313
25980
50142
answer


質問にある`using`、`#include`、`#import`、`import`は、プログラムを複数のファイルに分割した時に、それを連携させて動作させる役割を果たしているという意味では同じだと思われます。

少し前まで「モジュール」という概念がなかったのがJavaScrptです。JavaScrptはブラウザで使われる特殊な言語だったため、HTMLにタグを書いて、順番に読み込んで実行時していました。

[code]

    <script src="foo.js"></script>
    <script src="bar.js"></script>
    
[/code]

2つのファイルの間の連携はグローバル変数によってなされました。かってのJavaScrptの有名なライブラリといえばjQueryですが、jQueryを使ったことがあればすぐにわかるのですが、jQueryのライブラリではjQueryオブジェクトをグローバル変数`$`に定義しているので、他のスクリプトでは広域変数`$`を使って操作するようになります。

しかし、少し規模が大きくなるとモジュールの仕組みは必須で、最近では、Webpack,
Browserify等のバンドルツールを使って開発することがほとんどになっています。また、ECMAScript2015ではimport/exportが導入され、ブラウザーでもモジュールが使えるようになってきています。

JavaScriptのことを少し詳しく書いたのは、JavaScriptが「モジュール」という概念が最後に導入されたモダンなプログラム言語だと思われるからです。「モジュール」を扱う時に使われるのが、`using`、`#include`、`#import`、`import`等です。そういう意味であれば同じ概念です。しかし、「モジュール」の実装はプログラム言語により異なるので、使い方は違ってきます。

C#の場合は、使用する外部「モジュール」は、プロジェクトでまとめて`.csproj`に記述します。それで、using
ディレクティブは、「モジュール」の読み込みのためではなくて名前空間のために存在します。

一方、Pythonのimport文は、他のモジュールをインポートするために使われ、モジュールを使用するためには必ず必要になります。


CC BY-SA 4.0
2018-11-10T10:17:32.030
50168
2018-11-10T11:06:00.013
2018-11-10T11:06:00.013
15171
15171
50142
answer