CodeBlanks Logo Icon CodeBlanks

Dynamic invoke

reflectable ile dynamic invoke öğrenirsin.

Dinamik metot çağrısı

Reflection ile bir metot ismi (Symbol olarak) alınabilir ve çalışma zamanında çağrılabilir. dart:mirrors'da instanceMirror.invoke(symbol, args) bunu yapar.

Mirrors gerektirmeyen alternatif: Function.apply(fn, args). Bir fonksiyonu dinamik olarak argüman listesiyle çağırır. Örnek: Function.apply(add, [3, 4]).

Bir başka yol: noSuchMethod'u override ederek bilinmeyen metot çağrılarını yakalamak. dynamic tür ile birlikte esnek proxy sınıfları yazılır.

Function.apply örneği

Function.apply(fn, positionalArgs, namedArgs), fn'i verilen argümanlarla çağırır. positionalArgs bir List, namedArgs bir Map<Symbol, dynamic>'tir.

Örnek: int add(int a, int b) => a + b; var r = Function.apply(add, [3, 4]);. Sonuç 7 olur; tıpkı add(3, 4) gibi.

Kullanım: komut satırı argümanından metot seçme, test çerçevelerinde parametre listesiyle çağrı.

Uygulama Function.apply ile topla

Top-level int add(int a, int b) => a + b; fonksiyonunu tanımla. main içinde var r = Function.apply(add, [3, 4]); ve print(r); ekle.

Başlangıç kodu

main.dart
void main() {
  // add fonksiyonunu tanımla (main dışında)
  // Function.apply ile add(3,4) çağrısı ekle; yazdır
}

Örnek çözüm

main.dart
int add(int a, int b) => a + b;

void main() {
  var r = Function.apply(add, [3, 4]);
  print(r);
}

Beklenen çıktı

7

Soru ve cevaplar

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

1 Dinamik çağrı yolları

Kavram Anlamı
Function.apply Fonksiyonu çağır
mirror.invoke Metot çağır
noSuchMethod Bilinmeyen çağrı
dynamic Tür denetimini kaldır

2 Function.apply ne yapar?

  • Bir fonksiyonu argüman listesiyle çağırır Doğru cevap
  • Bir metodu yeniden adlandırır
  • Bir Future döndürür
  • Bir sınıf oluşturur

Açıklama: Function.apply fn'i verilen argümanlarla çağırır.

3 Fonksiyonu çağır

Soru
var r = ____(add, [3, 4]);
Cevap
var r = Function.apply(add, [3, 4]);

Açıklama: Function.apply(add, [3,4]) add(3,4) ile eşittir.

İleri seviye bölümündeki tüm dersler