A Nice programozási nyelv

Sablonok

(Java generics: http://java.sun.com/docs/books/tutorial/java/generics/index.html)

Típusparaméterek használata

Az osztályok és a metódusok típusparaméterekkel rendelkezhetnek (típusváltozókkal paraméterezhetőek) NICE-ban, az egyszerű típusparaméterek szintaxisa a következő:

<Type1 t1, Type2 t2, ..., TypeN tn> [class | method]

ahol t1,..,tn típusváltozók lesznek, Type1,...,TypeN pedig az ezekre adott korlátozás (olyan típus, amely a típusváltozó legbővebb engedélyezett típusa). Egyszerű példa:

class LinkedList<T> implements Collection<T> { T head; LinkedList<T> tail; }

A fentieken kívül a paraméterekre relációs kikötések is megadhatóak, amelyek segítségével a megadott típusparaméterek egymáshoz való viszonyát lehet rögzíteni (pl.

<U,V | U <: V>
alak, amelynek jelentése bármely U,V osztály úgy, hogy az U osztály V leszármazottja).

Lehetőség van még az „alike” kulcsszó segítségével olyan metódusokat definiálni, amelyek az adott osztály, illetve annak altípusaira nézve egzakt típusazonosság szerint többféle törzzsel megvalósíthatóak. Ennek gyakorlati hasznára a legjobban az alábbi példa mutat rá:

class Foo { string value; alike copy(); // a copy fv minden Foo és abból származóra érvényes, de // külön ki kell fejteni } copy( #Foo f ) = new Foo(value : f.value); // funkcionális alakban megadott fv. class Bar extends Foo { int id; } copy( #Bar b ) = new Bar( value : b.value, id : generateNewID() ); // itt pedig a Bar-ra specializált verziót adtuk meg