Urlaub -> Scala(7)
Scala
Heute habe ich mal ein wenig JDBC in Scala gemacht, grundsätzlich sieht ein Java JDBC-Zugriff so oder ähnlich aus:
Statement st = con.createStatement();
try {
ResultSet rs = st.executeQuuery("...");
try {
...
while (rs.next()) {
....
}
} finally {
rs.close();
}
} finally {
st.close();
}
Kategorie Heute habe ich mal ein wenig JDBC in Scala gemacht, grundsätzlich sieht ein Java JDBC-Zugriff so oder ähnlich aus:
Statement st = con.createStatement();
try {
ResultSet rs = st.executeQuuery("...");
try {
...
while (rs.next()) {
....
}
} finally {
rs.close();
}
} finally {
st.close();
}
In dem Java-Code sind zwei Strukturen zu
erkennen, welche mir zumindest schon öfters über den Weg gelaufen sind:
In scala ist es möglich seine eigenen Kontrollstrukturen zu basteln.
Fange ich mal mit dem Zweiten an, nennen wir Sie Boolean-Map (bmap), Diese soll eine Liste von einem bestimmten Typ zurückgeben und solange eine bestimmte Testfunktion true ist einen Funktion ausführen.
Sieht dann so aus ->
def bmapT(test: => Boolean) ( block: => T) : ListT = {
val ret = new ListBufferT
while(test) ret += block
ret.toList
}
Den Typ ListBuffer findet man in scala.collection.mutable.ListBuffer.
So jetzt zum ersten, den nenne ich in Anlehnung an C# using ->
def using[ A <: { def close() : Unit } , B](param : A)(f: A => B) : B =
try {
f(param)
} finally {
param.close()
}
Die Definition von using erst mal etwas vereinfacht -> using[ A , B] definiert, dass diese Methode zwei Parametertypen erwartet, A und B.
A unterliegt jedoch einer Einschränkung -> A <: { def close() : Unit }, welche definiert, dass A eine close-Methode enthalten muß!!!.
Als nächstes wird der Parameter param vom Typ A definiert und eine "Funktion" muß übergeben werden, welche aus einem "A" irgendwie ein "B" macht
In Aktion sieht das ganze dann ungefähr wie in der Datei JDBCTestFirst.scala.
Gruß JJR
P.S.: Am Besten gefällt mir die Methode simQuotes, welche die Summe über 5 Werte auf einmal zurückgibt. Warum gibt es diese Tuples nicht in C#
- try { doSomething } finally { x.close }
- while ( x.doSomething() ) { .... }
In scala ist es möglich seine eigenen Kontrollstrukturen zu basteln.
Fange ich mal mit dem Zweiten an, nennen wir Sie Boolean-Map (bmap), Diese soll eine Liste von einem bestimmten Typ zurückgeben und solange eine bestimmte Testfunktion true ist einen Funktion ausführen.
Sieht dann so aus ->
def bmapT(test: => Boolean) ( block: => T) : ListT = {
val ret = new ListBufferT
while(test) ret += block
ret.toList
}
Den Typ ListBuffer findet man in scala.collection.mutable.ListBuffer.
So jetzt zum ersten, den nenne ich in Anlehnung an C# using ->
def using[ A <: { def close() : Unit } , B](param : A)(f: A => B) : B =
try {
f(param)
} finally {
param.close()
}
Die Definition von using erst mal etwas vereinfacht -> using[ A , B] definiert, dass diese Methode zwei Parametertypen erwartet, A und B.
A unterliegt jedoch einer Einschränkung -> A <: { def close() : Unit }, welche definiert, dass A eine close-Methode enthalten muß!!!.
Als nächstes wird der Parameter param vom Typ A definiert und eine "Funktion" muß übergeben werden, welche aus einem "A" irgendwie ein "B" macht
In Aktion sieht das ganze dann ungefähr wie in der Datei JDBCTestFirst.scala.
Gruß JJR
P.S.: Am Besten gefällt mir die Methode simQuotes, welche die Summe über 5 Werte auf einmal zurückgibt. Warum gibt es diese Tuples nicht in C#