Kütüphaneler & İçe Aktarma (Libraries & Imports)

Programınızı modüler ve paylaşılabilir bir kod tabanı oluşturmak için import ve library direktifleri kullanılabilir. Kütüphaneler sadece API'ları sağlamakla kalmaz, aynı zamanda gizlilik birimidir: alt çizgi (_) ile başlayan tanımlayıcılar yalnızca ilgili kütüphane içinde görünür. Her Dart dosyası (ve parçaları), bir kütüphane oluştursa da, bir kütüphane direktifi kullanmasa bile.

Kütüphaneler, paketler aracılığıyla dağıtılabilir.

Kütüphaneleri Kullanma

Bir kütüphanedeki bir isim alanının başka bir kütüphane içindeki kapsamda nasıl kullanılacağını belirtmek için import kullanın.

Örneğin, Dart web uygulamaları genellikle dart:html kütüphanesini kullanır ve şu şekilde içe aktarabilirler:

import 'dart:html';

İçe aktarmak için tek gereken argüman, kütüphaneyi belirten bir URI'dir. Dahili kütüphaneler için URI, özel dart: şemalıdır. Diğer kütüphaneler için dosya sistem yolu veya package: şemasını kullanabilirsiniz. package: şeması, pub aracı gibi bir paket yöneticisi tarafından sağlanan kütüphaneleri belirtir. Örneğin:

import 'package:test/test.dart';

Not

URI, uniform resource identifier'ın kısaltmasıdır. URL'ler (uniform resource locators), genel bir URI türüdür.

Bir Kütüphane İsim Uzantısı Belirtme

Çakışan tanımlayıcılara sahip iki kütüphaneyi içe aktarıyorsanız, o zaman bir veya her iki kütüphaneye bir ön ek belirtebilirsiniz. Örneğin, library1 ve library2 her ikisinde de bir Element sınıfı varsa, kodunuz şöyle olabilir:

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// lib1'den Element kullanılır.
Element element1 = Element();

// lib2'den Element kullanılır.
lib2.Element element2 = lib2.Element();

Bir Kütüphanenin Yalnızca Bir Kısmını İçe Aktarma

Bir kütüphanenin yalnızca bir kısmını kullanmak istiyorsanız, kütüphaneyi seçmeli olarak içe aktarabilirsiniz. Örneğin:

// Sadece foo'yu içe aktar.
import 'package:lib1/lib1.dart' show foo;

// foo hariç tüm isimleri içe aktar.
import 'package:lib2/lib2.dart' hide foo;

Tembel Yükleme (Lazily loading) Bir Kütüphane

Tembel yükleme (ayrıca lazy load olarak da adlandırılır), bir web uygulamasının bir kütüphaneyi ihtiyaç duyulduğunda, yani kütüphane gerektiğinde, yüklemesine izin verir. Tembel yükleme kullanmanın bazı durumları şunlardır:

  • Bir web uygulamasının başlangıç zamanını azaltmak için.

  • A/B testi yapmak için - örneğin bir algoritmanın alternatif uygulamalarını denemek.

  • Nadiren kullanılan işlevselliği yüklemek için, isteğe bağlı ekranlar ve iletişim kutuları gibi.

Bir kütüphaneyi tembel yüklemek için, önce onu deferred as ile içe aktarmalısınız.

import 'package:selamlar/selam.dart' deferred as selam;

Kütüphaneye ihtiyaç duyduğunuzda, kütüphaneyi yüklemek için loadLibrary() fonksiyonunu kütüphanenin tanımlayıcısını kullanarak çağırın.

Future<void> selamlasma() async {
  await selam.loadLibrary();
  selam.ekranaYazSelam();
}

Yukarıdaki kodda, await anahtar kelimesi kütüphane yüklenene kadar işlemi duraklatır. Async ve await hakkında daha fazla bilgi için, asenkron destek'e bakın.

loadLibrary() fonksiyonunu bir kütüphaneye birden fazla kez çağırabilirsiniz. Kütüphane yalnızca bir kez yüklenir.

Tembel yükleme kullanırken aşağıdaki konuları akılda tutun:

  • Tembel bir kütüphanenin sabitleri içe aktaran dosyada sabit değildir. Unutmayın, bu sabitler, tembel kütüphane yüklenene kadar mevcut değildir.

  • Bir dosyadan tembel bir kütüphanedeki türleri kullanamazsınız. Bunun yerine, arayüz türlerini hem tembel kütüphanede hem de içe aktaran dosyada içeren bir kütüphaneye taşımayı düşünün.

  • Dart, loadLibrary() fonksiyonunu, deferred as namespace ile tanımladığınız ad uzayına otomatik olarak ekler. loadLibrary() fonksiyonu bir Future döndürür.

Kütüphane Direktifi

Kütüphane düzeyinde belge açıklamalarını veya metadata açıklamalarını belirtmek için, bunları dosyanın başındaki bir kütüphane bildirimiyle iliştirebilirsiniz.

/// Gerçekten harika bir test kütüphanesi
@TestOn('browser')
library;

Last updated