Dartライブラリ

プログラミング言語のライブラリは、ルーチンの集合(プログラミング命令セット)を表します。Dartには、常用のルーチンを格納するために使用できる一連の組み込みライブラリがあります。Dartライブラリには、クラス、定数、関数、typedef、属性、および例外のセットが含まれています。

ライブラリをインポートする

インポートすると、ライブラリ内のコンポーネントを呼び出し元のコードで使用できるようになります。importキーワードは、同じ目標を達成するために使用されます。dartファイルには複数のimportステートメントを含めることができます。

組み込みのDartライブラリURIは、dart:schemeを使用してライブラリを参照します。その他のライブラリは、ファイルシステムのパスまたはpackage:schemeを使用してURIを指定できます。パッケージマネージャー(pubツールなど)によって提供されるライブラリは、package:schemeを使用します。

次には、Dartにライブラリをインポートするための構文を示します。

import 'URI'

以下のコードスニペットを読みます。

import 'dart:io' 
import 'package:lib1/libfile.dart'

ライブラリの一部のみを使用する場合は、ライブラリを選択的にインポートできます。構文は以下のとおりです。

import 'package: lib1/lib1.dart' show foo, bar;  
// Import only foo and bar. 

import 'package: mylib/mylib.dart' hide foo;  
// Import all names except foo

次には、常用のライブラリを示します。

番号クラスライブラリ説明
1dart:ioサーバーアプリケーションのファイル、ソケット、HTTP、およびその他のI/Oサポートです。このライブラリは、ブラウザベースのアプリケーションでは機能しません。このライブラリはデフォルトでインポートされます。
2dart:core各Dartプログラムの組み込み型、集合、およびその他のコア関数です。 このライブラリはデフォルトでインポートされます。
3dart:math数学の定数と関数、または乱数ジェネレーターです。
4dart:convertJSONやUTF-8など、さまざまなデータ表現の間に変換するため、使用されるエンコーダとデコーダです。
5dart:typed_data固定サイズのデータ(例えば、8バイトの符号なし整数)のリストを効率的に処理します。

実例:ライブラリをインポートして使用する

以下の実例では、組み込みライブラリdart:mathをインポートします。上記のコードは、数学ライブラリからsqrt()関数を呼び出すことです。この関数は、渡された数値の平方根を返します。

import 'dart:math'; 
void main() { 
   print("Square root of 36 is: ${sqrt(36)}"); 
}

上記のコードを実行した後、出力結果は以下のとおりです。

Square root of 36 is: 6.0

パッケージライブラリ

Dartスクリプトでは、識別子の前にアンダースコア(_)を付けて、そのコンポーネントをプライベートとしてマークできます。つまり、Dartライブラリは、カプセル化と呼ばれる外部スクリプトによって、コンテンツへのアクセスを制限できます。同じ構文を以下に示します。

構文

_identifier

実例

まず、プライベート関数定義ライブラリを使用します。

library loggerlib;                            
void _log(msg) {
   print("Log method called in loggerlib msg:$msg");      
}

次には、ライブラリをインポートします。

import 'test.dart' as web; 
void main() { 
   web._log("hello from webloggerlib"); 
}

上記のコードを実行すると、次のエラーが発生されます。

Unhandled exception: 
No top-level method 'web._log' declared.  
NoSuchMethodError: method not found: 'web._log' 
Receiver: top-level 
Arguments: [...] 
#0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:184) 
#1 main (file:///C:/Users/Administrator/WebstormProjects/untitled/Assertion.dart:6:3) 
#2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:161) 
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:98)

カスタムライブラリを作成する

Dartは、独自のコードをライブラリとして使用することもできます。カスタムライブラリの作成には、以下のステップが含まれます。

ステップ1:ライブラリを宣言する

ライブラリを明示的に宣言するには、libraryステートメントを使用します。ライブラリを宣言するための構文は以下のとおりです。

library library_name  
// library contents go here

ステップ2:ライブラリを関連付ける

ライブラリは2つの方法で関連付けることができます。

同じディレクトリ内に

import 'library_name'

異なるディレクトリ内に

import 'dir/library_name'

実例:カスタムライブラリ

まず、カスタムライブラリ – calculator.dartを定義します。

library calculator_lib;  
import 'dart:math'; 

//import statement after the libaray statement  
int add(int firstNumber,int secondNumber){ 
   print("inside add method of Calculator Library ") ; 
   return firstNumber+secondNumber; 
}  
int modulus(int firstNumber,int secondNumber){ 
   print("inside modulus method of Calculator Library ") ; 
   return firstNumber%secondNumber; 
}  
int random(int no){ 
   return new Random().nextInt(no); 
}

次には、上記のカスタムライブラリをインポートします。

import 'calculator.dart';  
void main() {
   var num1 = 10; 
   var num2 = 20; 
   var sum = add(num1,num2); 
   var mod = modulus(num1,num2); 
   var r = random(10);  

   print("$num1 + $num2 = $sum"); 
   print("$num1 % $num2= $mod"); 
   print("random no $r"); 
}

上記のコードを実行した後、出力結果は以下のとおりです。

inside add method of Calculator Library  
inside modulus method of Calculator Library  
10 + 20 = 30 
10 % 20= 10 
random no 0

ライブラリプレフィックス

識別子が競合する2つのライブラリをインポートする場合は、一方または両方のライブラリにプレフィックスを指定できます。asキーワードを使用して、プレフィックスを指定します。

構文

import 'library_uri' as prefix

実例

まず、ライブラリloggerlib.dartを定義します。コードは以下のとおりです。

library loggerlib;  
void log(msg){ 
   print("Log method called in loggerlib msg:$msg");
}

次には、別のライブラリwebloggerlib.dartを定義します。コードは以下のとおりです。

library webloggerlib; 
void log(msg){ 
   print("Log method called in webloggerlib msg:$msg"); 
}

最後に、プレフィックス付きのライブラリをインポートします。

import 'loggerlib.dart'; 
import 'webloggerlib.dart' as web;  

// prefix avoids function name clashes 
void main(){ 
   log("hello from loggerlib"); 
   web.log("hello from webloggerlib"); 
}

上記のコードを実行した後、出力結果は以下のとおりです。

Log method called in loggerlib msg:hello from loggerlib 
Log method called in webloggerlib msg:hello from webloggerlib
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です