Dart Temel Sözdizimi | Kütüphane & İçe Aktarım & Anahtar Kelimeler #5

MÜŞERREF SELÇUK ÖZDEMIR
3 min readDec 6, 2023

--

Kütüphane & Import

import ve kütüphane yönergeleri modüler ve paylaşılabilir bir kod tabanı oluşturmanıza yardımcı olabilir. Kütüphaneler sadece API’ler sağlamakla kalmaz, aynı zamanda bir gizlilik birimidir: alt çizgi (_) ile başlayan tanımlayıcılar sadece kütüphane içinde görülebilir. Bir kütüphane yönergesi kullanmasa bile her Dart dosyası (artı parçaları) bir kütüphanedir.

Kütüphaneleri kullanma

Bir kütüphanedeki bir isim alanının başka bir kütüphane kapsamında 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 bu kütüphaneyi şu şekilde içe aktarabilirler:

import 'dart:html';

İçe aktarmak için gerekli tek argüman kütüphaneyi belirten bir URI’dir. Yerleşik kütüphaneler için URI özel dart: şemasına sahiptir. Diğer kütüphaneler için bir dosya sistemi yolu veya package: şeması 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, tek tip kaynak tanımlayıcısı anlamına gelir. URL’ler (tekdüze kaynak bulucular) yaygın bir URI türüdür.

Bir kütüphane öneki belirtme

Çakışan tanımlayıcılara sahip iki kütüphaneyi içe aktarırsanız, kütüphanelerden biri veya her ikisi için bir önek belirtebilirsiniz. Örneğin, kütüphane1 ve kütüphane2'nin her ikisi de bir Element sınıfına sahipse, aşağıdaki gibi bir kodunuz olabilir:

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

// Uses Element from lib1.
Element element1 = Element();

// Uses Element from lib2.
lib2.Element element2 = lib2.Element();

Kütüphane’nin yalnızca bir bölümünü içe aktarma

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

// Import only foo.
import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

Tembelce kütüphane yükleme:

Ertelenmiş yükleme (tembel yükleme olarak da adlandırılır), bir web uygulamasının kütüphaneye ihtiyaç duyulduğunda, talep üzerine bir kütüphane yüklemesine olanak tanır. İşte ertelenmiş yüklemeyi kullanabileceğiniz bazı durumlar:

  • Bir web uygulamasının ilk başlangıç süresini azaltmak için.
  • A/B testi gerçekleştirmek için — örneğin bir algoritmanın alternatif uygulamalarını denemek için.
  • İsteğe bağlı ekranlar ve iletişim kutuları gibi nadiren kullanılan işlevleri yüklemek için.

Bir kütüphaneyi tembel olarak yüklemek için önce deferred as kullanarak içe aktarmanız gerekir.

import 'package:greetings/hello.dart' deferred as hello;

Kütüphaneye ihtiyaç duyduğunuzda, kütüphanenin tanımlayıcısını kullanarak loadLibrary() işlevini çağırın.

Future<void> greet() async {
await hello.loadLibrary();
hello.printGreeting();
}

Önceki kodda await anahtar sözcüğü, kütüphane yüklenene kadar yürütmeyi duraklatır. .

loadLibrary() işlevini bir kütüphane üzerinde sorunsuz bir şekilde birden çok kez çağırabilirsiniz. Kütüphane yalnızca bir kez yüklenir.

  • Ertelenmiş bir kütüphanenin sabitleri içe aktarma dosyasındaki sabitler değildir. Unutmayın, bu sabitler ertelenmiş kütüphane yüklenene kadar mevcut değildir.
  • Ertelenmiş bir kütüphanedeki türleri içe aktarma dosyasında kullanamazsınız. Bunun yerine, arayüz tiplerini hem ertelenmiş kütüphane hem de içe aktarma dosyası tarafından içe aktarılan bir kütüphaneye taşımayı düşünün.
  • Dart, deferred as namespace kullanarak tanımladığınız isim alanına loadLibrary() fonksiyonunu örtük olarak ekler. loadLibrary() fonksiyonu bir Future döndürür.

Kütüphane yönergesi

Kütüphane düzeyinde doküman açıklamaları veya meta veri ek açıklamaları belirtmek için, bunları dosyanın başlangıcındaki bir kütüphane bildirimine ekleyin.

/// A really great test library.
@TestOn('browser')
library;

Keywords — Anahtar Kelimeler

Aşağıdaki tabloda Dart dilinin özel olarak ele aldığı sözcükler listelenmiştir.

  1. abstract -2
  2. as- 2
  3. assert
  4. async-1
  5. await-3
  6. base-2
  7. break
  8. case
  9. catch
  10. class
  11. const
  12. continue
  13. covariant-2
  14. default
  15. deferred-2
  16. do
  17. dynamic-2
  18. else
  19. enum
  20. export-2
  21. extends
  22. extension-2
  23. external-2
  24. factory-2
  25. false
  26. final ( variable )
  27. final ( class )-2
  28. finally
  29. for
  30. Function-2
  31. get-2
  32. hide-1
  33. if
  34. implements-2
  35. import-2
  36. in
  37. interface-2
  38. is
  39. late-2
  40. library-2
  41. mixin-2
  42. new
  43. null
  44. on-1
  45. operator-2
  46. part-2
  47. required-2
  48. rethrow
  49. return
  50. sealed-2
  51. set-2
  52. show-1
  53. static-2
  54. super
  55. switch
  56. sync-1
  57. this
  58. throw
  59. true
  60. try
  61. typedef-2
  62. var
  63. void
  64. when
  65. while
  66. with
  67. yield-3

Bu kelimeleri tanımlayıcı olarak kullanmaktan kaçının. Ancak, gerekirse, sayılar ile işaretlenmiş anahtar kelimeler tanımlayıcı olabilir:

  • Sayı 1 olan sözcükler, yalnızca belirli yerlerde anlamı olan bağlamsal anahtar sözcüklerdir. Bunlar her yerde geçerli tanımlayıcılardır.
  • Sayı 2 olan sözcükler yerleşik tanımlayıcılardır. Bu anahtar sözcükler çoğu yerde geçerli tanımlayıcılardır, ancak sınıf veya tür adı olarak ya da içe aktarma öneki olarak kullanılamazlar.
  • Sayı 3 olan sözcükler, eşzamansızlık desteğiyle ilgili sınırlı ayrılmış sözcüklerdir. await veya yield sözcüklerini async, async* veya sync* ile işaretlenmiş hiçbir işlev gövdesinde tanımlayıcı olarak kullanamazsınız.

Tablodaki diğer tüm sözcükler, tanımlayıcı olamayan ayrılmış sözcüklerdir.

Teşekkürler!

--

--