Merhaba,
Son bir kaç gündür C işaretçilerine yoğunlaşınca D'deki olanaklarını araştırmaya başladım. Özellikle aşağıdaki gibi bir yapıya ihtiyaç duyuyordum çünkü MVC deseninde parçalara bölünmüş kodun iletişiminde gerekiyordu. Gerçi bir yapıyı (örneğin view'deki) başka bir yapı içine üye yaparak iletişimi sağlamıştım. Sanırım bu şekilde daha verimli bir hafıza kullanımı olacak:
import std.stdio;
class View {
private:
int* genişlik;
int* yükseklik;
public:
this(int* g, int* y) {
this.genişlik = g;
this.yükseklik = y;
}
@property int width() {
return *genişlik;
}
@property int height() {
return *yükseklik;
}
}
class Control : View {
bool sol, sağ, yukarı, aşağı;
this(int* g, int* y) {
super(g, y);
}
}
int main() {
int sahneGenişliği = 640;
int sahneYüksekliği = 320;
with (new View(&sahneGenişliği, &sahneYüksekliği)) {
width.write(" x ");
height.writeln;
}
return 0;
}
Aslında biz burada tanımladığımız bir harici üye değil tabii ki. Sadece üyelerini (View Sınıfı) işaretçi olarak tanımlamış olduk. Gerçi SDL ile uğraşıyorken işaretçiler havada uçuşuyordu ama aşağıdaki C örneğini çözene kadar bunu kullanmak hiç aklıma gelmemişti...:)
Alıntı:
> #include <stdio.h>
>
> char nullVar = '\0';
>
> char* find(char c, char* p) {
> while(*p != c) {
> if(*p == '\0') return &nullVar;
> ++p;
> }
> return p;
> }
>
> int main() {
> char a[6];
>
> sprintf(a, "C dili");
> printf("%s\n", a); // C dili
>
> *find('d', a) = 'D';
> printf("%s\n", a); // C Dili
>
> ++ *find('C', a);
> printf("%s\n", a); // D Dili
>
> -- *find('C', a); // nullVar sayesinde hata yok...
> printf("%s\n", a); // D Dili
>
> return 0;
> }
> ```
>
İşin ilginci bu örneği de D'de yapamıyorsunuz...:D
Belki eşdeğeri dilimler ile yapılabilirdi (ben denedim beceremedim!) ama işaretçileri bu şekilde kullanmak yasal olmayabilir. Yine de find() işlevi D'de de birebir çalıştığını söyeleyebilirim. Sadece dışarıya döndürdüğü adrese müdahale etmekte kısıtlamalarımız var.
Her ne olursa olsun D'yi seviyorum...
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]