Android Studio 3.0を使い、最近話題のプログラミング言語「Kotlin」の特徴を解説する連載。初回は、メリット、「Java」言語とのコード比較、Android Studioの環境構築、実行までのチュートリアルなど。
Android開発かいわいで最近話題に上ることが増えてきている、「Kotlin」というプログラミング言語をご存じでしょうか。
Google I/O 2017のキーノートでは、AndroidチームがKotlinを公式にサポートするという発表がありました。また、最近リリースされたAndroid Studio 3.0では、Kotlin開発用のプラグインが最初から組み込まれているなど、注目を集めています。
本連載「Android Studioで始めるKotlin入門」では、Android Studio 3.0を使い、Kotlin言語の特徴を解説していきます。
なお本連載は、JavaやC言語など他のプログラミング言語について、ある程度知識がある方を対象としています。あらかじめご了承ください。
Kotlinは、Javaの統合開発環境であるIntelliJ IDEAで有名なJetBrainsが開発したオブジェクト指向プログラミング言語です。言語構文自体はJavaとは互換性がない独自方式ですが、コンパイルされたコードはJava VM(仮想マシン)上で動作するため、これまでのJava資産の多くを流用できるという特徴を持っています。
なお、Java以外でJava VM上で動作する言語には、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をコンパイルしたコードは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のコードを見て、言語の雰囲気をつまみ食いしましょう。リスト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() } }
言語の詳細は次回以降解説しますが、まずは雰囲気をつかむため、目立つ特徴を幾つか列挙してみましょう。
ブロックが{}であり、Java、JavaScript、C#などのCライクな言語に見た目の雰囲気は似ていますので、そうした言語の経験者にとっては読み書きしやすいと感じることでしょう。また、//〜で行コメントを、/* 〜 */でブロックコメントを書けるのもCライクです。
Cライクな言語に似ていると言いつつ、行末のセミコロンが省略可能なのは特徴的な点です。とはいえ、セミコロンを付けてもエラーは起きませんので、うっかり付けてしまっても問題ありません。大抵のKotlinのコードではセミコロンを省略していますので、本連載でもセミコロンは省略します。
ここでは起動時に実行されるmain関数、処理する文字列を判定するfizzbuzz関数を定義していますが、まずクラスありきのJava、C#などとは異なり、クラスなしで関数を定義しています。この辺りはスクリプト言語っぽく感じる部分かもしれません。
「型 変数名;」のように、型名を先に書くCやJavaなどと異なり、Kotlinでは「: データ型」のように後ろに型名を記す記法になっています。リスト1の関数の引数、戻り値や、変数宣言(val、varの行)などを見ると雰囲気がつかめるでしょう。なお、JavaScriptに静的型付け機能を加えたTypeScript言語も似たような記法になっています。
Java、C#などには関数、メソッドを宣言する専用のキーワードがありませんが、Kotlinでは「fun」というキーワードを使って関数を定義します。JavaScriptのfunctionにいくらか似ていますね。
「var」では書き換え可能な変数を宣言し、「val」では変更不可の変数を宣言します。
次節以降、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 ←評価結果が表示される >>>
Copyright © ITmedia, Inc. All Rights Reserved.