ユーザ用ツール

サイト用ツール


tutorial:nim:modules

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
tutorial:nim:modules [2024/03/12 01:12] – [エクスポート] freemikantutorial:nim:modules [2024/08/19 19:20] (現在) freemikan
行 1: 行 1:
 ====== モジュール ====== ====== モジュール ======
  
-このチュートリアルでは数行程度の僅かなコードのプログラムしか作ってきませんでした。現実的なプログラムではもっと多くのコードが必要になります。多くの場合は一つのファイルに全てのコードを詰め込むよりも、そのコードの特性によって複数のファイルに分割したほうが管理しやすくなります。それぞれのファイルは独立したコンパイル単位、つまり、別々にコンパイルされます。そして、通常は一つのファイルが一つのモジュールになります。+このチュートリアルでは数行程度の僅かなコードのプログラムしか作ってきませんでした。現実的なプログラムではもっと多くのコードが必要になります。多くの場合は一つのファイルに全てのコードを詰め込むよりも、そのコードの特性によって複数のファイルに分割したほうが管理しやすくなります。それぞれのファイルは独立したコンパイル単位、つまり、別々にコンパイルされます。そして、通常は一つのファイルが一つのモジュールになります。
  
-====== インポート ======+===== インポート =====
  
 モジュールはインポートして使用します。 モジュールはインポートして使用します。
行 19: 行 19:
 そして、__main.nim__はmoduleAとmoduleBを使用し、moduleAはotherのmoduleAを、moduleBはotherのmoduleBを使用していたとします。このような依存関係があるとき、各ファイルでimport文を使用して、それぞれ必要とするモジュールをインポートします。 そして、__main.nim__はmoduleAとmoduleBを使用し、moduleAはotherのmoduleAを、moduleBはotherのmoduleBを使用していたとします。このような依存関係があるとき、各ファイルでimport文を使用して、それぞれ必要とするモジュールをインポートします。
  
-<codeprism lang=nim>+<file nim>
 # main.nim # main.nim
 import moduleA import moduleA
行 37: 行 37:
 # other/moduleB.nim # other/moduleB.nim
 ... ...
-</codeprism>+</file>
  
-このプログラムをビルドするには、トップレベルのソースファイルである__main.nim__だけをコンパイに渡します。依存するモジュールの解決とソースファイルのコンパイルは自動的に行われます。+このプログラムをビルドするには、トップレベルのソースファイルである__main.nim__だけをコンパイに渡します。依存するモジュールの解決とソースファイルのコンパイルは自動的に行われます。
  
 <cli> <cli>
行 53: 行 53:
  
 メッセージに含まれる//"out: /home/freemikan/code/NimTutorial/myApp/myApp [SuccessX]"//の部分から、正常に__main.rs__がコンパイルされて、//myApp//が生成されたことが確認できます。((コンパイラは中身が空のモジュールに対して警告が出力しますが、今は重要ではありません。)) メッセージに含まれる//"out: /home/freemikan/code/NimTutorial/myApp/myApp [SuccessX]"//の部分から、正常に__main.rs__がコンパイルされて、//myApp//が生成されたことが確認できます。((コンパイラは中身が空のモジュールに対して警告が出力しますが、今は重要ではありません。))
-====== エクスポート ======+ 
 +===== エクスポート =====
  
 モジュール内で定義されたシンボル、つまり、変数やプロシージャはデフォルトではモジュール外からアクセスできません。アクセスできるようにするには、エクスポートすることを明示しなければなりません。エクスポートするには、名前に''*''をつけます。 モジュール内で定義されたシンボル、つまり、変数やプロシージャはデフォルトではモジュール外からアクセスできません。アクセスできるようにするには、エクスポートすることを明示しなければなりません。エクスポートするには、名前に''*''をつけます。
  
-<codeprism lang=nim>+<file nim>
 # moduleA.nim # moduleA.nim
 let foo* = 100 let foo* = 100
行 66: 行 67:
 echo foo    # OK => 100 echo foo    # OK => 100
 echo bar    # コンパイルエラー! echo bar    # コンパイルエラー!
