Pemrograman D - Template

Template adalah dasar dari pemrograman generik, yang melibatkan penulisan kode dengan cara yang tidak bergantung pada jenis tertentu.

Templat adalah cetak biru atau rumus untuk membuat kelas atau fungsi generik.

Template adalah fitur yang memungkinkan untuk mendeskripsikan kode sebagai pola, agar kompilator menghasilkan kode program secara otomatis. Bagian dari kode sumber mungkin diserahkan kepada kompiler untuk diisi sampai bagian itu benar-benar digunakan dalam program. Kompilator mengisi bagian yang hilang.

Template Fungsi

Mendefinisikan sebuah fungsi sebagai templat meninggalkan satu atau lebih tipe yang digunakannya sebagai tidak ditentukan, untuk disimpulkan nanti oleh kompilator. Jenis yang dibiarkan tidak ditentukan ditentukan dalam daftar parameter template, yang berada di antara nama fungsi dan daftar parameter fungsi. Oleh karena itu, templat fungsi memiliki dua daftar parameter -

  • daftar parameter template
  • daftar parameter fungsi
import std.stdio; 
 
void print(T)(T value) { 
   writefln("%s", value); 
}
  
void main() { 
   print(42);  
   
   print(1.2);
   
   print("test"); 
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut -

42 
1.2 
test

Template Fungsi dengan Beberapa Jenis Parameter

Mungkin ada beberapa jenis parameter. Mereka diperlihatkan dalam contoh berikut.

import std.stdio;
  
void print(T1, T2)(T1 value1, T2 value2) { 
   writefln(" %s %s", value1, value2); 
}

void main() { 
   print(42, "Test");  
   
   print(1.2, 33); 
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut -

42 Test 
 1.2 33

Template Kelas

Sama seperti kita dapat mendefinisikan template fungsi, kita juga dapat mendefinisikan template kelas. Contoh berikut mendefinisikan class Stack dan mengimplementasikan metode umum untuk mendorong dan memunculkan elemen dari stack.

import std.stdio; 
import std.string; 
 
class Stack(T) { 
   private: 
      T[] elements;  
   public:  
      void push(T element) { 
         elements ~= element; 
      }
      void pop() { 
         --elements.length; 
      } 
      T top() const @property { 
         return elements[$ - 1]; 
      }
      size_t length() const @property { 
         return elements.length; 
      } 
}
  
void main() { 
   auto stack = new Stack!string;
   
   stack.push("Test1"); 
   stack.push("Test2");  
   
   writeln(stack.top); 
   writeln(stack.length); 
   
   stack.pop; 
   writeln(stack.top); 
   writeln(stack.length); 
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Test2 
2 
Test1 
1