はじめてのKotlin

初めまして! アイスリーデザインのパートナーエンジニア、エリックです。22歳のスペイン人です^^

数年前は日本の声優たちに惚れてしまって「なんて素晴らしい声でなんて美しい言語を話しているのだろう…」と思いました。声優がきっかけで自分は日本語を勉強し始めて、日本の文化と日本人にも惚れてしまって「必ず日本に住む!」と決意しました。

日本語だけではなくて10歳のころからプログラミングが大好きで、自分のノートブックに「2017: プログラマー目指そう!」のような事を書きましたが、今見たらちょっと恥ずかしいですよねw

それでは、本題のKotlinについて、お話していきます!

1. Kotlinの紹介

先日の、5月17日はGoogle I/O Keynoteがあり、Kotlin (コトリン) はアンドロイドのファーストクラス言語としてサポートされます、という発表がありました。アンドロイドのコミュニティの中は、みんなとても大喜びでした。

何故、Kotlin (コトリン) はこんなに好かれる言語だと思いますか? Kotlinは一体、何が良いのでしょう?

この質問に答える前にKotlinについて、少し話をしましょう。

Kotlinは古くから親しまれている言語ではなく、とはいえごく最近の言語でもありません。実は、今年で6年目になります。2年前からKotlinの人気はとても高まっていて、Googleの発表で大人気になりましたね。

Kotlinはアンドロイドアプリを開発する言語だけではなく、フロントエンドもバックエンドにも利用可能、それに加え、現在はKotlin/Nativeが開発中で、iOSとmacOSのアプリを作成することもできるようになります。

それにより、Kotlinはどんな場面でも使用することができ、より一層注目のマルチプラットフォーム言語になっていますね。

僕もワクワク感がすごいです。Kotlinがドンドン進化していくのが待ち遠しい?!

それでは、Kotlinの好きな機能を紹介したいと思います。基本から始めていきますが、どんどんハードルを上げていきますよ! ついてきてくださいね!

2. Kotlinの基本

まずはKotlinの基本から話します。

変数(Class)と配列(Array)は言語を勉強する時、一番最初に学ぶことですよね。Kotlinは他の言語と同じく、基本的にその変数と配列を持ちますが、かなりユニークな特徴があります。特にJavaと比較するとしたら新鮮に思えるのではないでしょうか。

変数は、色んなタイプで表現することができますよね。例えば、Stringはテキスト用の為に、Int(eger)は整数用の為に、Bool(ean)は真・偽を表すタイプなど。

変数はタイプを決めても決めなくても宣言をします。また、次のように変数を宣言することができます:

var [変数名]: [変数タイプ] = [内容];

または

var [変数名] = [内容];

PHP、Javascriptに慣れている人は変数タイプをアサインしないままで利用できますが、Javaでは必ず情報のタイプを指定しなければなりません。

では、Kotlinでは変数タイプの指定はどうなっているのでしょう。Kotlinでは、変数の内容が既にある場合は変数タイプを指定しなくても良いのですが、変数の内容がない場合は、変数のタイプを指定する必要があります(例えば String)。

また、定数を宣言する為に”val”を使います。定数は読み取り専用で、情報は宣言した時しか挿入できません。

また、Javaと比べて変わったことはStringの使い方(テキストの表現方法)です。Kotlinではこのように書きます:

var example = "これは僕の例文です\n普通の例文ですね\n読みにくいかもしれません。";

※ \n は改行です。

このようなアウトプットになります。

ご覧の通り、他の言語とあんまり変わらないEscaped Stringという表現方法になっていますが、こんな方法もあります:

var example = """
|これは僕の例文です
|普通の例文ですね
|でも前と少し違って
|読みやすくなりましたね。
""".trimMargin();

これはRaw Stringと言います。テキストが読みやすくなりましたね!

三つの「 “」 で開いて、「 | 」 で改行を決めて、三つの「”」で閉じて、そして最後に「trimMargin()」を追加します。

もし最後にtrimMargin()を追加しなければ、このようなアウトプットになります:

trimMargin()はインデントを揃え改行を決める文字(“|”)を削除する指示です。”|”ではなくとも自分の好きな文字で改行を決めることが可能です。そのためには、trimMarginの引数として渡すことが必要です。

Escaped Stringを作る時はあるテキストに ” を入れたい場合は、以下の様にエスケープする必要があります。:

var example = "これは\"例文\"です";

ですが、Raw Stringではエスケープする必要がある字を自由に入れることができます:

var example = """
|これは僕の"例文"です
|普通の'例文'ですね
|でも前と少し違って
|読みやすくなりましたね *\(^o^)/*
""".trimMargin();

Stringの表現方法が改善したのはRaw Stringだけではありません、String Templatesというものもあります。

