【Androidアプリ開発】Kotlinの基礎を学ぼう①

kotlinアイコンが映っている風景 プログラミング

Kotlinとは

 Kotlinは、コトリンと呼びJavaの統合開発環境であるIntelliJ IDEAで有名なJetBrainsが開発したオブジェクト指向プログラミング言語です。言語構文自体はJavaとは互換性がない独自方式ですが、コンパイルされたコードはJava VM(仮想マシン)上で動作するため、今まで開発したJavaソースコードの多くを流用できるという特徴を持っています。


 ちなみにGoogle I/Oと呼ばれるGoogleが毎年開催している開発者向けの発表会で、Androidアプリ開発の言語として2017年に公式サポートが発表されました。以前まではJavaという言語でAndroidアプリ開発が行われていましたが、最近ではKotlinでの開発が主流になってきています。

 Kotlinファイルの拡張子は.ktとなり、Javaの場合は.javaになります。
 ※iOSアプリではSwiftという言語が使われます。

Kotlinの基本

 Kotlinを書いて学ぶために、Web上でソースコードを書いてコンパイルできるツールがありますので、こちらを開いてください。

 今回はこちらを利用しますが、Android Studioでやってみたいという方は、Android Studioでプロジェクトを開いて同じようにやってみてください。

Kotlin Playground: Edit, Run, Share Kotlin Code Online
Explore Kotlin and practice your coding skills on the Kotlin Playground! Simply type a snippet of code and click Run to ...

Kotlin : Hello World

 最初にベーシックなプログラミングとしてとして、「Hello World」と表示させてみましょう。
上記のWebサイトを開くと、デフォルトで下記コードが既に書かれていると思いますので、画面右上の矢印ボタンを押してみましょう。

fun main() {
    println("Hello, world!!!")
}

 画面右上の矢印ボタンを押すと、下の枠の部分に「Hello world!!!」と表示されていると思います。コード内容としては、main関数が実行され、printlnという関数で引数として「Hello World!」を表示しているという内容になります。

KotlinでHelloWolrdを表示させる
Hello world

Kotlin : 基本の型

POINT

○ Kotlinの変数は全てオブジェクト

○ javaのように「int」と「Intger」を使い分ける必要なし

 Kotlinの型はJavaと違って、プリミティブ型に相当する int や boolean といった型は存在せず、すべてがオブジェクトです。 例えば、32 ビット整数を扱いたい場合は、一貫して Int と記述すればよくJava のように int と Integer を使い分ける必要はありません。(内部で必要に応じて Java の int や Integer 相当のものとして扱われます)

項目
数値型Byte
Short
Long
Int
Float
Double
文字、文字列Char
String
論理型Boolean
列挙型enum class
Kotlin 基本の型

Kotlin : 変数

POINT

○ val型は変更不可(イミュータブル)

○ var型は変更可能(ミュータブル)

 Kotlinで変数を定義するときには、valとvarというキーワードを付ける必要があります。
valは1度定義すると変数を変更できないようになりますが、varでは何度も変更が可能になります。
変数によって、1度定義したら変更がないものか、何度も変更があるものかでval,varを使い分けましょう。試しに下記コードをmain関数の上に書いてみましょう。

val a: Int = 1
val b = 2
b = 3      
val c: Int 

 実行すると3行目と4行目で下記画像のようなエラーが出ると思います。3行目の変数bはval型のため1度定義すると変更ができないためエラーとなります。4行目は初期値が設定されていないためエラーとなります。

Kotlinでのvalの使い方
変数エラー

 続いてvar型を見ていきましょう。main関数を下記のように変更してから実行してみてください。下の画面を見てみると、6と表示されていると思います。これは変数xの初期値を5に設定して、その後xに1を足しているため、6と表示されています。このようにvar型では一度定義した後も変更が可能になっています。

fun main() {
    var x = 5
    x += 1
    println(x)
}
Kotlinでのvarの使い方
var型

Kotlin : 関数

POINT

○ 書き方は、fun 関数名(){}

○ 関数を使うと、同じコードを再利用することができる

○ 関数を分けておくと、コードが分かりやすくなる

 関数とは何かを実行するために記述しておくまとまった処理のようなものになります。
例えばネットショッピングを行う場合、「カートに入れる」という処理がありますが、これを毎回カートという箱を用意してその中に商品を入れるというソースコードを書くのは大変です。そこで、カートという箱を用意してその中に商品を入れるという関数を1度作っておけば、その後は関数を呼び出すだけで、「カートに入れる」という処理を何度も実現できます。
 このように何度も同じ処理を書くのは無駄ですので1つにまとめてしまおうというのが関数の良いところになります。

 kotlinで関数を作成するにはfunという接頭辞が必要になります。試しに足し算を行うsum関数というものを作ってみましょう。

fun sum(a: Int, b: Int): Int {
    return a + b
}

 sum(a: Int, b: Int): Int という部分に注目してください。()の中はaとbというInt型の変数が定義されていて、これは2つのInt型の変数を受け取ることができるよ、という意味になります。
また、: Intの部分ですが、こちらはsum関数はInt型の値を返しますよという意味になります。試しにmain関数からsum関数を呼び出してみましょう。

