読者です 読者をやめる 読者になる 読者になる

Kotlin Advent Calendar 2012 (全部俺)

JavaプログラマのためのKotlin入門

4日目:Kotlinで世界に挨拶をしよう

f:id:ngsw_taro:20121203221007j:plain

初日にKotlinの概要を、2日目に機能ウォークスルーを、そして昨日3日目は開発環境についてお話ししました。今日からKotlinの文法や機能について紹介していきます。今日は最も簡単なKotlinプログラム、ということで毎度お馴染みのアレを軸にKotlinコードについて学びます。

Hello, world!

毎度お馴染みのアレと言ったら、そう、HelloWorldプログラムです。簡単で退屈だと思いがちですが、侮るなかれ。画面に何かを表示させるのは楽しいですし、ちょっとした達成感があります。それに簡素なコードであるからこそ見えてくるものがあります。

次のコードを書いて、世界に挨拶をしましょう。

package com.taroid.sample
fun main(args : Array<String>) {
  println("Hello, world!")
}

標準出力に「Hello, world!」と書き出されたら成功です。これであなたはKotlinプログラマ*1!やったね!!ひとしきり感動を噛み締めたら、Kotlinコードの特徴をひとつずつ見ていきましょう。

名前空間レベルに関数を定義できる

1行目にキーワードpackageがあるのがわかりますが、それはJavaと同様に名前空間の宣言を表します。そして次の行でいきなり関数 main の定義が開始されていることに注目してください。Kotlinでは名前空間レベルに関数や変数を定義することができます(もちろんクラスなども)。これは、どのクラスにも属さない関数や変数が許可されることを意味します。たいていの場合、Javaで言う staticメソッドの代わりとして働くでしょう。

ちなみに、Kotlinではpackage宣言さえすれば名前空間が定義されます。Javaのようにファイルシステム依存しません

また、このコードをコンパイルした結果得られるバイトコード上では、なんと関数 main はクラスに属しています。Kotlinでコードを書いているうちは意識する必要はありません。ここらへんの詳しい話は機会があったらします。

関数定義は fun で

関数定義のために用意されているキーワードは fun です。これはおそらく function(関数)の頭の3文字だと思います。これに相当するキーワードが、JavaScriptだとfunctionで、Goだとfuncです。たったの3文字は楽にタイプできますし、楽しい (fun)感じがしますね♪

それから、Kotlinプログラムのエントリポイントとなる関数は上記の関数 main のようなシグネチャをもつ関数です。関数についてはまた今度。

型は変数名の後に

args は変数名です。正確には仮引数名です。args の後にコロンをはさんでArray<String>と記述されていますが、これが args の型です。Javaと異なりKotlinでは変数の型は名前のに書きます。始めのうちは慣れないかも知れませんが、このおかげで型推論がより便利になるんです。詳細は明日(5日目)説明します。

文末にセミコロン不要

3行目には println("Hello, world!") という記述があります。予想通り、この文*2は標準出力にダブルクォートで囲った文字列を書く動作をします。その後にJavaではセミコロンを打っていましたが、Kotlinでは不要です(セミコロンがあってもいい)。

まとめと次回予告

今日はHelloWorldプログラムを通じて、Kotlinコードの特徴をちょっぴり学びました。関数は名前空間レベルに置くことができ必ずしもクラスに属する必要はありません。Javaとは違ってKotlinでは関数定義のためのキーワードが用意されています。変数の型は、その名前の後に記述します。文末にセミコロンは不要です。

明日は変数と型について理解を深めましょう。

日記

寒い...眠い...。寝たい...!

*1:Rubyist, Haskeller, Pythonistaとか様々なカッコイイ呼び方がありますが、Kotlinの場合はなんでしょうね〜。

*2:正確には式。Kotlinではすべての関数呼び出しは値を返すです。この場合、関数 println はUnit型の() という値を返します。