Native function
- Dart kursu
- Uzman
- Ders 15/47
- 5 dk
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
void main() {
// NativeBinding sınıfını tanımla (symbol, dartType; describe)
// bir NativeBinding yarat; describe() yazdır
}Örnek çözüm
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ı
final add = lib.lookupFunction<NativeAdd, ____>('add');
final add = lib.lookupFunction<NativeAdd, DartAdd>('add');
Açıklama: lookupFunction<NativeAdd, DartAdd> iki imzayı da belirtir.