Programación Dart - Bibliotecas

Una biblioteca en un lenguaje de programación representa una colección de rutinas (conjunto de instrucciones de programación). Dart tiene un conjunto de bibliotecas integradas que son útiles para almacenar rutinas que se utilizan con frecuencia. Una biblioteca de Dart se compone de un conjunto de clases, constantes, funciones, typedefs, propiedades y excepciones.

Importando una biblioteca

La importación hace que los componentes de una biblioteca estén disponibles para el código de la persona que llama. La palabra clave de importación se utiliza para lograr lo mismo. Un archivo de dardos puede tener varias declaraciones de importación.

Los URI de la biblioteca Dart incorporados utilizan el esquema dart: para hacer referencia a una biblioteca. Otras bibliotecas pueden usar una ruta del sistema de archivos o el paquete: esquema para especificar su URI. Bibliotecas proporcionadas por un gestor de paquetes, tales como la herramienta de pub utiliza el paquete: esquema .

La sintaxis para importar una biblioteca en Dart se proporciona a continuación:

import 'URI'

Considere el siguiente fragmento de código:

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

Si desea utilizar solo una parte de una biblioteca, puede importarla de forma selectiva. La sintaxis para el mismo se da a continuación:

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

Algunas bibliotecas de uso común se dan a continuación:

No Señor Biblioteca y descripción
1

dart:io

Soporte de archivos, sockets, HTTP y otras E / S para aplicaciones de servidor. Esta biblioteca no funciona en aplicaciones basadas en navegador. Esta biblioteca se importa de forma predeterminada.

2

dart:core

Tipos integrados, colecciones y otras funciones básicas para cada programa de Dart. Esta biblioteca se importa automáticamente.

3

dart: math

Constantes y funciones matemáticas, más un generador de números aleatorios.

4

dart: convert

Codificadores y decodificadores para convertir entre diferentes representaciones de datos, incluidos JSON y UTF-8.

5

dart: typed_data

Listas que manejan de manera eficiente datos de tamaño fijo (por ejemplo, enteros de 8 bytes sin signo).

Ejemplo: importar y usar una biblioteca

El siguiente ejemplo importa la biblioteca incorporada dart: math. El fragmento llama alsqrt() función de la mathbiblioteca. Esta función devuelve la raíz cuadrada de un número que se le ha pasado.

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

Output

Square root of 36 is: 6.0

Encapsulación en bibliotecas

Los scripts de Dart pueden anteponer identificadores con un guión bajo (_) para marcar sus componentes como privados. En pocas palabras, las bibliotecas de Dart pueden restringir el acceso a su contenido mediante scripts externos. Esto se denominaencapsulation. La sintaxis para el mismo se da a continuación:

Sintaxis

_identifier

Ejemplo

Primero, defina una biblioteca con una función privada.

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

A continuación, importe la biblioteca

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

El código anterior resultará en un error.

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)

Creación de bibliotecas personalizadas

Dart también le permite usar su propio código como biblioteca. La creación de una biblioteca personalizada implica los siguientes pasos:

Step 1: Declaring a Library

Para declarar explícitamente una biblioteca, use el library statement. La sintaxis para declarar una biblioteca es la siguiente:

library library_name  
// library contents go here

Step 2: Associating a Library

Puede asociar una biblioteca de dos formas:

  • Dentro del mismo directorio
import 'library_name'
  • De un directorio diferente
import 'dir/library_name'

Ejemplo: biblioteca personalizada

Primero, definamos una biblioteca personalizada, 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); 
}

A continuación, importaremos la biblioteca -

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

El programa debe producir lo siguiente output -

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

Prefijo de biblioteca

Si importa dos bibliotecas con identificadores en conflicto, puede especificar un prefijo para una o ambas bibliotecas. Utilizar el'as'palabra clave para especificar el prefijo. La sintaxis para el mismo se da a continuación:

Sintaxis

import 'library_uri' as prefix

Ejemplo

Primero, definamos una biblioteca: loggerlib.dart.

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

A continuación, definiremos otra biblioteca: webloggerlib.dart.

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

Finalmente, importaremos la biblioteca con un prefijo.

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

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

Producirá lo siguiente output -

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