2013-06-15 23 views
12

Eine wirklich interessante Konferenz wurde über D-Specific Design Patterns gegeben und in der D-Community dachten einige Leute, es könnte ein Ausgangspunkt für eine book Umgang mit effektiven Codierungstechniken sein. Andere argumentieren, dass es zu früh war, da nicht viele Menschen viel Erfahrung haben, die Autor (en) eines solchen Buchs werden eine voreingenommene/persönliche Wertschätzung über den Begriff der Effektivität haben. SO ist ein interaktiveres Medium (mit seinen Einschränkungen). Also, wenn wir darauf warten, dass "Effective D" herauskommt, wird es großartig sein, wenn wir einige (Tötungs-) Ratschläge/Techniken/Muster teilen können, damit D-Code schöner aussieht. Ich denke, es wird klarer, wenn eine Antwort:Effektive D: Best Practices und Design Patterns

  • eine einzigartige Technik aussetzen
  • im Wesentlichen ist ein Stück Code
  • kommentiert (wenn sie zu groß ist) ist nur ein Link zum Code (public Kern ...)
+1

Wahrscheinlich gefunden werden sollte stattdessen als „Community Wiki“ Frage erfolgen. –

+0

Gibt es eine Möglichkeit, die Frage "umzuwandeln"? – matovitch

+0

Vielleicht kann jemand mit ausreichend hohem Ruf es tun. –

Antwort

5

ich habe ein paar D Tipp Beiträge in meinem blog (123).

Hier ist eine: Testing With TypeTuple


Wenn Sie eine Funktion zu testen, ist es normalerweise eine gute Idee, es mit einer Reihe von verschiedenen Eingängen zu testen. Um dies zu tun, können Sie einfach eine for-Schleife über ein Array von Eingabewerten verwenden, aber was ist, wenn Ihre Eingabe ein Typ ist, wie es oft bei Vorlagencode ist?

Die Programmiersprache D können Sie eine TypeTuple iterieren, so alles, was Sie tun müssen, ist ein Tupel aller Arten erklären Sie testen möchten, und über sie in gewohnter Weise durchlaufen:

import std.typetuple; 
alias TypeTuple!(int, long, double) Types; 
foreach (T; Types) 
    test!T(); 

Sie könnten sich fragen, was dies kompiliert. Der Körper der Schleife variiert schließlich mit T, daher muss der generierte Code auch bei jeder Iteration variieren. Wie geht der Compiler damit um?

Die Antwort ist, dass die Schleife vollständig abgerollt ist. Der obige Code ist buchstäblich dasselbe wie:

test!int(); 
test!long(); 
test!double(); 

Aus diesem Grund könnten Sie ein Auge auf die Größe Ihres TypeTuples behalten möchten, Code aufblasen zu vermeiden.

+0

Tolle Tipps! Besonders die Frage nach dem Interesse der Verwendung von Bereichen im generischen Code am Beispiel des subtilen String-Typs. – matovitch