Ero sivun ”D (ohjelmointikieli)” versioiden välillä
[arvioimaton versio] | [arvioimaton versio] |
Poistettu sisältö Lisätty sisältö
p korjauksia |
esimerkkejä |
||
Rivi 37:
== Esimerkkejä ==
===Hei maailma===
Tämä esimerkki kirjoittaa ruudulle sanat "Hei maailma!" ja sen jälkeen komentorivin argumentit.
Jokaisen D-ohjelman suorittaminen alkaa <tt>main</tt> funktiosta, ja <tt>args</tt>
on merkkijonojen taulukko, jossa komentorivin argumentit ovat. Argumentit ovat valinnaisia.
Merkkijonoa kuvataan D:ssä
<source lang="D">
{▼
writefln({{color|red|"Hei maailma!"}});▼
writefln({{color|red|2="args[%d] = '%s'"}}, i, a);▼
{{color|blue|return}} 0;▼
}▼
int main(string[] args)
<tt>foreach</tt> lausekkeella voidaan käydä läpi mikä tahansa kokoelma. Vakiotietotyypit tarjoavat oletustoiminnallisuuden, mutta iterointi voidaan tarvittaessa erikoistaa määritellyissä luokissa.▼
foreach(indeksi, arvo; args)
</source>
▲<tt>foreach</tt>
===Hajautustaulukot===
Esimerkki havainnollistaa hajautustaulujen käyttöä monimutkaisen tietorakenteen rakentamisessa.
<source lang="D">
import std.stdio; // tuo writefln()
int main(string[] args) {
// Määritellään hajautustaulu, jossa arvoina on taulukoita merkkijonoista ja
// avaimena merkkijono
string[] [string] säiliö;
// Lisätään säiliöön henkilöitä ja heille esineitä
säiliö["Tuomikki"] ~= "puukko";
säiliö["Airikka"] ~= "löylykauha";
säiliö["Tuomikki"] ~= "puhelin";
// Käydään läpi säiliön henkilöt
foreach (string henkilö, string[] esineet; säiliö)
kerro_montako_esinettä(henkilö, esineet);
return 0; // ohjelma onnistui
}
void kerro_montako_esinettä(string henkilö, string[] esineet) {
writefln(person, " kantaa ", items.length, " esinettä.");
}
</source>
===Metaohjelmointi===
Esimerkki näyttää, miten D mahdollistaa koodin suorittamisen käännösaikana.
<source lang="D">
// Malli, joka esittelee static if -lauseen käyttöä.
template Kertoma(ulong n) {
static if( n <= 1 )
const Kertoma = 1;
else
const Kertoma = n * Kertoma!(n-1);
}
// Vertailun vuoksi kertomafunktio
ulong kertoma(ulong n) {
if( n <= 1 )
return 1;
else
return n * kertoma(n-1);
}
// mallin instantiointi, paluuarvon evaluointi,
// tyypin päättely ja vakion asetus
const kert_7 = Kertoma!(7);
// käännösaikainen funktion suoritus,
// tyypin päättely ja vakion asetus
const kert_9 = kertoma(9);
// arvoja voidaan tulostaa näytölle käännösaikana ja muotoilla
// esimerkiksi printf-tyylisellä Format-mallilla
import std.metastrings;
pragma(msg, Format!("7! = %s", kert_7));
pragma(msg, Format!("9! = %s", kert_9));
// käännös voidaan keskeyttää esimerkiksi virhetilanteissa
static assert(kert_7 != 5040, "Laskualgoritmi on virheellinen");
</source>
== Aiheesta muualla ==
|