Programação Dart - Bibliotecas

Uma biblioteca em uma linguagem de programação representa uma coleção de rotinas (conjunto de instruções de programação). O Dart possui um conjunto de bibliotecas integradas que são úteis para armazenar rotinas usadas com frequência. Uma biblioteca Dart é composta por um conjunto de classes, constantes, funções, typedefs, propriedades e exceções.

Importando uma biblioteca

A importação disponibiliza os componentes de uma biblioteca para o código do chamador. A palavra-chave import é usada para conseguir o mesmo. Um arquivo dart pode ter várias instruções de importação.

Os URIs da biblioteca Dart incorporados usam o esquema dart: para se referir a uma biblioteca. Outras bibliotecas podem usar um caminho do sistema de arquivos ou o esquema package: para especificar seu URI. As bibliotecas fornecidas por um gerenciador de pacotes, como a ferramenta pub, usam o esquema package : .

A sintaxe para importar uma biblioteca no Dart é fornecida abaixo -

import 'URI'

Considere o seguinte snippet de código -

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

Se você deseja usar apenas parte de uma biblioteca, pode importar a biblioteca seletivamente. A sintaxe para o mesmo é fornecida abaixo -

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

Algumas bibliotecas comumente usadas são fornecidas abaixo -

Sr. Não Biblioteca e descrição
1

dart:io

Arquivo, soquete, HTTP e outros suportes de E / S para aplicativos de servidor. Esta biblioteca não funciona em aplicativos baseados em navegador. Esta biblioteca é importada por padrão.

2

dart:core

Tipos integrados, coleções e outras funcionalidades básicas para cada programa Dart. Esta biblioteca é importada automaticamente.

3

dart: math

Constantes e funções matemáticas, além de um gerador de números aleatórios.

4

dart: convert

Codificadores e decodificadores para conversão entre diferentes representações de dados, incluindo JSON e UTF-8.

5

dart: typed_data

Listas que lidam com eficiência com dados de tamanho fixo (por exemplo, inteiros de 8 bytes não assinados).

Exemplo: importando e usando uma biblioteca

O exemplo a seguir importa a biblioteca integrada dart: math. O snippet chama osqrt() função do mathbiblioteca. Esta função retorna a raiz quadrada de um número passado a ela.

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

Output

Square root of 36 is: 6.0

Encapsulamento em bibliotecas

Os scripts do DART podem prefixar os identificadores com um sublinhado (_) para marcar seus componentes como particulares. Simplificando, as bibliotecas Dart podem restringir o acesso ao seu conteúdo por scripts externos. Isso é denominado comoencapsulation. A sintaxe para o mesmo é fornecida abaixo -

Sintaxe

_identifier

Exemplo

Em primeiro lugar, defina uma biblioteca com uma função privada.

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

Em seguida, importe a biblioteca

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

O código acima resultará em erro.

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)

Criação de bibliotecas personalizadas

O Dart também permite que você use seu próprio código como biblioteca. A criação de uma biblioteca personalizada envolve as seguintes etapas -

Step 1: Declaring a Library

Para declarar explicitamente uma biblioteca, use o library statement. A sintaxe para declarar uma biblioteca é a seguinte -

library library_name  
// library contents go here

Step 2: Associating a Library

Você pode associar uma biblioteca de duas maneiras -

  • Dentro do mesmo diretório
import 'library_name'
  • De um diretório diferente
import 'dir/library_name'

Exemplo: Biblioteca Personalizada

Primeiro, vamos definir uma 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 seguir, vamos importar a 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"); 
}

O programa deve produzir o seguinte output -

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

Prefixo da biblioteca

Se você importar duas bibliotecas com identificadores conflitantes, poderá especificar um prefixo para uma ou ambas as bibliotecas. Use o'as'palavra-chave para especificar o prefixo. A sintaxe para o mesmo é fornecida abaixo -

Sintaxe

import 'library_uri' as prefix

Exemplo

Primeiro, vamos definir uma biblioteca: loggerlib.dart.

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

A seguir, definiremos outra biblioteca: webloggerlib.dart.

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

Por fim, importaremos a biblioteca com um prefixo.

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

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

Irá produzir o seguinte output -

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