Scala: Hello World!

Nowadays, there are many languages running on the Java Virtual Machine, but in the beginning, the JVM could run only compiled Java programs, now we have plenty full of new languages, some of them designed expressly for the JVM, others that had a version capable of running on it.

People is wondering which will be the Next Big JVM Language. There are many candidates who fight for being the chosen one. Scala, JRuby, Jython, Groovy, Clojure are among them.

Recently, a great book came to my hands, Programming in Scala. A comprehensive step-by-step guide, it’s co-authored by Martin Odersky, Lex Spoon and Bill Venners. Mr. Odersky is the creator of the Scala language and also the co-designer of Java generics. In this post, a Hello World example in Scala will be made.

The very first thing to do is download the Scala distribution, you can find it here. The last stable release is 2.8.0. Now the Scala interpreter is installed in our system. With this interpreter, our first Scala program can be done and executed.

Scala is an Object Oriented and a functional programming language. It can be executed within a Java code and vice versa. The semicolon at the end of each instruction is optional, so you don’t have to put it at the end of every sentence. It is less verbose than Java, thus some type declarations can be omitted. For instance, you can say:

var x = new HashMap[int, String]()

Instead of:

var x Map[int, String]() = new HashMap[int, String]()

These are only a few characteristics of Scala. Now,let’s continue with some glossary:

  • val: It’s a variable that could not be modified, it’s like a final variable in Java. Once assigned, it can’t be reassigned
  • var: It’s a variable, it can be modified
  • def: It defines a function
  • print and println: prints the passed the String to the standard output. It’s similar to System.out.println in Java
  • while: the instruction for loops
  • if: the instruction for deciding
  • (paramName1 : Type, paramName2 : Type => paramName1 + paramName2): also is the format of literal functions.
  • foreach (element => action) : the instruction for iterations
  • for (element <- elements): another instruction for iterations, element is a val not a var

Let’s put it all together. The first example is a simple Hello World!. Put the following code into a file named hello.scala

println(“Hello World!”)

Then from the OS prompt, execute:

$> scala hello.scala

The result will be:

Hello World!

Let’s make a more sophisticated sample. Definition of factorial function and execution with the first number typed in the standard input.

def factorial ( x : Int ) : Int = { if ( x == 0 ) 1 else x * factorial ( x - 1 ) } println(factorial(args(0).toInt))

And yet, another example. Capitalize the words typed in the standard input.

args.foreach(arg => print(arg.capitalize))

Executing this:

$> scala capitalize.scala hello world !

The output will be:

HelloWorld!

Advertisements

11 Responses

  1. the link doesn’t work!! ;)

  2. Fixed!

  3. Nice blog entry. I like it when people talk about real world scala instead of implementing the Lambda calculus with it.

  4. yap, we also want a second part of the article! :-)

  5. I’m working on it! As soon as I can I will do a second post.

  6. How is working with Scala and the more popular frameworks? Spring, Hibernate, JPA ?

  7. Today, I have read this article via DZone:

    http://blog.mysema.com/2010/09/querying-with-scala.html

    It seems interesting, I will take a look at this and I will write some posts about it.

    • WOW! QueryDSL is what I want for my project. Is totally typ e safe and doesn’t use Strings for creating queries!! Go ahead for that article!

  8. Hi. I am the maintainer of Querydsl. Thanks for your interest in Querydsl. Querydsl is primarily a Java framework which makes writing queries for JPA, JDO and SQL easier, but since 2.0 we have also a Scala frontend for it. The Scala support is not yet very mature, but we are commited to improve it.

    • Hi Timo,
      Thanks for leaving a comment.
      I think Querydsl is a very interesting project, I will follow the evolution of your framework.

  9. If you want to use Querydsl / Scala with SQL, here is a tutorial to get you started : http://www.dzone.com/links/sql_queries_in_scala.html

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: