|
Terminkalender
Sind kein Element der Sprache scala, sondern als Klasse in der Bibliothek realisiert. Daher können diese symbolischen Namen nur als Objekt in die Programmstruktur integriert werden:
object symbols extends Enumeration{
val Datum = Value("Datum")
val Uhrzeit = Value("Uhrzeit")
val Ereignis = Value("Ereignis")
val ID = Value("Ereignis")
}
| Datensätze für einen Terminkalender |
Spannend wird's z.B. wenn man so ein Objekt als Spalten für Datensätze in einer (simulierten) Datenbank verwenden möchte. Dann kann man z.B. einen Datensatz Termine derart anlegen:
import scala.collection.mutable._ // braucht's für die HashMap
class Record(s: Seq[symbols.Value]) extends HashMap[Int,Any]{
for (e <- s) put(e.id, null) // Anlegen der Schlüssel ohne Daten
def apply (s: symbols.Value) = get(s.id).get // get erzeugt ein Some und Some.get ergibt das Objekt
def update(s: symbols.Value, v: Any) = super.update(s.id,v)
}
- Zweck dieser Struktur ist die Zuordnung von Objekten zu symbolischen Namen
- eine HashMap ordnet Schlüsseln bestimmte Werte zu
- in diesem Fall wird Zahlen (Int) irgendein Objekt zugeordnet (Any)
- beim Erstellen der Struktur müssen die Symbole als Sequenz (Seq) übergeben werden
- die erste Zeile wird automatisch beim Erstellen ausgeführt:
dazu wird in der übergeordneten HashMap-Klasse zu jeder ID des jeweiligen Symbols ein null-Objekt angelegt.
- die apply-Funktion holt zu einem symbolischen Wert das zugehörige Objekt
- update ordnet dem entsprechenden Symbol ein neues Objekt zu
var r = new Record(Seq(Datum,Uhrzeit,Ereignis,ID))
r(Datum)="11.11.2009"
r(ID)=5
Beachtenswert finde ich zweierlei:
- Die selbstdefinierten symbolischen Namen integrieren sich wunderbar in den Quellcode
- den einzelnen Spalten lassen sich unterschiedliche Typen zuweisen (hier einmal eine Zeichenkette und einmal eine Zahl)
|