DX

【Kotlin】はじめてのKotlin

目次

1. はじめに
2. Kotlinとは
3. Kotlinの良さについて
 3-1. 簡潔に書ける
 3-2. 安全である
 3-3. 相互運用性・互換性に優れている
4. 基本的な構文
 4-1. 変数の宣言、定数の宣言
 4-2. nullとNullable型
 4-3. if式
 4-4. when式
 4-5. forループ
 4-6. 関数
5. IntelliJでKotlinを書いてみよう
 5-1. IntelliJとは
 5-2. IntelliJでKotlinを書いてみよう
6. まとめ

1. はじめに

こんにちは!
株式会社エム・フィールドのエンジニアリングソリューション事業部に所属しているもぎもぎです。

好きな色は、「赤」です。
これは、私が推している某女性アイドルグループの推しのイメージカラーです!笑
2018年に4人組になったアイドルグループと言ったら大体分かっちゃいますかね。。笑

早速ですが、「Kotlin」という言語をご存じでしょうか?。KotlinよりもJavaの普及率の方が高く、利用場面が少ないという現状があるため、ご存じでない方もいらっしゃるかと思います。
実際に、プログラミング言語ランキングを見てみてもKotlinは10位にも入っていません。

【2020年】プログラミング言語ランキング!日本と世界で人気な言語を紹介!

しかし、KotlinはJavaとの互換性を持ち、以下で記載されているように開発者増加数が最も高く、今後も利用場面が徐々に増えていくことが予想されます。

Kotlinは過去2年間の開発者数増加率がもっとも高かった言語で、開発者は110万人増えた。これはおそらく、Googleがこの言語を「Android」の公式アプリ開発言語としているためだろう。

