非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

いま話題のKotlinを触ってみた

   

KotlinがAndroid開発の公式言語になることが決まったらしく、ここ最近ネットで話題になっています。ついにAndroidはJavaを突き放しましたね。実は1年前くらいに予想はしていたんですよ。

 

Kotlinがこれから台頭していくとみて、Kotlinを覚えなきゃなーと思った次第です。Javaコードから自動変換できるくらいなので基本構成はJavaに近いと思いますが、ざっと見て、細かいところで違いがあるみたいなので、今回はクラス周辺を中心に備忘録的にザクっと書きます。

[ad#top-1]

クラスの書き方

以下はTestAという名前のクラスで、test()というメソッドを持っています。Kotlinで書くとこんな感じです。あれ?クラス名に引数があってコンストラクタがないですね。Kotlinではクラス名とコンストラクタが合体するみたいです。それと、コンストラクタへの引数がメンバ変数にすることなくメソッドで使えちゃっています

//Kotlin
class TestA(val name : String){
  fun test() : String{
    return name
  }
}
 

 

ちなみに、Kotlinって型宣言する際に型名を後ろに書く方式なんですね。Go言語でこの方式を散々disったけど、もしかして最近の潮流なのかな?

で、もし上のコードと同じものをJavaで書こうとするとこうなりますね。

//Java
class TestA{
  private String name;

  TestA(String name){
    this.name=name;
  }

  public String test(){
    return name;
  }
}
 

 

コンストラクタを書かなきゃいけないし、受け取った値をメンバ変数に入れる必要もあります。たしかにKotlinで書くと短いコードで済みます。

繰り返しになりますが、Kotlinの特徴として

  1. コンストラクタがクラス名のところにまとまっている。
  2. コンストラクタへ渡した引数がそのままメンバ変数になっている

があり、この点は素で衝撃でした。いろいろ端折って簡素になるのはいいけど、なんだか不安になるレベル(笑)。

 

クラスの使い方

クラスの使い方ですが、Kotlinではクラス宣言というよりも関数を使っているような書き方です。

//Kotlin
val testA = TestA("test")
 

 

Javaの場合は以下の通り。同じく1行で済むので特段簡素にはなりません。

//Java
TestA testA = new TestA("test")
 

 

メソッドを使う場合はどちらも testA.test() と書きます。ここは一緒です。

Kotlinのクラス宣言ってメソッドを使う時と同じ書き方なので、これがクラスかメソッドか混乱しないのかな?とは心配になりますね。

 

セカンダリコンストラクタ

Kotlinではクラス名とコンストラクタが合体するとかきましたが、じゃあ、2個目、3個目のコンストラクタを作るのはどうすればいいか?というと、以下のようにconstructorという名前で定義します。

ところが、以下のコードではエラーが発生します。

class TestA{
  constructor(name : String){
  }

  fun test() : String{
    return name   //ここでエラー!Unresolved reference: name
  }
}
 

 

コンストラクタで受けた値はそのままメンバ変数みたいに自由に使えたはずですが、セカンダリコンストラクタの場合はダメのようです。ここがややこしい・・・。

じゃあどうすればいいかというのが次の方法です。

 

メンバ変数みたいに書くとプロパティになる!

なので、以下のようにJavaで言うところのメンバ変数みたいに書けばOKなんです。

class TestA{
  val name : String

  constructor(name : String){
    this.name = name
  }

  fun test() : String{
    return name
  }
}
 

 

ただ、実はこれ、Kotlinは特段指定しなければすべてpublicになるというお決まりなので、当然、メンバ変数のように書いたnameもpublicなのです。

なので、外から以下のようにnameを使うことができます。

val testA = TestA("test")
testA.name //まるでプロパティ!
 

 

まるでプロパティのようですね。あ、いや、プロパティそのものです。わざわざgetter/setterを作ることなく、直接入出力できるんです。これも衝撃。

C#よりプロパティ作るのが簡単です。

 

まとめ

今回紹介した通り、KotlinはJavaユーザーからすると少なからずクセがあります。今回書いたこと以外もまだまだ覚えなきゃいけないことがあります。

でも、基本簡素に書くというコンセプト通り、プログラムコードの行数は極端に減りますね。JavaからKotlinに移行することは慣れの問題で特にハードルは高くなさそうですが、KotlinからJavaへの転向は難しいんじゃないかと思いました。

プログラミング言語をKotlinから始めると、Javaって(C#も)すごい面倒くさい言語に感じてしまうんだろうなと。

いずれにしても、Androidの公式言語になったことで、ユーザーが一気に増えそうです。

[ad#ad-1]

スポンサーリンク

 - Kotlin