-</codeprism>+</file>
  
 上の例では、''foo*''は''*''が付与さているのでエクスポートされます。''bar''はそうではないのでエクスポートされません。moduleAをインポートする__main.nim__では、''foo''にのみアクセス可能で、''bar''はアクセス不可です。__main.nim__をコンパイルするとエラーになります。 上の例では、''foo*''は''*''が付与さているのでエクスポートされます。''bar''はそうではないのでエクスポートされません。moduleAをインポートする__main.nim__では、''foo''にのみアクセス可能で、''bar''はアクセス不可です。__main.nim__をコンパイルするとエラーになります。
行 76: 行 77:
 インポートされるシンボルは直接インポートするモジュール内でエクスポートされているものだけです。 インポートされるシンボルは直接インポートするモジュール内でエクスポートされているものだけです。
  
-<codeprism lang=nim>+<file nim>
 # other/moduleA.nim # other/moduleA.nim
 let bar* = 200 let bar* = 200
行 88: 行 89:
 echo foo    # OK => 100 echo foo    # OK => 100
 echo bar    # コンパイルエラー! echo bar    # コンパイルエラー!
-</codeprism>+</file>
  
 __main.nim__からはother/moduleAでエクスポートされている''bar''を認識することが出来ません。もし、moudleAがインポートしたother/moduleAも__main.nim__で使えるようにしたいなら、その判断はmoduleAに委ねられます。moduleAがother/moduleAを再エクスポートすれば可能となります。 __main.nim__からはother/moduleAでエクスポートされている''bar''を認識することが出来ません。もし、moudleAがインポートしたother/moduleAも__main.nim__で使えるようにしたいなら、その判断はmoduleAに委ねられます。moduleAがother/moduleAを再エクスポートすれば可能となります。
  
-<codeprism lang=nim>+<file nim>
 # other/moduleA.nim # other/moduleA.nim
 let bar* = 200 let bar* = 200
行 105: 行 106:
 echo foo    # OK => 100 echo foo    # OK => 100
 echo bar    # OK => 200 echo bar    # OK => 200
-</codeprism>+</file>
  
 定数やプロシージャについても同じ規則に従います。 定数やプロシージャについても同じ規則に従います。
  
-<codeprism lang=nim>+<file nim>
 # other/moduleA.nim # other/moduleA.nim
 const BAZ* = 300 const BAZ* = 300
行 129: 行 130:
 # echo sub2(1, 2)    # コンパイルエラー! # echo sub2(1, 2)    # コンパイルエラー!
 # echo add3(1, 2, 3) # コンパイルエラー! # echo add3(1, 2, 3) # コンパイルエラー!
-</codeprism>+</file>
  
 まとめると次のとおりです。 まとめると次のとおりです。
行 139: 行 140:
 このようにかなりシンプルな規則となっています。 このようにかなりシンプルな規則となっています。
  
-====== 標準ライブラリ ======+===== 標準ライブラリ =====
  
 標準ライブラリもモジュールの仕組みを使って提供されていますので、使用したいものがあればまずインポートする必要があります。ただし、[[https://nim-lang.org/docs/system.html|systemモジュール]]は例外で、自動的にインポートされます。このモジュールには''int''や''bool''などの基本的な型、''array''や''seq''とそのプロシージャなど、必要不可欠なものが含まれています。 標準ライブラリもモジュールの仕組みを使って提供されていますので、使用したいものがあればまずインポートする必要があります。ただし、[[https://nim-lang.org/docs/system.html|systemモジュール]]は例外で、自動的にインポートされます。このモジュールには''int''や''bool''などの基本的な型、''array''や''seq''とそのプロシージャなど、必要不可欠なものが含まれています。
  
 他にどのようなモジュールが提供されているかは、[[https://nim-lang.org/docs/lib.html|標準ライブラリのドキュメント]]がよく整理されているので、そちらを参照すると良いでしょう。 他にどのようなモジュールが提供されているかは、[[https://nim-lang.org/docs/lib.html|標準ライブラリのドキュメント]]がよく整理されているので、そちらを参照すると良いでしょう。
tutorial/nim/modules.1710173538.txt.gz · 最終更新: 2024/03/12 01:12 by freemikan

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki