この記事のランク | |
---|---|
読む時間 | 3分 |
重要度 |
Javaに続くAndroidアプリを開発するためのプログラミング言語として知られており、同社が提供している「IntelliJ」という統合開発環境か、Google社が提供している「Android Studio」で開発することができます。
Twitter(@nana_korobi04)でも情報発信していますので、
フォローいただけると嬉しいです!
Kotlinの特徴的
Googleの公式な開発言語
これまでAndroidアプリの開発言語はJavaがメインでしたが、2017年にGoogleがKotlinをAndroidアプリの公式な開発言語に採用したことにより、注目されるようになりました。
JavaとKotlinの違いは、Kotlinの方がソースコードの記述がシンプルであり学習し易い点や、「Null safety」というルールによりプログラム実行時にデータが空の場合に存在エラーとなる事象を防ぎます。
Javaと互換性がある
JavaからKotlin、KotlinからJavaを相互に呼び出して使用が可能なため、Javaからの移行が容易であることや、Javaをやっていれば文法が同じであるKotlinの習得も早いのが特徴です。
汎用性はスマートフォンアプリ以外にも活用機会が多いJavaに軍配がありますが、Androidアプリの開発をメインにしていくのであれば開発スピードが速いKotlinを学ぶのが良いでしょう。
Kotlinのソースの書き方
画面に文字を表示する
以下が「Hello」の文字列を表示するサンプルコードですが、これだけでもKotlinが他言語に比べてシンプルなことがお分かり頂けるかと思います。
fun main(){
val message = "Hello"
println(message)
}
1行目の「fun main()」はメインのfunction(関数)という意味で、プログラムを実行して最初に呼ばれる処理です。
2行目の「val message」はmessageというデータを格納する箱に、”Hello”という文字をセットしています。(これを変数といいます)
通常、文字を扱う場合はString型の変数を、数値を扱う場合はInt型の変数を指定しますが、Kotlinでは変数に入れる値を見てコンパイラが自動的にデータ型を判断してくれるため、「val」を指定しておけば型を意識する必要はありません。
なお、「val」はvalue(値)の略で、一度データをセットしたら後から他のデータをセットすることができない変数です。
一方、「var」はvariable(変数)の略で、こちらは後から別のデータをセットすることが可能です。
例)
val message = "Hello"
var error = 0
message = "Bye" … エラーになる
error = 1 … エラーにならない
3行目の「printIn」は文字を画面に出力する予め用意されている機能で、後ろの()の中に表示したい文字をセットして利用します。
サンプルコードは変数をセットしていますが、直接文字列を”(ダブルコーテーション)で囲ってセットすることも可能です。
クラスを作って呼び出す
以下のサンプルソースはSchoolというパッケージにStudentクラスを定義しています。
package School
class Student(var name: String)
1行目のpackageは1つ以上のクラスを持つグループのようなもので、ここではSchoolというパッケージ名にしています。
2行目はStudentクラスを定義しており、()の中は、外からStudentクラスが呼ばれた際に、渡ってきたデータをセットする「引数」と呼ばれています。
サンプルでは文字をセットするためのString型のnameという変数を定義しています。
次にSchoolクラスの呼び出し部分のコードを記述します。
import School.*
fun main() {
val s = Student("Taro")
println("Hello ${s.name}")
}
1行目の「import」でSchoolパッケージを取り込んでいます。
なお、「.*」はワイルドカードといってSchoolパッケージで参照できるもの全てを取り込むことができます。
3行目は変数s にStudentクラスをセットしていますが、これはインスタンス化といって、設計図から実体を作る作業です。
Studentクラスの中ではmain関数から渡された”Taro”という文字を受け取り、変数nameにセットして文字列としてmain関数に返します。
4行目のprintInではインタンス化された変数sのプロパティであるname変数の中身(Taro)をHelloの文字に繋げて表示しています。
すると、main関数の実行結果は以下のようになります。
Hello Taro
このようにクラスで処理したいデータを渡して、その結果を返して貰うというのがクラスの使い方です。
クラスという共通で使える機能に独立させることで、main関数以外の場所からでも利用することができます。
それでは、クラスにはどういったメリットがあるのか簡単に説明します。
①同じような処理を何度も書かなくて良い
異なる機能であっても同じような処理をする場合はそれぞれの機能に処理をコーディングしなければなりませんが、クラスがあることで共通化できるため開発コストが短縮できます。
また、テストについてもクラスの呼び出し部分のみ動作確認ができればクラスの中の処理は既に利用実績のあるものなので品質が保証されています。
②仕様変更が発生した場合に修正が容易
クラスで処理を一元的に管理しているため、仕様変更が発生しても1箇所の修正で済むため改修コストが少ないです。
ただし、仕様変更によってクラスを使っている他の部分に影響がないか、予めクラス名で検索するなど調査は必要になります。
③複数人でプログラミングしやすい
クラスを作るエンジニアと関数を作るエンジニアで並行してコーディングを進めることで納期を短縮することが可能です。
関数で使うクラスは、呼び出し部分のみをコーディングしておけば、クラスの処理の部分は別のエンジニアが担当するため、関数を作るエンジニアは後続処理を作ることができます。
例外処理
続いてKotlinで例外処理をコーディングします。
推測される操作エラーであれば、予めエラー処理を用意しますが、殆ど発生しないようなレアケースなど全てのユーザー操作に対してエラー処理を設けるのが現実的ではない場合は例外処理を利用します。
エンジニアの世界では、try〜catch(トライキャッチ)と呼ばれ、下記のサンプルコードの3行目の「try」と6行目の「catch」以降が必要な例外処理のロジックになります。
fun main() {
var num = "3"
try {
val numInt = num.toInt()
println(numInt)
}catch(e: Exception){
println(e)
}
}
このサンプルコードは、2行目でnum変数に文字データの”3”(ダブルコーテーションで囲われているものは文字として扱われる)をセットして、4行目のtoInt()というクラスで数値データに変換してnumInt変数にセットします。
そして5行目の「println(numInt)」で数値データとなった3を画面に表示しています。
3行目の「try」は、{ }の中で実行された処理で例外が発生した場合に、6行目の「catch」の処理がなされます。
「catch」の後ろの()の中にはエラーメッセージをセットし、その後ろの{ }の中では例外処理で実行したい処理を記述します。
()の中の「e: Exception」を分解すると、eはエラーメッセージをセットする変数名で、その後ろのExceptionクラスで、全ての例外パターンを拾っています。
そして、7行目の「println(e)」でExceptionクラスで拾ったエラーメッセージを出力しています。
例外処理を発生させるためには、2行目の「var num = “3”」を「var num = “abc”」に置き換えることで実現できます。
なぜなら、4行目のtoInt()クラスではアルファベット→数値に変換ができないため、システムエラーとなり、6行目の例外処理が発動する仕組みです。
以下は、”3”→”abc”に置き換えた場合の例外処理のエラーメッセージです。
java.lang.NumberFormatException: For input string: “abc”
「NumberFormatException」は、文字を数値に変換しようとしたとき、文字の形式が正しくない場合に発生するエラーの種類です。
まとめ
KotlinはJavaと併用ができるにも関わらず、Javaよりもコーディング量が少なく、セキュリティが強固なプログラミング言語です。
Googleが公式にAndroidアプリケーションの開発言語として認めているため、まだ若い言語ではありますが、今後伸びていくことが想定されます。
開発ツールの「IntelliJ」、「Android Studio」いずれも無償で利用できますので、Kotlinのモダンさにぜひ触れてみて下さい。