<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Leckeres aus der IT-Welt &#187; Uncategorized</title>
	<atom:link href="http://georgwaechter.de/blog/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://georgwaechter.de/blog</link>
	<description>.NET, PHP, Software Engineering, Drupal und vieles mehr</description>
	<lastBuildDate>Wed, 24 Nov 2010 23:55:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>C# Konstrukt &#8216;using&#8217; selbst gebaut mit Scala</title>
		<link>http://georgwaechter.de/blog/2009/07/c-konstrukt-using-selbst-gebaut-mit-scala/</link>
		<comments>http://georgwaechter.de/blog/2009/07/c-konstrukt-using-selbst-gebaut-mit-scala/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 11:57:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://georgwaechter.de/blog/?p=440</guid>
		<description><![CDATA[Mit Scala ist es recht einfach Funktionen zu schreiben, die sich in der Verwendung wie Sprachkonstrukte anfühlen. Das kann man sehr gut nutzen um textuelle DSLs zu entwickeln. Ein Beispiel ist das Testframework ScalaTest mit dem man Tests folgendermaßen formulieren kann: map should (contain key ("one") and not contain value (10)) result should be => [...]]]></description>
			<content:encoded><![CDATA[<p>Mit <a href="http://www.scala-lang.org/">Scala </a>ist es recht einfach Funktionen zu schreiben, die sich in der Verwendung wie Sprachkonstrukte anfühlen. Das kann man sehr gut nutzen um textuelle <a href="http://de.wikipedia.org/wiki/Dom%C3%A4nenspezifische_Sprache">DSLs </a>zu entwickeln. Ein Beispiel ist das Testframework <a href="http://www.artima.com/scalatest/">ScalaTest</a> mit dem man Tests folgendermaßen formulieren kann:</p>
<pre lang="scala">map should (contain key ("one") and not contain value (10))
result should be => (0)
book should have (title ("Programming in Scala"))
tempFile should not be a ('directory)
quotient should be (1.0 plusOrMinus 0.2)</pre>
<p>Als kleine Demonstration zeige ich hier nun wie man das &#8216;using&#8217; Konstrukt aus C# in Scala nachahmen kann. Die Funktionsweise dieses Blocks ist simpel, aber immer wieder nützlich. Man übergibt einen Stream bzw. irgendeine Instanz, die <a href="http://msdn.microsoft.com/de-de/library/system.idisposable%28VS.80%29.aspx">IDisposable </a>implementiert, verwendet diese und das Schließen bzw. Zerstören der Instanz geschieht ganz von alleine.</p>
<pre lang="csharp">using (var file = File.CreateText("test.dat")
{
    file.WriteLine("C# is");
    file.WriteLine("great");
}</pre>
<p>Was wirklich passiert ist, dass der Compiler ein try finally Block erzeugt, der in jedem Fall .Dispose() aufruft, womit dann im Falle eines Streams auch automatisch .Close() zum Zuge kommt. Fangen wir mit der Scala-Übersetzung an. Eine erste Methode könnte eine simple Funktion höherer Ordnung in der folgenden Art sein:</p>
<pre lang="scala">val file = new PrintWriter("test.dat")
using (file, () => {
  file.println("scala is")
  file.append("great")
})

def using(stream: Closeable, operation: () => Unit) {
  try {
    operation
  } finally {
    stream.close()
  }
}</pre>
<p>Using erwartet den Stream sowie die auszuführende Funktion, die nichts erwartet und nichts zurückgibt (Unit entspricht praktisch void in C#). Wir können die Syntax noch weiter verbessern, indem wir den zweiten Parameter in einen By-Name-Parameter umschreiben:</p>
<pre lang="scala">def using(stream: Closeable, operation => Unit)</pre>
<p>Nun fehlen die zwei Klammern in der Signatur, was dazu führt, dass wir sie auch beim Aufrufen weglassen können:</p>
<pre lang="scala">using (file, { ... })</pre>
<p>Das kommt der Version aus C# schon recht nahe. Einen Unterschied können wir jedoch nicht verstecken &#8211; in Scala sind Variablendeklarationen keine Ausdrücke. Somit können wir sie z.B. nicht wie in C an eine Methode übergeben, sondern müssen die Variable im Voraus definieren und sie dann an using übergeben.<br />
Doch trotzdem gibt es hier noch Verbesserungsmöglichkeiten. Wir können using in eine partiell auswertbare Methode umwandeln, sodass using einen Parameter erwartet und als Ergebnis wieder eine Funktion zurück liefert, die nur noch die Operation als Argument bekommt. Das sieht dann so aus:</p>
<pre lang="scala">def using(stream: Closeable)(operation: => Unit)  { ... }</pre>
<p>Damit sind wir nunam Ziel angelangt. Wir können das using-Konstrukt fast wie in C# nutzen (in Scala können normale Klammern auch durch geschweifte ersetzt werden):</p>
<pre lang="scala">val file = new PrintWriter("test.dat")

using (file) {
  file.println("scala is")
  file.append("great")
}</pre>]]></content:encoded>
			<wfw:commentRss>http://georgwaechter.de/blog/2009/07/c-konstrukt-using-selbst-gebaut-mit-scala/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The power of Scala</title>
		<link>http://georgwaechter.de/blog/2009/07/the-power-of-scala/</link>
		<comments>http://georgwaechter.de/blog/2009/07/the-power-of-scala/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 01:21:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://georgwaechter.de/blog/?p=437</guid>
		<description><![CDATA[Seit einiger Zeit beschäftige ich mich in meiner Freizeit mit der nocht recht jungen Programmiersprache Scala, eine unglaublich flexible und mächtige Sprache, die geschickt funktionale und objekt-orientierte Paradigmen vermischt. Wer abseits des normalem OOP-Paradigma etwas neues lernen will, sollte sich diese Sprache auf jeden Fall genauer anschauen. Übrigens wird Scala nach Java Bytecode kompiliert und [...]]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit beschäftige ich mich in meiner Freizeit mit der nocht recht jungen Programmiersprache <a href="http://www.scala-lang.org/">Scala</a>, eine unglaublich flexible und mächtige Sprache, die geschickt <a href="http://de.wikipedia.org/wiki/Funktionale_Programmierung">funktionale </a>und objekt-orientierte Paradigmen vermischt. Wer abseits des normalem <a href="http://de.wikipedia.org/wiki/Objektorientierte_Programmierung">OOP</a>-Paradigma etwas neues lernen will, sollte sich diese Sprache auf jeden Fall genauer anschauen.</p>
<p>Übrigens wird Scala nach<a href="http://en.wikipedia.org/wiki/Java_bytecode"> Java Bytecode</a> kompiliert und ist somit praktisch kompatibel und gemeinsam einsetzbar mit allen bestehenden <a href="http://de.wikipedia.org/wiki/Java_%28Programmiersprache%29">Java</a>-Systemen. Ein Compiler für die <a href="http://en.wikipedia.org/wiki/Common_Language_Runtime">Common Language Runtime</a> ist auch in der Entwicklung, der Support für Java ist aber wesentlich besser.</p>
<p>Beim Lesen des Buchs &#8220;Programming in Scala&#8221; (welches übrigens ausgezeichnet geschrieben ist) sind mir erstmals die Unterschiede zwischen den Programmierparadigmen wirklich klar geworden. Umso interessanter ist es dann nach und nach zu sehen wie Scala beides fusioniert und dabei etwas neues schafft. Das erstaunlichste an Scala ist aber wie man selber zu einem Sprach-Kreatonist werden kann! Die Programmiersprache ist in ihrem Kern recht einfach, aber dennoch so flexibel, dass jeder die Sprache erweitern kann, um sie an die entsprechenden Bedürfnisse anzupassen.</p>
<p>Das beste Beispiel ist die Actors-Bibliothek zur Abstraktion der parallelen Ausführung von Programmcode. Eine Idee &#8211; ursprünglich aus der Sprache Erlang &#8211; die es mittlerweile fast in jede Sprache geschafft hat als ein normales Framework. Scala geht weiter und integriert nicht nur Funktionalität, sondern auch Syntax aus Erlang und schafft somit eine ganz natürliche Integration &#8211; so als wäre das Programmieren mit Actors schon immer Bestandteil der Sprache.</p>
<p>Ein paar schöne Code-Beispiele zu Actors-Bibliothek befinden sich direkt <a href="http://www.scala-lang.org/node/242">hier</a>.</p>
<p>Im nächsten Beitrag werde ich demonstrieren wie man das nützliche in C# bekannte using-Konstrukt nachbaut, um Streams etc. automatisch zu schließen.</p>]]></content:encoded>
			<wfw:commentRss>http://georgwaechter.de/blog/2009/07/the-power-of-scala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