今までJavaでは色んな変数を繋げるためにこのような書き方をしなければなりませんでした:

int age = 22;
String name = "エリック";
String example = "僕の名前は " + name + " 、僕は " + age + " 歳です";

変数の前に空欄を入れなきゃいけないし、接続の + とStringの ” がたくさんあって少し読みにくいですよね。

KotlinにはPHPのような使い方があって、それがさきほど話したString Templatesです。

PHPと同じく変数の中に他の変数の情報を使いたい場合は、次のように書くことができます。

var age = 22;
var name = "エリック";
var example = "$name は $age 歳です";

まずは僕の名前をname、年齢をageという変数に保存して、$の文字で変数を呼びだします。

そうすると、このようなアウトプットになります。

この場合だと、変数のあとすぐに空欄を入れないとエラーになります。なので下記のように書くとより良い形となります。

var age = 22;
var name = "エリック";
var example = "${name}は${age}歳です、それに名前の文字の数は${name.length}字です";

${}を使うと変数の名前の後に空欄を入れる必要がないし、関数でも変数のプロパティでもStringの中に使えるようになります。

とても便利な作り方ですね!

弱点があるとすれば、$を普通の文字として使いたいときには ${‘$’} で書かなければなりません。

3. NULLの安全

Javaには巨大な敵がいます、「NullPointerException (NPE) 」というエラーです。Javaを使ったことがある人はわかると思いますが、使ったことがない人の為にざっくり説明します!

変数の内容が空っぽのままプロパティにアクセスしようとした場合はNPEが発生し、プログラムが動かなくなります。

コードの中の変数が空っぽになっても大丈夫なのか、大丈夫ではないなどの管理がなく、コードの全ての変数を覚えるのは相当難しいかもしれない…という場合のときはどうしたらよいのでしょう。特に一人ではないプロジェクトの場合ですね。

Kotlinはこのエラーを防ぐ為に、デベロッパーはもっと意識してNull可能か不可能を決める必要がある、としています。そこで出てくるのが、Nullable (Null可)とNon-Nullable(Null不可)変数です。

Null可変数は、”?”で宣言してください

var example: String? = null;

下記のコードは、「この変数はNullになる可能性がある」という宣言をしています。なのでそのままプロパティにアクセスする許可を得ることはできません。

example.length;

Kotlinから「エラーです!」と伝えてくれるNull可変数のプロパティにアクセスする為には、Ifの中に入れるか、”?”を使う必要があります。表記方法は下記のとおり。

example?.length;

この書き方では、Nullでない場合はexampleの文字の数を返します。内容がなければNullとなります。

このようなKotlinのNull Safetyは安心できますし、しっかり自分のコードがNullエラーにならないようにプログラマーにもっと意識してもらうことができると思います。もし、どうしてもNPEを出したいあなた(笑)、方法もあります、”!!”を使ったらよいのです。

example!!.length;

変数はJavaと同じになります。

そしてNullが安心して表現できるようにするために、最後にするべきことは安全なキャストを行うこと。あるタイプの変数を別のタイプに変更したい時、ClassCastExceptionになってしまう可能性があります。このようなエラーを管理する為にはまた”?”を利用します。このようなコードではキャストが行われる、または変数の内容をNullとして返します。

val numberExample: Int? = example as? Int;

変数のタイプはNull可で宣言されば、キャストのasに”?”をつけて安全なキャストができます。

この通り、KotlinではNullがとても便利、かつ変数が管理しやすいのです!

4. 最後に

Kotlinはいろんな言語の強みをとって、アンドロイドの開発で便利な機能を使えるようにしています。かつ安全な書き方を意識させ、Nullによるエラーが減って、より良いコードにすることができます。

さらに、Kotlinへ使い始めたい方にも優しい言語です。変換しながらJavaで書いたコードは今まで通り使えます。

今回は、基本的な事を紹介しましたが、次回はKotlinならではの関数と、機能の一つ、Lambdaを説明したいと思います。特にLambdaはとても大好きな機能です。最近はあまり使える機会がありませんでしたが、昔は作ったプロジェクトでものすごく救われました!

また次回をお楽しみに!

  • Contact

    お問い合わせ

    アプリやシステム開発、UIUX改善など、お客さまのビジネスを成功に導いたサポート実績が多数ございます。お気軽にお問い合わせください。

  • Download

    資料ダウンロード

    私たちのノウハウや業界別の事例など、提供するサービスについて詳細にまとめた資料になります。ぜひご一読ください。

  • Mail magazine

    メールマガジン

    UI/UXデザイン・システム内製化・DX推進についてのお役立ちメソッドや、限定イベントや最新事例などをお届けします。