Kotlinでクラスを書く
sum関数の呼び出し

 ここではsum(5,7)を実行していますが、12と表示されています。5と7というInt型の数字がsum関数に渡されて、sum関数内では5+7を計算した結果をmain関数に返す(return)という処理を行っているため、println(12)という状態になり12が表示されているということになります。
 また、関数は引数の数や返り値の型を変更することができ、sum関数では引数が2個でしたが、0個でも10個でも作ることができます。 返り値の型も今回はInt型でしたが、Double型やBoolean型など自由に変更可能です。

Kotlin : クラスとインスタンス

 Kotlinはオブジェクト指向型言語ですので、クラスとインスタンスという概念が存在します。クラスとインスタンスの説明は下記サイトを見て頂けるとより理解が深まると思いますが、簡単に言うと
クラスは設計図、インスタンスは設計図から作成された物(オブジェクト)になります。
 例えばスマートフォンという設計図(クラス)を作るとして、この設計図にはCPU、メモリ、ストレージという箱を持っているとします。この設計図を元に各メーカーがOS(AndroidやiOS)を決めたり、ソフトウェアを開発したりして、オブジェクト(物)を作成していき、作られたものがインスタンスと呼ばれます。

Error 403 (Forbidden)|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
403エラーページです。用語の意味を「ざっくりと」理解するためのIT用語辞典です。

 実際にKotlinではどのように作っていくか見ていきましょう。今回は例題としてRectangle(長方形)というクラスを作ってみましょう。長方形は縦の長さと横の長さが必要なので、引数にheightとlengthという変数を定義します。heightが縦の長さ、lengthが横の長さとなります。
 またクラスの中では、perimeter(長方形の周囲)という変数を作成しておき、計算しておきましょう。これで長方形のクラスが出来ました。

class Rectangle(var height: Double, var length: Double) {
    var perimeter = (height + length) * 2
}

 続いて作った長方形クラスから実際にインスタンスを作成してみましょう。今回は縦が5.0、横が2.0の長方形を作りたいので以下コードをmain関数に記述してください。

val rectangle = Rectangle(5.0, 2.0)
println("四角形の周囲は${rectangle.perimeter}")

 実行してみると、「四角形の周囲は14.0」と表示されていると思います。長方形というクラスから実際に縦5.0、横2.0の長方形が作られていることが分かりますね。

Kotlinでクラスを書く
Rectangleクラス呼び出し

 このように長方形というクラスを作った後に、Rectangleクラスを呼び出してインスタンスを作成することでたくさんの長方形が作ることができます
 また、長方形クラス(設計図)が1つあるので、あらゆるサイズの長方形がインスタンスとして何個も作ることができるようになります。冒頭にも説明したようにクラスとは設計図のことでインスタンスとは実際に作成した物になりますので、クラスとインスタンスの概念は覚えてください。

Kotlin : コメント

 続いてコメントの書き方です。ソースコードを書くときは、複数人で開発することが多いので、わかりにくいコードや関数には必ずコメントで意味や背景を書いておくようにしましょう。
 Kotlinではコードを書くときにコメントを書く方法として、2種類あります。1つ目は「//」で、1行のみコメントを書くことができます。2つ目は「/*」と「*/」で囲う事により複数行をコメントとすることができます。試しに下記コードで確認しておきましょう。

Kotlinでコメントを書く
コメント例

Kotlin : Null Safetyについて

POINT

○ Kotlinでは基本的にnullにできない

○ 「?」を使うことで、nullが許容される

○ null可能な変数を呼び出す時は「!!」を使う

 Nullとは「何もない」ことを意味しています。例えば変数を作ったとしても変数に値が存在しない場合は、その変数はnullになっているということです。Kotlinではnull状態に対していくつか制約が決められており、守る必要があります。

基本的にnullにすることはできない

 Kotlinでは変数にnullを代入することを禁止しています。これをNull Safety(Null安全性)と呼びます。例えば下記のようなコードを記述すると、aにnullを代入している時点でコンパイルに失敗してしまいます。不必要にnullにさせないことでバグの要因となるコードを減らすことが出来ます。
 一方Web APIなどから取得した情報でnullになり得る場合は、次の?の方法で対処していきます。

var a: String = "abc" 
a = null // コンパイルエラー

「?」をつけるとnullが可能になる

 変数に?をつけるとnullを許容することができます。しかし基本的な考え方として、KotlinではNull Sefetyという考え方が用いられており、nullにすべきでない変数に「?」をつけてnullを許容するのはしないほうが良いでしょう。

var b: String? = null

nullが入りそうな変数を利用するときは「!!」をつける

「?」がついている変数はnullの可能性があるので、この状態で呼び出すことはできません。Kotlinではnullの可能性がある変数を呼び出すときは、「!!」をつけることが必要です。Rectangleクラスの例で言うと、下記のように呼び出す必要があります。

rectangle!!.perimeter

Kotlin : まとめ

 今回はKotlinの基本の型と変数、関数、クラスなどを説明しました。Kotlinを利用するためにはif、for、when、whileなどの文法も学ぶ必要がありますので、こちらは以下記事で学んでみてください。

コメント