news

Selasa, 16 Juni 2020

Fitur Extension Methods pada Dart

Extension Methods

Pada versi 2.7 Dart mengenalkan fitur baru yaitu extension methods. Tujuan dari fitur ini adalah supaya kita bisa membuat fungsionalitas tambahan dari library yang sudah ada.

Ketika Anda menggunakan library, baik itu library bawaan Dart atau pun library milik orang lain, ada kemungkinan library tersebut kurang lengkap sehingga kita perlu menambahkan beberapa fungsionalitas. 
Namun akan jadi PR kita untuk mengubah library yang sudah ada. Dengan extension method, kita dapat membuat fungsi atau method tambahan lalu menggunakannya sesuai dengan kebutuhan aplikasi kita.
Contoh sederhananya, kita memiliki variabel list integer.


  1. var unsortedNumbers = [2, 5, 3, 1, 4];



Kita memiliki kebutuhan untuk mengurutkan nilai di dalam list tersebut namun List pada Dart tidak memiliki fungsi untuk mengurutkannya (Dart memiliki fungsi sort() namun bersifat mentransformasi list dan tidak mengembalikan nilai). Kita bisa membuat extension method dari objek List dengan sintaks seperti berikut:
  1. /* extension <extension name> on <type> {
  2.   (<member definition>)*
  3. } */
  4.  
  5. extension Sorting on List<int> {
  6.   List<int> sortAsc() {
  7.     var list = this;
  8.     var length = this.length;
  9.  
  10.  
  11.     for (int i = 0; i < length - 1; i++) {
  12.       int min = i;
  13.       for (int j = i + 1; j < length; j++) {
  14.         if (list[j] < list[min]) {
  15.           min = j;
  16.         }
  17.       }
  18.  
  19.  
  20.       int tmp = list[min];
  21.       list[min] = list[i];
  22.       list[i] = tmp;
  23.     }
  24.  
  25.  
  26.     return list;
  27.   }
  28. }


Pada extension method di atas kita telah membuat method atau fungsi untuk mengurutkan data di dalam list menggunakan selection sort algorithm. Selanjutnya kita bisa memanggil method ini dari objek list.


  1. void main() {

  2.   var unsortedNumbers = [2, 5, 3, 1, 4];

  3.   print(unsortedNumbers);

  4.   var sortedNumbers = unsortedNumbers.sortAsc();

  5.   print(sortedNumbers);

  6.  

  7.  

  8.   /*

  9.   Output: [2, 5, 3, 1, 4]

  10.           [1, 2, 3, 4, 5]

  11.    */

  12. }



Kita juga bisa menggunakan kembali extension method ini di beberapa berkas yang berbeda sebagai library.



  1. import 'extension.dart';

  2.  

  3. void main() {

  4.   var unsortedNumbers = [2, 5, 3, 1, 4];

  5.   print(unsortedNumbers);

  6.   var sortedNumbers = unsortedNumbers.sortAsc();

  7.   print(sortedNumbers);

  8. }






  1. extension Sorting on List<int> {

  2.   List<int> sortAsc() {

  3.     var list = this;

  4.     var length = this.length;

  5.  

  6.     for (int i = 0; i < length - 1; i++) {

  7.       int min = i;

  8.       for (int j = i + 1; j < length; j++) {

  9.         if (list[j] < list[min]) {

  10.           min = j;

  11.         }

  12.       }

  13.  

  14.       int tmp = list[min];

  15.       list[min] = list[i];

  16.       list[i] = tmp;

  17.     }

  18.  

  19.     return list;

  20.   }

  21. }

  22.  

  23. extension NumberParsing on String {

  24.   int parseInt() {

  25.     return int.parse(this);

  26.   }

  27. }