プログラマに優しい現実指向JVM言語 Kotlin入門

第1回 Kotlinを勧める理由

この記事を読むのに必要な時間:およそ 3 分

JavaバイトコードとJavaScriptへコンパイル可能であること

すでに紹介したようにKotlinはJVM言語であり,コンパイラはJavaバイトコードを出力します。KotlinコードからJavaコードを呼び出せるだけではなく,その逆,つまりJavaコードからKotlinコードを呼び出すこともできます。リスト4はJavaの標準ライブラリをKotlinコードから呼び出して,テキストファイルの内容を表示する例です。

リスト4 Java標準ライブラリをKotlinから使う

import java.nio.file.Files
import java.nio.file.Paths

fun main(args: Array<String>) {
  val path = Paths.get("/memo.txt")
  val lines = Files.readAllLines(path)
  for (line in lines) {
    println(line)
  }
}

また,コンパイラはKotlinコードを入力として受け取り,JavaScriptコードを出力できます。ご希望とあればバックエンドとフロントエンド双方でKotlinを使った開発を行えます。

静的型付けであること

Kotlinはコンパイラ言語です。これは単にインタプリタ言語よりも実行速度が速いことを意味するだけではありません。コンパイラは,コンパイル時にソースコードの誤りを発見し,実行可能コードを生成しないので,プログラマはバグを早い段階で発見でき,安全なプログラムを作れます。

オブジェクト指向であること

Kotlinはクラスベースのオブジェクト指向言語です。Javaのように,定義されたクラスからインスタンスを生成できます。リスト5はクラスを定義し,そのインスタンスを生成するようなシンプルな例です。すでにオブジェクト指向言語を習得されている人は馴染みやすい文法だと感じるでしょう。

リスト5 Userクラスのインスタンスを生成して使う

// Userクラスの定義
class User {
  // プロパティ
  var id: Long = 0
  var name: String = ""

  // メソッドのオーバライド
  override fun toString(): String {
    return "name=" + name
  }
}

fun main(args: Array<String>) {
  // Userインスタンス生成
  // newのようなキーワードは不要
  val user = User()
  user.id = 12345
  user.name = "Taro"
  println(user.toString()) // => name=Taro
}

KotlinにはJavaと異なりプリミティブ型はなく,すべてがオブジェクトです。また,プロパティやトレイト,オブジェクト宣言などJavaにはない便利な機能が提供されています。

クロージャの例

Kotlinには第一級オブジェクトとしての関数があります。つまり関数をほかの値と同じように関数の引数として渡したり,戻り値として受け取ったりできます。これにより,より粒度の小さい単位で関数の再利用が可能になり,抽象的なプログラミングが可能になります。これがKotlinの簡潔さを,実現しているしくみの1つです。

Kotlinの標準ライブラリが提供するコレクション操作APIの例をリスト6に示します。

リスト6 関数を引数として渡してリストを操作する

// 整数のリストを生成
val list = listOf(3, 5, 2, 7, 4)
println(list) // => [3, 5, 2, 7, 4]

// 各要素を2倍にしたリストを生成
val twice = list.map { e -> e * 2 }
println(twice) // => [6, 10, 4, 14, 8]

// 偶数の要素のみにフィルタリングしたリストを生成
val even = list.filter { e -> e % 2 == 0 }
println(even) // => [2, 4]

また,関数はクロージャ(closure・注3でもあります。クロージャとは,内部で参照する以外の変数を外部から取り込んでいる関数のことです。コードを交えて説明したほうが理解しやすいと思いますので,クロージャの詳細説明は次回以降に譲ります。

注3)
「締め切り」のように直訳される英単語です。

まとめ

今回はKotlinの紹介として,概要と特徴,簡単な文法を取り上げました。KotlinはJetBrains発のオープンソースJVM言語です。その機能や文法は簡潔さと安全性を兼ね備えています。オブジェクト指向,クロージャ,型安全など,モダンな言語にはあってほしい機能はひととおり備えています。とくにNULL安全はユニークな機構です。

次回は開発環境の準備と,プログラミングの例としてFizzBuzzを行います。

Software Design

本誌最新号をチェック!
Software Design 2017年8月号

2017年7月18日発売
B5判/184ページ
定価(本体1,220円+税)

  • 第1特集

    私も機械学習エンジニアになりたい!
    先端Web企業の取り組み方は?
  • 第2特集

    プレゼンテーション技術力の高め方
    エンジニアのためのうけるプレゼン・すべるプレゼン
  • 一般記事
    pixivが「Pawoo」を爆速リリースした理由
    「Mastodon」旋風からわかるSNSの未来
  • 一般記事
    [短期集中連載]人工知能時代のLispのススメ【2】
    Lispは人工知能と関数型の先祖! オブジェクト指向,再帰,ラムダ式を学ぼう!

著者プロフィール

長澤太郎(ながさわたろう)

早稲田大学情報理工学科を2012年に卒業。同年入社したメーカー系SIerを経て,2013年にエムスリー株式会社へ入社。以来,世界の医療を変革するためソフトウェアエンジニアとして従事。

日本Kotlinユーザグループ代表,日本Javaユーザグループ幹事を務める。国内初となるKotlin入門書「Kotlinスタートブック」(リックテレコム)の著者。

ビールとディズニーが大好き。

コメント

コメントの記入