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