[D] Struktury w D

W języku C++ różnica pomiędzy klasą i strukturą sprowadza się w zasadzie do domyślnego kwalifikatora dostępu do składowych. W języku D różnica jest jednak głębsza

W D

  • struktury są typami wartości (value type) podczas gdy klasy są typami referencyjnymi (reference type).
  • brak dziedziczenia i interfejsów
  • pamięc domyślnie alokowana na stosie
struct ColorT( T ) {
	T r;
	T g;
	T b;
	T a;
};

alias ColorT!(int) Color;

struct Material {
	Color ambient;
	Color diffuse;
	Color specular;
};

Inicjalizacja struktur

Statyczna

static Material material = {
     ambient  : {255,0,0,255} ,
     diffuse   : {0,255,0,255},
     specular : {255,0,0,255}
};

Dynamiczna

Polega na użyciu istniejącego egzemplarza typu

Material material;
m.diffuse   = { r:255, g:127, b:10, a:255};
m.specular  = { r:127, g:127, b:0,  a:255};
m.ambient   = { r:255, g:255, b:0,  a:255};

Material material2 = material;

Przeciążony operator opCall

struct Material {
...
static Material opCall(Color amb, Color diff, Color spec) {
     Material m ;
     m.ambient = amb;
     m.specular= spec;
     m.diffuse  = diff;
     return m;
}
...
}

Material material = Material(ambientColor, diffuseColor, specularColor);

Structs & Unions

Java : pętla „for-each”

W Javie, począwszy od wersji 1.5.0 (Tiger) pojawiła się nowa postac pętli for

for (type var : array) {
     // body-of-loop
}
for (type var : iter) {
    // body-of-loop
}

Pętla foreach umożliwia iteracje po dwóch rodzajach obiektów

  • T[] (zwykle tablice dowolnego typu)
  • java.lang.Iterable

Interfejs Iterable<T> definuje tylko jedną metodę Iterator<T> iterator(). I chociaż ta konstukcja może sie wydawac tylko lukrem syntaktycznym,  jej wpływ na czytelnośc kodu jest czasami wprost niewyobrazalny.

Proof of the Riemann hypothesis

A mathematician has been invited to speak at a conference. His talk is announced as

Proof of the Riemann hypothesis.

When the conference actually takes place, he speaks about something completely different.
After his talk, a colleague asks him: «Did you find an error in your proof?»
He replies: «No – I never had one.»
«But why did you make this announcement?»
«That’s my standard precaution – in case I die on my way to the conference…»