UHU-StartseiteInformatikTechnikenscalaMemosEnumerations
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:


Enumerations: Code

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



Aufruf

var r = new Record(Seq(Datum,Uhrzeit,Ereignis,ID))
r(Datum)="11.11.2009"
r(ID)=5



Beachtenswert finde ich zweierlei:
  1. Die selbstdefinierten symbolischen Namen integrieren sich wunderbar in den Quellcode
  2. den einzelnen Spalten lassen sich unterschiedliche Typen zuweisen (hier einmal eine Zeichenkette und einmal eine Zahl)


optimal sichtbar mit Firefox Formeln mit asciimath Druckversion