Dartプログラミング-ライブラリ
プログラミング言語のライブラリは、ルーチンのコレクション(プログラミング命令のセット)を表します。Dartには、頻繁に使用されるルーチンを格納するのに役立つ一連の組み込みライブラリがあります。Dartライブラリは、クラス、定数、関数、typedef、プロパティ、および例外のセットで構成されています。
ライブラリのインポート
インポートすると、ライブラリ内のコンポーネントを呼び出し元のコードで使用できるようになります。importキーワードは、同じことを実現するために使用されます。dartファイルには複数のインポートステートメントを含めることができます。
組み込みのDartライブラリURIは、dart:スキームを使用してライブラリを参照します。他のライブラリでは、ファイルシステムパスまたはpackage:スキームを使用して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
一般的に使用されるライブラリのいくつかを以下に示します-
シニア番号 | ライブラリと説明 |
---|---|
1 | dart:io サーバーアプリケーションのファイル、ソケット、HTTP、およびその他のI / Oサポート。このライブラリは、ブラウザベースのアプリケーションでは機能しません。このライブラリはデフォルトでインポートされます。 |
2 | dart:core すべてのDartプログラムに組み込まれているタイプ、コレクション、およびその他のコア機能。このライブラリは自動的にインポートされます。 |
3 | dart: math 数学定数と関数、および乱数ジェネレーター。 |
4 | dart: convert JSONやUTF-8など、さまざまなデータ表現間で変換するためのエンコーダーとデコーダー。 |
5 | dart: typed_data 固定サイズのデータ(たとえば、符号なし8バイト整数)を効率的に処理するリスト。 |
例:ライブラリのインポートと使用
次の例では、組み込みライブラリをインポートします dart: math。スニペットはsqrt() からの機能 math図書館。この関数は、渡された数値の平方根を返します。
import 'dart:math';
void main() {
print("Square root of 36 is: ${sqrt(36)}");
}
Output
Square root of 36 is: 6.0
ライブラリへのカプセル化
Dartスクリプトでは、識別子の前にアンダースコア(_)を付けて、コンポーネントをプライベートとしてマークできます。簡単に言えば、Dartライブラリは外部スクリプトによるコンテンツへのアクセスを制限できます。これは、encapsulation。同じ構文を以下に示します-
構文
_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:261)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
カスタムライブラリの作成
Dartでは、独自のコードをライブラリとして使用することもできます。カスタムライブラリの作成には、次の手順が含まれます-
Step 1: Declaring a Library
ライブラリを明示的に宣言するには、 library statement。ライブラリを宣言するための構文は次のとおりです。
library library_name
// library contents go here
Step 2: Associating a Library
ライブラリは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");
}
プログラムは以下を生成する必要があります output −
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");
}
それは以下を生成します output −
Log method called in loggerlib msg:hello from loggerlib
Log method called in webloggerlib msg:hello from webloggerlib