After a bumpy start with Scala on Day 1, I've moved onto the second day of Scala in Seven Languages in Seven Weeks.
Scala, Day 2: Thoughts
The second Scala chapter shifts gears to functional programming. Unfortunately, I was impatient on Day 1 and had already looked up all of these concepts (and some more) to build a Tic Tac Toe game. As a result, I breezed through the chapter.
On a side note, I was using Scala on a personal project and rewrote some Java code using Scala. As much as I complained yesterday about Scala's complexity, the slow compiler, and poor IDE support, I must admit one thing: the resulting code was noticeably cleaner, shorter, and easier to read.
The language is certainly not perfect, but I need to make sure I'm not missing the forrest for the trees: it's still likely a vastly superior alternative to Java.
Scala, Day 2: Problems
The functional programming problems in this chapter were extremely simple. I burned through them in a few minutes and present the code without further comment:
String foldLeft
Use foldLeft to compute the total size of a List of Strings.
Censorship
Write a Censor trait with a method that will replace "curse" words with "clean" alternatives. Read the curse words and alternatives from a file and store them in a Map.
On to day 3
Learn about pattern matching and actors in Scala, Day 3.
Scala, Day 2: Thoughts
The second Scala chapter shifts gears to functional programming. Unfortunately, I was impatient on Day 1 and had already looked up all of these concepts (and some more) to build a Tic Tac Toe game. As a result, I breezed through the chapter.
On a side note, I was using Scala on a personal project and rewrote some Java code using Scala. As much as I complained yesterday about Scala's complexity, the slow compiler, and poor IDE support, I must admit one thing: the resulting code was noticeably cleaner, shorter, and easier to read.
The language is certainly not perfect, but I need to make sure I'm not missing the forrest for the trees: it's still likely a vastly superior alternative to Java.
Scala, Day 2: Problems
The functional programming problems in this chapter were extremely simple. I burned through them in a few minutes and present the code without further comment:
String foldLeft
Use foldLeft to compute the total size of a List of Strings.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
val list = List("foo", "bar", "blah") | |
val totalLength = list.foldLeft(0)(_ + _.length) | |
println("The total length of " + list + " is " + totalLength) |
Censorship
Write a Censor trait with a method that will replace "curse" words with "clean" alternatives. Read the curse words and alternatives from a file and store them in a Map.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import collection.mutable.HashMap | |
trait Censor { | |
val curseWords = new HashMap[String, String]() | |
io.Source.fromFile("censor.txt").getLines().foreach { (line) => | |
val parts = line.split(": ") | |
curseWords += parts(0) -> parts(1) | |
} | |
def censor(s: String) = curseWords.foldLeft(s)((prev, curr) => prev.replaceAll(curr._1, curr._2)) | |
} | |
class Text(s: String) extends Censor { | |
def value = s | |
def censoredValue = censor(s) | |
} | |
val text = new Text("Shoot, I forgot my Darn traits again") | |
println("Original String: " + text.value) | |
println("Censored String: " + text.censoredValue) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Shoot: Pucky | |
Darn: Beans |
On to day 3
Learn about pattern matching and actors in Scala, Day 3.