D Programlama - Karışımlar
Mixinler, üretilen kodun kaynak koduna karıştırılmasına izin veren yapılardır. Karışımlar aşağıdaki türlerde olabilir -
- String Mixins
- Şablon Karışımları
- Ad boşluklarını karıştır
String Mixins
D, derleme zamanında bu dizge bilindiği sürece dizge olarak kod ekleme yeteneğine sahiptir. Dize karışımlarının sözdizimi aşağıda gösterilmiştir -
mixin (compile_time_generated_string)
Misal
Yaylı karışımlar için basit bir örnek aşağıda gösterilmiştir.
import std.stdio;
void main() {
mixin(`writeln("Hello World!");`);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Hello World!
Burada, dizeyi derleme zamanında geçirebileceğimiz başka bir örnek var, böylece mixins, kodu yeniden kullanmak için işlevleri kullanabilir. Aşağıda gösterilmiştir.
import std.stdio;
string print(string s) {
return `writeln("` ~ s ~ `");`;
}
void main() {
mixin (print("str1"));
mixin (print("str2"));
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
str1
str2
Şablon Karışımları
D şablonları, derleyicinin bu modelden gerçek örnekler oluşturması için ortak kod modellerini tanımlar. Şablonlar işlevler, yapılar, birlikler, sınıflar, arayüzler ve diğer herhangi bir yasal D kodunu oluşturabilir. Şablon karışımların sözdizimi aşağıda gösterildiği gibidir.
mixin a_template!(template_parameters)
Dizge mixinleri için basit bir örnek aşağıda gösterilmektedir, burada sınıf Departmanı ve bir şablonu örnekleyen bir mixin ile bir şablon oluşturuyoruz ve böylece setName ve printNames işlevlerini yapı koleji için kullanılabilir hale getiriyoruz.
Misal
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();
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
The names
0 : name1
1 : name2
Mixin Name Spaces
Mixin ad boşlukları, şablon karışımlarında belirsizlikleri önlemek için kullanılır. Örneğin, biri açıkça tanımlanmış ve diğeri karıştırılmış iki değişken olabilir. Karma bir ad, çevreleyen kapsamdaki bir adla aynı olduğunda, çevreleyen kapsamdaki ad alır Kullanılmış. Bu örnek aşağıda gösterilmiştir.
Misal
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();
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
name 1
name 2