D (ohjelmointikieli)

D-ohjelmointikieli on oliosuuntautunut, imperatiivinen, moniparadigmainen järjestelmäohjelmointikieli. D-kieli on syntynyt C++:n uudelleensuunnitteluna, ja D:n suunnittelutavoitteet pyrkivät yhdistämään käännettyjen kielten suorituskyvyn ja nykyaikaisten dynaamisten kielten turvallisuuden ja ilmaisuvoiman. D-koodi on yleisesti yhtä nopeaa kuin vastaava C++-koodi, mutta samalla lyhyempää ja muistiturvallisempaa.

 

Esimerkkejä

Esimerkki 1

Tämä esimerkkiohjelma tulostaa komentoriviargumentit. Main-funktio on D-ohjelman aloituskohta, ja args on joukko merkkijonoja, jotka edustavat komentoriviargumentteja. D:ssä merkkijono on merkkijono, jota D1:ssä edustaa char[] ja D2:ssa immutable(char)[].

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

foreach-lause voi iteroida mitä tahansa kokoelmaa. Tässä tapauksessa se tuottaa indeksin (i) ja arvon (arg) sarjan args. Indeksin i ja arvon arg tyyppi on johdettu array argsin tyypistä.

Esimerkki 2

Seuraavassa esitellään useita D-ominaisuuksia ja D-suunnittelun kompromisseja hyvin lyhyessä ohjelmassa. Se käy läpi words.txt-nimisen tekstitiedoston rivit, joissa on eri sana jokaisella rivillä, ja tulostaa kaikki sanat, jotka ovat muiden sanojen anagrammeja.

import std. stdio, std. algorithm, 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 on sisäänrakennettu assosiatiivinen matriisi, joka yhdistää dstring-avaimet (32-bittiset / char-avaimet) dstring-matriiseihin. Se on samanlainen kuin defaultdict(list) Pythonissa.
  2. lines(Tiedosto()) tuottaa rivit laiskasti, rivinvaihdon kanssa. Sen jälkeen se on kopioitava idup-ominaisuudella, jotta saadaan merkkijono, jota käytetään assosiatiivisen array-joukon arvoina (arrayjen idup-ominaisuus palauttaa muuttumattoman duplikaatin arraysta, mikä on tarpeen, koska dstring-tyyppi on itse asiassa immutable(dchar)[]). Sisäänrakennetut assosiatiiviset matriisit vaativat muuttumattomat avaimet.
  3. Operaattori ~= liittää uuden dstringin assosioituneen dynaamisen array-määritteen arvoihin.
  4. toLower, join ja chomp ovat merkkijonofunktioita, joita D sallii käyttää metodisyntaksin kanssa. Tällaisten funktioiden nimi on usein hyvin samankaltainen kuin Pythonin merkkijonometodien. ToLower muuntaa merkkijonon pieneksi, join(" ") yhdistää merkkijonojen joukon yhdeksi merkkijonoksi käyttäen erotinmerkkinä yhtä välilyöntiä, ja chomp poistaa merkkijonon lopusta rivinvaihdon, jos sellainen on olemassa.
  5. Sort on std.algorithm-funktio, joka lajittelee joukon paikallaan ja luo ainutlaatuisen allekirjoituksen sanoille, jotka ovat toistensa anagrammeja. Sort():n paluuarvon release()-metodi on kätevä, jotta koodi pysyy yhtenä lausekkeena.
  6. Toinen foreach iteroi assosiatiivisen matriisin arvoja, ja se pystyy päättelemään sanojen tyypin.
  7. avain annetaan muuttumattomalle muuttujalle, sen tyyppi päätellään.
  8. UTF-32 dchar[] käytetään normaalin UTF-8 char[]:n sijasta, muuten sort() kieltäytyy lajittelemasta sitä. On olemassa tehokkaampia tapoja kirjoittaa tämä ohjelma, jotka käyttävät vain UTF-8:aa.
 

AlegsaOnline.com - 2020 / 2023 - License CC3