Dart-programming-libraries

提供:Dev Guides
移動先:案内検索

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

一般的に使用されるいくつかのライブラリを以下に示します-

Sr.No Library & Description
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 をインポートします。 このスニペットは、 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:261)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)

カスタムライブラリの作成

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");
}

次の output が生成されます-

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