<?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>Mocna Kawa &#187; scala</title>
	<atom:link href="http://blog.mocna-kawa.com/category/scala/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mocna-kawa.com</link>
	<description>radosny blog o nowych technologiach</description>
	<lastBuildDate>Wed, 15 Dec 2010 13:49:56 +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>Garść linków do debaty o językach dynamicznych i Scali</title>
		<link>http://blog.mocna-kawa.com/2008/01/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/</link>
		<comments>http://blog.mocna-kawa.com/2008/01/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 20:28:19 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/2008/01/24/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/</guid>
		<description><![CDATA[Dziś dość króciutko. Tylko linki, ale za to bardzo smakowite. Can Dynamic Languages Scale? Notka na TheServerSide dotycząca niepowodzenia projektu Chandler wywołała bardzo ciekawą dyskusję. Treść niusa nie jest istotna, tylko komentarze. Znajdziemy tam wszystko: obrzucanie się błotem, argumenty ad personam, tezy niczym nie podparte, czyli genialną i kulturalną dyskusję . Uwaga! Występują tam celebryci [...]]]></description>
			<content:encoded><![CDATA[<p>
Dziś dość króciutko. Tylko linki, ale za to bardzo smakowite.</p>
<ul>
<li><a href="http://www.theserverside.com/news/thread.tss?thread_id=48180">Can Dynamic Languages Scale?</a><br />
Notka na TheServerSide dotycząca niepowodzenia projektu Chandler wywołała bardzo ciekawą dyskusję. Treść niusa nie jest istotna, tylko komentarze. Znajdziemy tam wszystko: obrzucanie się błotem, argumenty ad personam, tezy niczym nie podparte, czyli genialną i kulturalną dyskusję <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Uwaga! Występują tam celebryci ze światka developerskiego: Bill Burke i Cedric Beust. Nieprawdaż, że brakuje serwisu pudelek.developers.com? <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</li>
<li><a href="http://www.hacknot.info/hacknot/action/showEntry?eid=93">Invasion Of The Dynamic Language Weenies</a><br />
Dość dobra rozprawa o językach dynamicznych o bardzo prowokacyjnym tytule. Dobra lektura &#8211; tylko troszeczkę stronnicza <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Warto poświęcić trochę czasu na poczytanie odnośników z linkografii do wpisu.
</li>
<li><a href="http://www.ibm.com/developerworks/java/library/j-scala01228.html">The busy Java developer&#8217;s guide to Scala</a><br />
Tytuł mówi sam za siebie. Ted Neward, znany gawędziarz na wielu konferencjach, barwnym językiem opisuje pierwsze kroki ze Scalą. Miła czytanka.
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/01/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Poznajemy nowe języki: Scala, czyli jak wypisać elementy z listy</title>
		<link>http://blog.mocna-kawa.com/2007/12/poznajemy-nowe-jezyki-scala-czyli-jak-wypisac-elementy-z-listy/</link>
		<comments>http://blog.mocna-kawa.com/2007/12/poznajemy-nowe-jezyki-scala-czyli-jak-wypisac-elementy-z-listy/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 15:39:41 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/2007/12/12/poznajemy-nowe-jezyki-scala-czyli-jak-wypisac-elementy-z-listy/</guid>
		<description><![CDATA[Scala. Co to za język? Scala została sklasyfikowana jako język funkcyjny, obiektowy, wielo-paradygmatyczny (mam nadzieję, że dobrze tłumaczę), statycznie i silnie typowany, obecna implementacja bazuje na JVM, niedługo można się spodziwać implementacji na .NET, tak!, Scala działa na platformie Java, więc ma dostęp do całego ekosystemu bibliotek Javy, nietuzinkową postacią jest sam twórca języka Martin [...]]]></description>
			<content:encoded><![CDATA[<p><b>Scala.</b> Co to za język?</p>
<ul>
<li>Scala została sklasyfikowana jako język <a href="http://en.wikipedia.org/wiki/Functional_programming">funkcyjny</a>, <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">obiektowy</a>, <a href="http://en.wikipedia.org/wiki/Multi-paradigm_programming_language">wielo-paradygmatyczny</a> (mam nadzieję, że dobrze tłumaczę),</li>
<li><a href="http://en.wikipedia.org/wiki/Static_typing#Static_typing">statycznie</a> i <a href="http://en.wikipedia.org/wiki/Strong_typing">silnie</a> typowany,</li>
<li>obecna implementacja bazuje na <a href="http://en.wikipedia.org/wiki/JVM">JVM</a>, niedługo można się spodziwać implementacji na <a href="http://en.wikipedia.org/wiki/.NET_Framework">.NET</a>,</li>
<li>tak!, Scala działa na platformie Java, więc ma dostęp do całego ekosystemu bibliotek Javy,</li>
<li>nietuzinkową postacią jest sam twórca języka <a href="http://en.wikipedia.org/wiki/Martin_Odersky">Martin Odersky</a>, który jest współautorem obecnego kompilatora Javy oraz jest współprojektantem obecnych typów generycznych w Javie,</li>
<li>jest to młody język programowania i posiada wiele ciekawych własności, o których to będę pisał w kolejnych postach,</li>
<li>więcej: <a href="http://en.wikipedia.org/wiki/Scala_%28programming_language%29">Scala na Wikipedii</a>, <a href="http://www.scala-lang.org/">strona domowa Scali</a>, <a href="http://se-radio.net/podcast/2007-07/episode-62-martin-odersky-scala">wywiad z twórcą języka</a>.</li>
</ul>
<p>OK, wezmę na warsztat prostą czynność: wypisanie elementów z listy.<br />
Kod w Javie byłby następujący:</p>
<p>[Java]<br />
List<integer> lista = new ArrayList<integer>() {{<br />
   add(1); add(2); add(3); add(4);<br />
}};</p>
<p>for (Integer x : lista)<br />
    System.out.println(x);</p>
<p>// Można też tak, ale raczej nie bym nie polegał na metodzie toString()<br />
System.out.println(lista.toString());</p>
<p>// lub po prostu:<br />
System.out.println(lista);<br />
[/Java]</p>
<p>Dla odmiany w Ruby&#8217;im zrobilibyśmy to tak:</p>
<p>[Ruby]<br />
# tutaj akurat mamy tablicę<br />
lista = %w(1, 2, 3, 4)</p>
<p># żeby ładnie było to definiujmy println<br />
println = lambda { |x| puts x }</p>
<p>lista.each &#038;println<br />
[/Ruby]</p>
<p>Zobaczmy teraz, jak zrobilibyśmy to w Scali.</p>
<p>[Scala]<br />
val lista = List(1, 2, 3, 4)</p>
<p>lista.foreach((x: Int) => println(x))<br />
[/Scala]</p>
<p>Brzydko&#8230; idziemy dalej. Scala jest językiem funkcyjnym, który ma mechanizm <a href="http://en.wikipedia.org/wiki/Currying">currying</a>. Opuśćmy deklarację typu i nawiasy.</p>
<p>[Scala]<br />
lista.foreach(x => println(x))<br />
[/Scala]</p>
<p>Nadal brzydko&#8230; idziemy dalej. Co jest argumentem metody <code>foreach</code>? Sygnatura metody jest następująca:</p>
<p>[Scala]<br />
def foreach(f: A => Unit): Unit<br />
[/Scala]</p>
<p>Na potrzebę chwili traktujmy <code>Unit</code> tak samo jak <code>void</code>. Zatem argumentem <code>foreach</code> jest funkcja, która przyjmuje argument <code>A</code> (jakiś nieustalony typ, patrz: <a href="http://en.wikipedia.org/wiki/Currying">currying</a>) i zwraca <code>Unit</code>. Natomiast <code>println</code> jest zdefiniowany tak:</p>
<p>[Scala]<br />
def println(x: Any) = Console.println(x)<br />
[/Scala]</p>
<p>czyli bierze jakiś argument (nadal patrz: <a href="http://en.wikipedia.org/wiki/Currying">currying</a>, <a href="http://en.wikipedia.org/wiki/Higher-order_function">funkcje wyższego rzędu</a>) i zwraca <code>Unit</code>. Zatem typy się zgadzają. Zapiszmy to krócej:</p>
<p>[Scala]<br />
lista.foreach(println)<br />
[/Scala]</p>
<p>Już lepiej, ale można jeszcze lepiej <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Scala ma bardzo fajną własność, którą nigdzie wcześniej nie spotkałem. Mianowicie w Scali technicznie nie ma operatorów. Wyrażenie <code>1 + 2</code> jest tożsame z wywołaniem metody <code>1.+(2)</code>. Jeśli metoda przyjmuję tylko jeden parametr to można pominąć nawiasy oraz kropkę. Zatem:</p>
<p>[Scala]<br />
lista foreach println<br />
[/Scala]</p>
<p>Piękny zapis, nieprawdaż? <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  A czy twój ulubiony język zrobi to lepiej?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2007/12/poznajemy-nowe-jezyki-scala-czyli-jak-wypisac-elementy-z-listy/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
	</channel>
</rss>

