Dart (ohjelmointikieli)

**Dart** on Googlen kehittämä ohjelmointikieli, joka on suunniteltu web-sovellusten tekemiseen. Se julkistettiin 10. lokakuuta 2011 käydyssä GOTO-konferenssissa Aarhusissa.

Dart on vaihtoehto JavaScriptille.
Dartin suunnittelutavoitteina olivat:
* rakenteellinen mutta joustava kieli web-kehitykseen
* tuttu ja luonnollinen opeteltava ohjelmoijille
* korkea suorituskyky

Kieli suunniteltiin valinnaiselle tyyppijärjestelmälle, jolloin pienissä projekteissa ei tarvitse käyttää tyypitystä, mutta tyypitys on saatavilla suurien projektien tarpeisiin.
Kieli suunniteltiin suoritettavaksi joko suoraan virtuaalikoneessa tai käännettynä JavaScriptiksi, jolloin sitä voidaan suorittaa verkkoselaimissa.

Dart-kielestä on julkaistu standardi ECMA-408.

## Esimerkki

```dart
main() {
  print('Hello, Dart!');
}
```


Muuttujat voidaan määritellä kertomatta tyyppiä, jolloin sen tyyppi *päätellään* sille annetusta arvosta:

```dart
void printInteger(int aNumber) {
  print('The number is $aNumber.'); // tulosta arvo
}

// ohjelman suoritus alkaa main()-funktiosta
void main() {
  var number = 42; // määrittele ja alusta muuttuja
  printInteger(number); // kutsu funktiota
}
```


## Ominaisuudet
Dart tukee olio-ohjelmointia ja tukee luokkia sekä yksinkertaista perintää. Dart on valinnaisesti tyypitetty ja tukee geneeristä ohjelmointia. 

Dart tukee staattista tyypitystä (tyyppimerkinnät muuttujien määrittelyissä ja funktioiden paluutyypeissä) ja rajoissa. Staattiset tyypit tarkistetaan kun ohjelmaa suoritetaan "tarkistetussa" moodissa eikä niillä ole vaikutusta "tuotantomoodissa": staattiset tyypit ovat käytössä vain ja ainoastaan (jos ja vain jos) suoritetaan tarkistetussa moodissa.
Dart voi päätellä tyypin ja voi käyttää dynaamista tyypitystä ajonaikaiseen tarkistukseen.

Dart tukee poikkeuksien heittämistä ja käsittelyä.

### Alustusarvot
Muuttujat, joiden arvo voi olla null (*nullable*) ovat oletuksena `null`. Muun tyyppiset muuttujat (*non-nullable*) on asettava nollaksi. Muuttujille, joiden arvo voi olla `null` tyypin yhteydessä käytetään kysymysmerkkiä:

```dart
int? aNullableInt = null;
```


`late`-määrityksellä alustamattoman muuttujan käyttö antaa virheen kun sitä käytetään ensimmäisen kerran. `late` käytetään "laiskaan alustukseen" ja kertomaan ei-null tyyppiselle muuttujalle että sen arvo alustetaan esittelyn jälkeen.


```dart
late String description;

void main() {
  description = 'Feijoada!';
  print(description);
}
```


Dartissa on `null` arvojen kanssa käyttöön erityiset sijoitus- ja vertailuoperaattorit `??` ja `??=`.

Kysymysmerkkiä (`?`) ja huutomerkkiä (`!`) käytetään *nullable*-tyyppien käsittelyyn erityistarkoituksella.

### Vakiot
Muuttujat, joiden arvo ei muutu alustamisen jälkeen (arvo pysyy vakiona) voidaan määrittää `final` ja `const` -määrityksillä: `const` on käännöaikainen vakio ja `final` voidaan asettaa vain kerran (`const` on implisiittisesti myös `final`).


```dart
const bar = 1000000; // tyyppi päätelty automaattisesti
const double atm = 1.01325 * bar; // vakio ja määritelty tyyppi
```


### Funktiot
Funktioille on käytettävissä "oikotie" kun sen sisältö on vain yksi lauseke:

```dart
bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

// voidaan kirjoittaa muodossa:
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
```


### Parametrit
Parametrit voivat olla *sijainninmukaisia* tai *nimettyjä*.
Parametrit voivat olla valinnaisia jos niitä ei ole määritelty vaadituiksi.

```dart
void enableFlags({bool? bold, bool? hidden}) {...}
```


Funktiokutsussa argumentit asetetaan nimen avulla:

```dart
enableFlags(bold: true, hidden: false);
```


Parametrit voidaan asettaa vaadituiksi `required` avainsanalla, jolloin puuttuva parametri aiheuttaa virheen. Parametreille voi määritellä oletusarvoja.

## Käyttökohteet
Muun muassa Googlen Flutter käyttöliittymäkirjasto käyttää Dartia. Dartista tulevat sekä kieli että ajonaikainen ympäristö Flutterille. Dart tukee ajonaikaista kääntämistä (JIT) ja etukäteen kääntämistä (, AOT).

## Lähteet

## Aiheesta muualla
* Virallinen sivusto