(引用元:プログラミング言語、Kotlinの開発者数が高い増加率–JavaScriptはトップ維持

そんなKotlinについて知っていただくきっかけや学習のお力になれたらと思い、この記事を作成しました。
今回は、Kotlinの良さや基本的な構文などについて紹介していくので、よかったら読んでみてください!

2. Kotlinとは

  • 2011年にJetBrains社が開発したオブジェクト指向言語Javaを簡潔かつ安全になるように改良を加えた産業利用向けの汎用言語としてリリースされた。
  • Javaと仮想マシン上で動作し、文法などもJavaに近い。
  • 2017年にGoogleがKotlinをAndroidアプリ開発言語に選定した。
    今波に乗っている開発言語

3. Kotlinの良さについて

3-1. 簡潔に書ける

例えば…

  • セミコロン「;」の記載が不要
  • 変数の型の宣言を省略することができる
  • Javaではgetterやsetter等を記載していたデータを扱うクラスもKotlinで書くと1行で書くことが出来る

など他にもKotlinならではの書き方がまだまだあります!

Java(データを扱うクラス)

public class Sample {
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

Kotlin(data classを使用)

data class Sample(val message: String)

3-2. 安全である

基本的にnullは許容されていないため、NullPointerExceptionがほとんど起こらない

3-3. 相互運用性・互換性に優れている

Javaとの完全な互換性がある
Javaのコードの中にKotlinのコードを書くことができる(逆も可)

4. 基本的な構文

4-1. 変数の宣言、定数の宣言

変数を宣言するためには、var命令を用いる

var 変数名: (変数の型) = 初期値

var n: int = 0

初期値があればデータ型を省略することもできる(型推定・型推論)
以下のように書いてもint型の変数として定義される
浮動小数点はDouble型として定義される
※初期値とデータ型の両方を省略することはできない

var n = 0

変数に任意の型を定義したい場合は、Any型を指定する
※lengthメソッドなどAny型がメンバに持たないメソッドを使用したい場合は、型チェックを行ってから使用する(詳細は、4-3のスマートキャスト

var n: Any
n = 0
n = "Kotlin"

定数を宣言するためには、val命令を用いる

val 変数名 (変数の型) = 初期値

定数のため、再代入ができない

val n = 0
n = 1

結果
 エラー

4-2. nullとNullable型

Java:明示的に初期化しない限りnullが初期値になる
   →NullPointerExceptionが起こることがある
Kotlin:nullを許容しないように作られている

nullを許容したいときは、型名の後ろに「?」を付ける(Nullable型、null許容型)

// エラーパターン
var n: String = "sample"
n = null


// OKパターン
var n: String? = "sample"
n = null

※非null型をNullable型に代入すると暗黙的な型変換が行われる
 aとbは同値だが、同じオブジェクトではない

var a: Int = 0
var b: Int? = a

※Nullable型を非null型に代入することはできない
 →代入したい場合は、「Any?」型に代入をする

var a: Int? = 0
var b: Any? = a

※Nullable型のメンバにアクセスする際には、「?.(セーフコール演算子)」を使う

var n: String? = "sample"
println(n?.length)

結果
 6

4-3. if式

Kotlinにおいて、「if」は「式」として扱うことが出来るため、値を返すことができる
※ifを式として用いた場合は、何らかの値を返す必要があるため、elseが必須
 (elseを省略するとコンパイル時にエラーが発生する)

var n = 0
var resultMsg = if (n <= -1) {
    "nは0より小さいです"
} else if (n == 0) {
    "nは0です"
} else {
    "nは0より大きいです"
}
println(resultMsg)

結果
 nは0です

処理を一文しか書かない場合は、{}を省略することもできる

var n = 0
var resultMsg = if (n <= -1) "nは0より小さいです" else if (n == 0) "nは0です" else  "nは0より大きいです"

チェックする変数の型で処理を分岐させる場合は、is演算子を使用する

val obj : Any = "sample"
if (obj is String) {
    println("文字数は、${obj.length}です")
} else {
    println("String型ではない型です")
}

結果
 文字数は、6です

スマートキャスト
型チェックが行われた後のブロックでは、該当する変数をその型として扱うことができる

4-4. when式

when式もif式と同様に「式」として扱うことが出来る
引数を取らずに宣言すれば、if式の代替として使用することもできる

when (変数/式) {
条件1 -> 条件1を満たしたときの処理
条件2 -> 条件2を満たしたときの処理
条件3 -> 条件3を満たしたときの処理
else -> どの条件も満たさなかった時の処理
}

var n = 0
var resultMsg = when (n) {
    0 -> "nは0です"
    1 -> "nは1です"
    2 -> "nは2です"
    else -> "nは0、1、2以外の値です"
}
println(resultMsg)

結果
 nは0です

条件の書き方はいろいろある
例)
 ⓵複数指定
  0,1,2 -> “0または1または2です”
 ⓶範囲指定
  in 0..2 -> “0から2のどれかです”
 ③範囲外指定
  !in 0..2 -> “0から2以外です”

4-5. forループ

反復処理を行うには、forループを用いる

var n = arrayOf(1, 2, 3, 4, 5)
for (item in n) {
    println(item)
}

結果
 1
 2
 3
 4
 5

※範囲演算子を用いれば、指定した回数繰り返すこともできる

for (item in 1..3) {
    println(item)
}

結果
 1
 2
 3

※ループを中断するにはbreak、周回をスキップするにはcontinueを用いる

for (item in 1..10) {
    if (item % 2 == 1) continue
    println(item)
    if (item == 8) break
}

結果
 2
 4
 6
 8

4-6. 関数

Kotlinでは、Javaと異なり、クラス内だけではなくトップレベルでも宣言をすることが出来る
関数を定義するにはfunを用いる
仮引数と戻り値の型宣言は必ず記載しないといけない
戻り値がない場合は、戻り値の型として、Unitを指定する

関数の定義
 fun 関数名 (仮引数: 引数の型, …): 戻り値の型 {処理}

・関数の呼び出し
 関数名(実引数, …)

四角形の面積を求める関数

fun getRectangleArea(width: Double, height: Double): Double {
    return width * height
}
println(getRectangleArea(13.5, 20.5))

結果
 276.75

簡潔に書くと

fun getRectangleArea(width: Double, height: Double): Double = width * height
println(getRectangleArea(13.5, 20.5))

戻り値がない関数

fun name (name: String): Unit {
    println("私の名前は、${name}です")
}
name("Emi")

結果
 私の名前は、Emiです

5. IntelliJでKotlinを書いてみよう

5-1. IntelliJとは

  • JetBrains社が開発したJavaなど数多くのプログラミング言語に対応した統合開発環境
  • 最近、日本語言語パックが公式リリースされるなど、扱いやすさが向上している

5-2. IntelliJでKotlinを書いてみよう

「ファイル」->「新規」->「プロジェクト」を選択

「Kotlin」を選択し、任意の名前を設定、JDKを選択し「次へ」をクリック
(JDKのバージョン 1.8 以降を推奨)

「完了」をクリック

「kotlinSample」プロジェクトの作成が完了

「main.kt」を実行するとコンソールに実行結果が出力される

6. まとめ

Kotlinは…

  • エラーを未然に防いでくれる
  • ソースコードを簡潔に書くことが出来る
  • Javaと記述が似ている部分が多く、学習しやすい

最後までお読み頂きありがとうございます。
今回は、Kotlinの入り口である基本的な構文についてご紹介しました。
Kotlinには、今回紹介しきれなかった便利機能がまだまだあります。
ぜひ、また紹介させて頂きます!


あなたもエム・フィールド グループで働いてみませんか?

エム・フィールドグループは事業拡大に伴い、一緒に働く仲間を通年で募集しています。
データサイエンティスト、エンジニア、クリエイターなど様々な職種を募集しています。ご興味のある方は、採用サイトもご覧ください。

エム・フィールドグループ 採用サイト
・人事が考える、エム・フィールドを一言で表すと、〇〇な会社!

自社のビジネスをITで革新したい!DXを一から相談できるパートナーを探しているなら、私たちエム・フィールドにご相談ください。

エム・フィールドは、「AIを武器にDXを前進させる」を合言葉に、DXに悩む企業に寄り添うシステム開発会社です。課題の洗い出しからシステム開発、技術支援、社員教育まで、幅広くご相談ください。

エム・フィールド グループへのご依頼・ご相談
解決できるDX課題
DXの悩みを解決する5つのサービス形態
DXを実現する12のテクノロジー
会社紹介資料のダウンロード

ABOUT ME
もぎもぎ
株式会社エム・フィールドでアプリケーションエンジニアをしています。 2020年に新卒で入社し、現在2年目です。 趣味は、スノーボードと音楽を聴くこと、音楽フェスに行くことです!