Programmazione Dart - Librerie

Una libreria in un linguaggio di programmazione rappresenta una raccolta di routine (insieme di istruzioni di programmazione). Dart dispone di una serie di librerie integrate utili per memorizzare le routine utilizzate di frequente. Una libreria Dart comprende un insieme di classi, costanti, funzioni, typedef, proprietà ed eccezioni.

Importazione di una libreria

L'importazione rende i componenti in una libreria disponibili per il codice chiamante. La parola chiave import viene utilizzata per ottenere lo stesso risultato. Un file dart può avere più istruzioni di importazione.

Gli URI della libreria Dart incorporati utilizzano lo schema dart: per fare riferimento a una libreria. Altre librerie possono utilizzare un percorso del file system o lo schema package: per specificarne l'URI. Le librerie fornite da un gestore di pacchetti come lo strumento pub utilizzano il pacchetto: schema .

La sintassi per importare una libreria in Dart è fornita di seguito:

import 'URI'

Considera il seguente frammento di codice:

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

Se desideri utilizzare solo una parte di una libreria, puoi importare selettivamente la libreria. La sintassi per lo stesso è data di seguito:

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

Di seguito vengono fornite alcune librerie di uso comune:

Suor n Libreria e descrizione
1

dart:io

File, socket, HTTP e altro supporto I / O per le applicazioni server. Questa libreria non funziona nelle applicazioni basate su browser. Questa libreria è importata per impostazione predefinita.

2

dart:core

Tipi, raccolte e altre funzionalità di base incorporate per ogni programma Dart. Questa libreria viene importata automaticamente.

3

dart: math

Costanti e funzioni matematiche, più un generatore di numeri casuali.

4

dart: convert

Codificatori e decodificatori per la conversione tra diverse rappresentazioni di dati, inclusi JSON e UTF-8.

5

dart: typed_data

Elenchi che gestiscono in modo efficiente dati di dimensioni fisse (ad esempio, interi a 8 byte senza segno).

Esempio: importazione e utilizzo di una libreria

L'esempio seguente importa la libreria incorporata dart: math. Lo snippet chiama il filesqrt() funzione dal mathbiblioteca. Questa funzione restituisce la radice quadrata di un numero che le è stato passato.

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

Output

Square root of 36 is: 6.0

Incapsulamento nelle biblioteche

Gli script Dart possono anteporre agli identificatori un trattino basso (_) per contrassegnare i suoi componenti come privati. In poche parole, le librerie Dart possono limitare l'accesso al suo contenuto da script esterni. Questo è definito comeencapsulation. La sintassi per lo stesso è data di seguito:

Sintassi

_identifier

Esempio

In un primo momento, definire una libreria con una funzione privata.

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

Quindi, importa la libreria

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

Il codice precedente genererà un errore.

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)

Creazione di librerie personalizzate

Dart ti consente anche di utilizzare il tuo codice come libreria. La creazione di una libreria personalizzata prevede i seguenti passaggi:

Step 1: Declaring a Library

Per dichiarare esplicitamente una libreria, utilizzare il library statement. La sintassi per dichiarare una libreria è la seguente:

library library_name  
// library contents go here

Step 2: Associating a Library

Puoi associare una libreria in due modi:

  • All'interno della stessa directory
import 'library_name'
  • Da una directory diversa
import 'dir/library_name'

Esempio: libreria personalizzata

Innanzitutto, definiamo una libreria personalizzata, 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); 
}

Successivamente, importeremo la libreria -

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

Il programma dovrebbe produrre quanto segue output -

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

Prefisso della libreria

Se importi due librerie con identificatori in conflitto, puoi specificare un prefisso per una o entrambe le librerie. Utilizzare il'as'parola chiave per specificare il prefisso. La sintassi per lo stesso è data di seguito:

Sintassi

import 'library_uri' as prefix

Esempio

Per prima cosa, definiamo una libreria: loggerlib.dart.

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

Successivamente, definiremo un'altra libreria: webloggerlib.dart.

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

Infine, importeremo la libreria con un prefisso.

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

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

Produrrà quanto segue output -

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