D (programmeertaal)

De programmeertaal D is een objectgeoriënteerde, imperatieve, multi-paradigma systeemprogrammeertaal. De D-taal is ontstaan als een re-engineering van C++, en de ontwerpdoelen van D proberen de prestaties van gecompileerde talen te combineren met de veiligheid en expressieve kracht van moderne dynamische talen. Inheemse D-code is doorgaans even snel als equivalente C++-code, terwijl ze korter en geheugenveiliger is.

 

Voorbeelden

Voorbeeld 1

Dit voorbeeldprogramma drukt zijn commandoregelargumenten af. De main-functie is het beginpunt van een D-programma, en args is een array van strings die de commandoregelargumenten voorstellen. Een string in D is een array van karakters, voorgesteld door char[] in D1, of immutable(char)[] in D2.

import std. stdio: writefln; void main(string[] args) {vooraf (i, arg; args) writefln("args[%d] = '%s'", i, arg); }

De foreach-instructie kan over elke willekeurige verzameling itereren. In dit geval produceert het een reeks indexen (i) en waarden (arg) uit de array args. De index i en de waarde arg hebben hun type afgeleid van het type van de array args.

Voorbeeld 2

Het volgende toont verschillende D-mogelijkheden en D-ontwerpafwegingen in een zeer kort programma. Het doorloopt de regels van een tekstbestand met de naam words.txt dat op elke regel een ander woord bevat, en drukt alle woorden af die anagrammen zijn van andere woorden.

import std. stdio, std. algoritme, std. range, std. string; void main() { dstring[][dstring] signs2words; foreach(dchar[] w; lines(File("words.txt")))     { w = w. chomp(). toLower(); immutable key = w. dup. sort(). release(). idup; signs2words[key] ~= w. idup; } foreach(words; signs2words) if(words. length > 1) writefln(words. join(" ")); }
  1. signs2words is een ingebouwde associatieve array die dstring (32-bit / char) sleutels mapt naar arrays van dstrings. Het is vergelijkbaar met defaultdict(list) in Python.
  2. lines(File()) levert op een luie manier lines op, met de newline. Deze moet dan worden gekopieerd met idup om een string te verkrijgen die kan worden gebruikt voor de associatieve arraywaarden (de eigenschap idup van arrays geeft een onveranderlijk duplicaat van de array terug, wat nodig is omdat het type dstring eigenlijk onveranderlijk(dchar)[] is). Ingebouwde associatieve arrays vereisen onveranderlijke sleutels.
  3. De ~= operator voegt een nieuwe dstring toe aan de waarden van de geassocieerde dynamische array.
  4. toLower, join en chomp zijn stringfuncties die in D kunnen worden gebruikt met een methode-syntaxis. De naam van zulke functies lijkt vaak sterk op die van Python-stringmethoden. De toLower converteert een string naar kleine letters, join(" ") voegt een array van strings samen tot een enkele string met een enkele spatie als scheidingsteken, en chomp verwijdert een newline van het einde van de string als er een aanwezig is.
  5. De sort is een std.algoritme functie die de array sorteert, waardoor een unieke handtekening ontstaat voor woorden die anagrammen van elkaar zijn. De methode release() op de retourwaarde van sort() is handig om de code als een enkele expressie te houden.
  6. De tweede foreach itereert op de waarden van de associatieve array, en kan het type woorden afleiden.
  7. sleutel wordt toegewezen aan een onveranderlijke variabele, wordt het type ervan afgeleid.
  8. UTF-32 dchar[] wordt gebruikt in plaats van normale UTF-8 char[] anders weigert sort() te sorteren. Er zijn efficiëntere manieren om dit programma te schrijven, die alleen UTF-8 gebruiken.
 

AlegsaOnline.com - 2020 / 2023 - License CC3