CodeBlanks Logo Icon CodeBlanks

Native function

lookupFunction ile native fonksiyon öğrenirsin.

Native function

Native function, C tarafında tanımlı bir fonksiyonun Dart tarafından çağrılabilmesi için bağlanmasıdır. İki typedef gerekir: native imza (typedef NativeAdd = Int32 Function(Int32, Int32);) ve Dart imza (typedef DartAdd = int Function(int, int);).

Bağlama lib.lookupFunction<NativeAdd, DartAdd>('add') ile yapılır. lookupFunction, native çağrıyı Dart çağrısına sarmalar. Dönüş türü ve parametre türleri typedef'lerle statik olarak bildirilir; bu sayede tür güvenliği korunur.

Tür eşleme

FFI, native ve Dart türleri arasında statik eşleme yapar. Int8, Int16, Int32, Int64 ↔ int; Float ve Double ↔ double; Bool ↔ bool; Pointer<NativeType> ↔ Pointer<T>.

Eşleme, derleme anında denetlenir; yanlış eşlemeler derleme hatası verir. Örneğin Int32 Function() döndüren bir native fonksiyonu String Function() Dart imzasıyla bağlayamazsın. Tür güvenliği FFI'nın temel avantajlarındandır.

Uygulama NativeBinding sınıfı

Bir NativeBinding sınıfı tanımla: final String symbol; final String dartType; NativeBinding(this.symbol, this.dartType); alan ve kurucu. String describe() => '$symbol → $dartType'; metodu. main içinde final nb = NativeBinding('add', 'int Function(int, int)'); yarat; print(nb.describe()); ile yazdır.

Başlangıç kodu

main.dart
void main() {
  // NativeBinding sınıfını tanımla (symbol, dartType; describe)
  // bir NativeBinding yarat; describe() yazdır
}

Örnek çözüm

main.dart
class NativeBinding {
  final String symbol;
  final String dartType;
  NativeBinding(this.symbol, this.dartType);
  String describe() => '$symbol → $dartType';
}

void main() {
  final nb = NativeBinding('add', 'int Function(int, int)');
  print(nb.describe());
}

Beklenen çıktı

add → int Function(int, int)

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Native function parçalarını eşleştir

Kavram Anlamı
NativeAdd Native imza
DartAdd Dart imza
lookupFunction Bağlayıcı
Int32 Native tür

2 lookupFunction ne işe yarar?

  • Kütüphane yükler
  • Dosya okur
  • UI render yapar
  • Native fonksiyonu Dart'a bağlar Doğru cevap

Açıklama: lookupFunction native fonksiyonu Dart tarafına bağlar.

3 lookupFunction çağrısı

Soru
final add = lib.lookupFunction<NativeAdd, ____>('add');
Cevap
final add = lib.lookupFunction<NativeAdd, DartAdd>('add');

Açıklama: lookupFunction<NativeAdd, DartAdd> iki imzayı da belirtir.

Uzman bölümündeki tüm dersler