Pemrograman D - Mixins

Mixin adalah struct yang memungkinkan pencampuran kode yang dihasilkan ke dalam kode sumber. Mixin dapat dari jenis berikut -

  • String Mixins
  • Mixins Template
  • Ruang nama mixin

String Mixins

D memiliki kemampuan untuk memasukkan kode sebagai string selama string tersebut diketahui pada saat kompilasi. Sintaks dari campuran string ditampilkan di bawah ini -

mixin (compile_time_generated_string)

Contoh

Contoh sederhana untuk mixin string ditunjukkan di bawah ini.

import std.stdio; 
 
void main() { 
   mixin(`writeln("Hello World!");`); 
}

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

Hello World!

Berikut adalah contoh lain di mana kita bisa melewatkan string dalam waktu kompilasi sehingga mixin dapat menggunakan fungsi untuk menggunakan kembali kode. Itu ditunjukkan di bawah ini.

import std.stdio;

string print(string s) {
   return `writeln("` ~ s ~ `");`; 
}
  
void main() { 
   mixin (print("str1")); 
   mixin (print("str2")); 
}

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

str1
str2

Mixins Template

Template D menentukan pola kode umum, agar kompilator dapat menghasilkan instance aktual dari pola itu. Template dapat menghasilkan fungsi, struct, unions, class, interface, dan kode D legal lainnya. Sintaks mixin template seperti yang ditunjukkan di bawah ini.

mixin a_template!(template_parameters)

Contoh sederhana untuk string mixin ditunjukkan di bawah ini di mana kita membuat template dengan class Department dan mixin yang membuat template dan karenanya membuat fungsi setName dan printNames tersedia untuk sekolah struktur.

Contoh

import std.stdio;

template Department(T, size_t count) { 
   T[count] names;  
   void setName(size_t index, T name) { 
      names[index] = name; 
   } 
   
   void printNames() { 
      writeln("The names");  
      
      foreach (i, name; names) { 
         writeln(i," : ", name); 
      }
   }
}
 
struct College { 
   mixin Department!(string, 2); 
}
  
void main() { 
   auto college = College();  
   college.setName(0, "name1"); 
   college.setName(1, "name2");  
   college.printNames(); 
}

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

The names 
0 : name1 
1 : name2

Ruang Nama Mixin

Ruang nama mixin digunakan untuk menghindari ambiguitas di mixin template. Misalnya, bisa ada dua variabel, satu didefinisikan secara eksplisit di main dan yang lain dicampur masuk. Ketika nama yang dicampur sama dengan nama yang ada di lingkup sekitarnya, maka nama yang ada di lingkup sekitarnya akan mendapat bekas. Contoh ini ditunjukkan di bawah.

Contoh

import std.stdio;

template Person() { 
   string name; 
   
   void print() { 
      writeln(name); 
   } 
}

void main() { 
   string name; 
   
   mixin Person a; 
   name = "name 1"; 
   writeln(name); 
   
   a.name = "name 2"; 
   print(); 
}

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

name 1 
name 2