summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillermo Ramos2012-05-08 17:41:55 +0200
committerGuillermo Ramos2012-05-08 17:41:55 +0200
commitbedac58408e4c6a701dd8065ed7a11277f5358e5 (patch)
tree7d136b49e25c536712429ffd05fe99c947865c61
parentb0ce25e6d3d77c18c958578fdbdae92654e46c93 (diff)
download7l-bedac58408e4c6a701dd8065ed7a11277f5358e5.tar.gz
[Scala] Día 3
-rw-r--r--scala/chores.scala8
-rw-r--r--scala/factorial.scala7
-rw-r--r--scala/kids.scala31
-rw-r--r--scala/movies.scala13
-rw-r--r--scala/sizer.scala45
5 files changed, 104 insertions, 0 deletions
diff --git a/scala/chores.scala b/scala/chores.scala
new file mode 100644
index 0000000..0e33b5f
--- /dev/null
+++ b/scala/chores.scala
@@ -0,0 +1,8 @@
+def doChore(chore:String):String = chore match {
+ case "clean dishes" => "scrub, dry"
+ case "cook dinner" => "chop, sizzle"
+ case _ => "whine, complain"
+}
+
+println(doChore("clean dishes"))
+println(doChore("mow lawn"))
diff --git a/scala/factorial.scala b/scala/factorial.scala
new file mode 100644
index 0000000..0cfbc0c
--- /dev/null
+++ b/scala/factorial.scala
@@ -0,0 +1,7 @@
+def factorial(n:Int):Int = n match {
+ case 0 => 1
+ case x if x > 0 => factorial(n-1) * n
+}
+
+println(factorial(3))
+println(factorial(0))
diff --git a/scala/kids.scala b/scala/kids.scala
new file mode 100644
index 0000000..590e742
--- /dev/null
+++ b/scala/kids.scala
@@ -0,0 +1,31 @@
+import scala.actors._
+import scala.actors.Actor._
+
+case object Poke
+case object Feed
+
+class Kid() extends Actor {
+ def act() {
+ loop {
+ react {
+ case Poke => {
+ println("Ow...")
+ println("Quit it...")
+ }
+ case Feed => {
+ println("Gurgle...")
+ println("Burp...")
+ }
+ }
+ }
+ }
+}
+
+val bart = new Kid().start
+val lisa = new Kid().start
+
+println("Ready to poke and feed...")
+bart ! Poke
+lisa ! Poke
+bart ! Feed
+lisa ! Feed
diff --git a/scala/movies.scala b/scala/movies.scala
new file mode 100644
index 0000000..d8b145d
--- /dev/null
+++ b/scala/movies.scala
@@ -0,0 +1,13 @@
+val movies = <movies>
+ <movie>The incredibles</movie>
+ <movie>WALL E</movie>
+ <short>Jack Jack Attack</short>
+ <short>Geri's Game</short>
+</movies>
+
+(movies \ "_").foreach { movie =>
+ movie match {
+ case <movie>{movieName}</movie> => println(movieName)
+ case <short>{shortName}</short> => println(shortName + " (short)")
+ }
+}
diff --git a/scala/sizer.scala b/scala/sizer.scala
new file mode 100644
index 0000000..6f60cc4
--- /dev/null
+++ b/scala/sizer.scala
@@ -0,0 +1,45 @@
+import scala.io._
+import scala.actors._
+import Actor._
+
+object PageLoader {
+ def getPageSize(url:String) = Source.fromURL(url, "ISO-8859-1").mkString.length
+}
+
+val urls = List("http://amazon.com",
+ "http://twitter.com",
+ "http://google.com",
+ "http://cnn.com")
+
+def timeMethod(method: () => Unit) = {
+ val start = System.nanoTime
+ method()
+ val end = System.nanoTime
+ println("Method took " + (end-start)/1000000000.0 + " seconds.")
+}
+
+def getPageSizeSequentially() = {
+ for (url <- urls) {
+ println("Size for " + url + ": " + PageLoader.getPageSize(url))
+ }
+}
+
+def getPageSizeConcurrently() = {
+ val caller = self
+
+ for (url <- urls) {
+ actor { caller ! (url, PageLoader.getPageSize(url)) }
+ }
+
+ for (i <- 1 to urls.size) {
+ receive {
+ case (url, size) =>
+ println("Size for " + url + ": " + size)
+ }
+ }
+}
+
+println("Sequential run:")
+timeMethod { getPageSizeSequentially }
+println("Concurrent run:")
+timeMethod { getPageSizeConcurrently }