検索
連載

Kotlinとは――読み方、メリット、「Java」とのコード比較、実行までのチュートリアルAndroid Studioで始めるKotlin入門(1)(1/3 ページ)

Android Studio 3.0を使い、最近話題のプログラミング言語「Kotlin」の特徴を解説する連載。初回は、メリット、「Java」言語とのコード比較、Android Studioの環境構築、実行までのチュートリアルなど。

Share
Tweet
LINE
Hatena

 Android開発かいわいで最近話題に上ることが増えてきている、「Kotlin」というプログラミング言語をご存じでしょうか。

 Google I/O 2017のキーノートでは、AndroidチームがKotlinを公式にサポートするという発表がありました。また、最近リリースされたAndroid Studio 3.0では、Kotlin開発用のプラグインが最初から組み込まれているなど、注目を集めています。

 本連載「Android Studioで始めるKotlin入門」では、Android Studio 3.0を使い、Kotlin言語の特徴を解説していきます。

 なお本連載は、JavaやC言語など他のプログラミング言語について、ある程度知識がある方を対象としています。あらかじめご了承ください。

Kotlin(読み方「コトリン」)とは

 Kotlinは、Javaの統合開発環境であるIntelliJ IDEAで有名なJetBrainsが開発したオブジェクト指向プログラミング言語です。言語構文自体はJavaとは互換性がない独自方式ですが、コンパイルされたコードはJava VM(仮想マシン)上で動作するため、これまでのJava資産の多くを流用できるという特徴を持っています。

 なお、Java以外でJava VM上で動作する言語には、Kotlin以前にも表1のような言語が存在します。そのため、Java VMを基盤とする非Java言語はKotlinが初めてというわけではありません。

表1 Java VM上で動作するJava、Kotlin以外のプログラミング言語
言語名 特徴
JRuby RubyをJava VM上に移植したもの
Groovy Javaに近い記法が可能なスクリプト言語
Scala 関数型言語とオブジェクト指向言語の両方の特徴を持ったマルチパラダイムなプログラミング言語

 後発であるKotlinはScalaの影響も受けており、Javaでは書きづらかったり、冗長なコードになってしまったりするのを防ぐための糖衣構文(シンタックスシュガー)なども数多く搭載されています。

 また、KotlinはJavaなどと同じく静的型付けのオブジェクト指向言語であるため、動的型付け言語での型の扱いに違和感を覚えがちなJavaやC#などのプログラマーにとっても、比較的なじみやすい言語といえるかもしれません。

 KotlinはAndroid開発を主要なターゲットの1つとして開発されています。また、Android公式開発環境であるAndroid Studioは、Kotlinの開発元であるJetBrainsが開発しているIntelliJ IDEAからフォークしたプロダクトです。そのため、Kotlinのサポートが引き続き期待できることも、Android開発者がKotlin採用を検討する後押しになることでしょう。

コラム「Kotlinの動作環境についてのあれやこれや」

 本文で「KotlinをコンパイルしたコードはJava VM上で動作する」と書きましたが、これは厳密には正しくありません。「Kotlin for JavaScript」ではJavaScript実行環境で、「Kotlin/Native」ではWindows、macOS、Linux、iOS、Androidなどのネイティブ環境で、それぞれ仮想マシンを使わずに動作させることも可能です。また、KotlinをAndroid上で実行する場合に実行基盤となるのは、Java VMではなくAndroid RuntimeやDalvik VMです。

 とはいえ、通常の開発現場においては「Kotlinを使えば、Javaと同じようにAndroidアプリを開発できる」と考えておけばおおむね問題ないでしょう。


論よりコード! Kotlin言語の雰囲気を味わう

 それでは、論よりコード! 早速、簡単なKotlinのコードを見て、言語の雰囲気をつまみ食いしましょう。リスト1は有名な「FizzBuzz」をKotlinで書いたものです。なお、このサンプルについてはAndroid Studioではなく、次項で解説するコマンドラインツールでコンパイル、実行するものとなっています。

//main関数。関数定義はfunを使う
//クラスなしでいきなり関数を宣言可能
fun main(args:Array<String>) {
    //行末はセミコロンなし
    val message: String = "FizzBuzz start!"
    println(message)
    //for .. inを使える
    for(i in 1..100){
      var ret: String
      ret = fizzbuzz(i)
      println(ret)
    }
}
 
/* fizzbuzz処理を行う関数
   引数はInt、戻り値はString*/
fun fizzbuzz(value: Int): String{
    if(value % 15 == 0)
      return "FizzBuzz"
    //whenを使うと、条件をラムダ式で羅列できる
    return when {
      (value % 3 == 0) -> "Fizz"
      (value % 5 == 0) -> "Buzz"
      else -> value.toString()
    }
}
リスト1 FizzBuzz.kt

 言語の詳細は次回以降解説しますが、まずは雰囲気をつかむため、目立つ特徴を幾つか列挙してみましょう。

見た目はCライク

 ブロックが{}であり、Java、JavaScript、C#などのCライクな言語に見た目の雰囲気は似ていますので、そうした言語の経験者にとっては読み書きしやすいと感じることでしょう。また、//〜で行コメントを、/* 〜 */でブロックコメントを書けるのもCライクです。

行末のセミコロンが省略可能

 Cライクな言語に似ていると言いつつ、行末のセミコロンが省略可能なのは特徴的な点です。とはいえ、セミコロンを付けてもエラーは起きませんので、うっかり付けてしまっても問題ありません。大抵のKotlinのコードではセミコロンを省略していますので、本連載でもセミコロンは省略します。

クラスなしで関数を定義可能

 ここでは起動時に実行されるmain関数、処理する文字列を判定するfizzbuzz関数を定義していますが、まずクラスありきのJava、C#などとは異なり、クラスなしで関数を定義しています。この辺りはスクリプト言語っぽく感じる部分かもしれません。

型宣言がやや独特

 「型 変数名;」のように、型名を先に書くCやJavaなどと異なり、Kotlinでは「: データ型」のように後ろに型名を記す記法になっています。リスト1の関数の引数、戻り値や、変数宣言(val、varの行)などを見ると雰囲気がつかめるでしょう。なお、JavaScriptに静的型付け機能を加えたTypeScript言語も似たような記法になっています。

関数定義は「fun」

 Java、C#などには関数、メソッドを宣言する専用のキーワードがありませんが、Kotlinでは「fun」というキーワードを使って関数を定義します。JavaScriptのfunctionにいくらか似ていますね。

変数宣言に「var」と「val」がある

 「var」では書き換え可能な変数を宣言し、「val」では変更不可の変数を宣言します。

Android Studioを使わないKotlinの実行

 次節以降、Android Studioを使ったKotlin開発について解説しますが、コマンドライン環境からKotlinソースコードをコンパイルし、実行する方法についても簡単に解説しておきます。

 以下のURL「Working with the Command Line Compiler」では、幾つかの環境ごとにコマンドラインツールのインストール方法を確認できます。

 どの環境でも、GitHubのKotlinコンパイラアーカイブをダウンロードし、任意のディレクトリに展開することで、Kotlinコンパイラおよび実行コマンドを使用できます。Windows環境の場合はこの方法を使ってください。

 なおUNIX系環境の場合はJava系のパッケージマネージャである「SDKMAN」を使ったインストール方法があります。macOS環境の場合は、さらに「Homebrew」「MacPorts」によるインストール方法も同ページで解説されています。それぞれ環境に応じて必要なインストール処理を行ってください。

 コンパイルする際は下記のようにコマンドを打ちます。

> kotlinc {ソースファイル名} -include-runtime -d {JARファイル名}

 例えば前述のFizzBuzz.ktをコンパイルする場合は、下記のようになります。

> kotlinc FizzBuzz.kt -include-runtime -d FizzBuzz.jar

 実行する際は下記のようにコマンドを打ちます。

> kotlin {JARファイル名}

 あるいは、下記のようにしても構いません。

> java -jar {JARファイル名}

 前述のFizzBuzzサンプルであれば、下記のようにコマンドを打ちます。

> kotlin FizzBuzz.jar

 もしくは、下記のようにしても構いません。

> java -jar FizzBuzz.jar

 また、KotlinのREPL環境()も用意されており、kotlincコマンドを引数なしで実行することでREPL環境に入ります(リスト2)。

Read-Eval-Print-Loopの略。キーボードから入力したコードがその場で解釈、処理される対話型評価環境

C:\bin\dev\kotlinc\bin>kotlinc       ←引数なしでkotlincコマンド実行
11 14, 2017 1:26:51 午後 org.jline.utils.Log logr
警告: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)
Welcome to Kotlin version 1.1.51 (JRE 1.8.0_77-b03)
Type :help for help, :quit for quit  ←REPL環境起動
>>> val a: Int = 3                   ←その場で変数「a」を定義
>>> a + 2                            ←「a + 2」を評価させる
5                                    ←評価結果が表示される
>>>
リスト2 Kotlin REPL環境

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る