このサイトではkotlinを学習しようとしている方へ、kotlinの概要と文法を解説するサイトです。
- Kotlin概要
- Kotlin文法
Kotlin概要
kotlinのメリットとデメリット
とりあえず試したい方へ
とりあえずブラウザ上で試す: インストールしなくてもこちらからブラウザ上で実行可能
※Kotlinの公式のドメイン配下にあるサイトなので安全にお試しできます
Kotlinを動かすための開発環境
Android Studioが必要。
言語のビジュアルが見たい方へ
外見はこんな感じ
//this is comment fun main() { var agreement : String = "Hello, world!!!" println(agreement) }
参考サイト
以下のURLを参考にしました。
参考URL:https://qiita.com/koher/items/bcc58c01c6ff2ece658f
Kotlinの人気急上昇について
以下の記事より、「Kotlin on Android」が正式に決まった
https://blog.jetbrains.com/ja/2017/05/18/767/
Google I/OのキーノートにてAndroidチームはKotlinの公式サポートを発表いたしました。
これはKotlinにとって大きな一歩であり、Androidデベロッパにとって、そしてJetBrainsツールファンに
とって素晴らしいニュースです。
これはつまるところKotlinのバックにgoogleがついたとほぼ同義です。
Kotlinの特徴
- Javaとの完全互換性
まずはこれ
Kotlin は JetBrains 社が作っている JVM 上で動作する言語で、 "100% interoperable with Jav
(Java と完全に相互運用可能 )" を謳っています。
- Javaよりすごい
Kotlin は Better Java としてかゆいところに手が届くように作られており、一方で Java プログラマが抵抗
感なくすんなりと受け入れられるようにできています
以下のコードを見てわかる通り、面倒で無駄な宣言がなくなりスッキリしている
before(Java)
class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world."); } }
after(Kotlin)
//this is comment fun main() { println("Hello, world!!!") }
- 複数のOSに対応
SwiftはiOSの事実上の基準となっている言語だが、Androidには対応していない
しかしKotlinは複数のOSに対応可能。
Javaの有償化について
JavaはOracle社が開発したプログラミング言語であるため、Kotlinもその影響を受けるのではないか?という懸念があったが
https://teratail.com/questions/135222
Android端末では、アプリはARTと呼ばれるGoogle独自のJVM上で動作しており、そもそもOracleの影響を受けません。
ということで問題なしとのこと。
とりあえず試したい方へ
とりあえずブラウザ上で試す: インストールしなくてもこちらからブラウザ上で実行可能
※Kotlinの公式のドメイン配下にあるサイトなので安全にお試しできます
インストール方法:しっかりとインストールしたい人向け
しっかり構築したい方へ
Android Studioのインストールが必要。
合計で20~30分程でできる。
まずはAndroid Studioのインストールの仕方
以下のサイトにアクセスした後
https://developer.android.com/studio
「Download」を押す
規約が出てくるが特に読まなくてもいい奴なので適当にチェックボックス押してダウンロード
ダウンロードには5分程かかった。
Mac, Windowsなどの指定がある方
ダウンロードボタンを押すのではなく「Download options」を押すこと
(万が一通常のDownloadを押してもOSに合わせたandroid studioが入ると思うが...)
その後Mac,Window,Lixux,ChromeOSなどのOSごとの対応が出てくる。
Android Studio.exeを起動
ダウンロードフォルダー配下に移動した(C:\Users(ユーザ名)\Downloads) android-studio-ide-xxx-xxxxxxx-windows.exeを起動する
C:\Users\~~\Downloads\android-studio-2021.1.1.22-windows.exe
Welcome To Android Studio Setup
:NEXT>を押す
Chose Components
Android Virtual Deviceを押したまま
:NEXT>
Install Loaction
「C:\Program Files\Android\Android Studio」を選択したまま
:NEXT>
Chose Start Menu Folder
「Android Studio\Android Studio」 を選択
:NEXT>
インストールが開始される
トータルで5分
最初の1分は全く進まないが、2分ぐらいからいきなり進む。
インストールが完了後は
:NEXT>
Completeing Android Studio Setup
チェックボックスに「start android studio」をいれて「Finish」
初回起動時
Import Android Studio Settings
Do not import settingsを選択
万が一エラーが出た場合は「Setup Proxy」をクリック
Welcomoe
色々書いてあるが全部飛ばして
:Next>
Install Type
Standerdで良い。
:Next>
Select UI theme
DarcualかLightどちらかを選べる
色の好みで好きな方で
verify settings
確認画面
:Next>
Licence
色々インストールするのでそれぞれチェックを入れていかなければいけない
全部押したら「Finish」
installで5分ぐらい
以下の表示が出たら完了
Android SDK is up to date. Running Intel® HAXM installer Intel HAXM installed successfully!
AndroiStudio日本語化
次のサイトに行く
https://github.com/yuuna/IDEA_resources_jp
「Clone or download」をクリックし
「download zip」を選択し解凍
解凍後
ZIPファイルを解凍すると「resources_jp.jar」というファイルができます
これを「C:\Program Files\Android\Android Studio\lib」へコピー
完了
https://zesys.net/pc/android/android-studio-localizing-japanese/
Kotlin文法
変数代入
簡単な変数宣言の例(var)
- 最もしっかりとした書き方
var a: Int = 1
- 暗黙的な書き方(型推論)
var a = 1
型名は書く必要はない
定数の書き方(val)
いわゆる「const」として扱い、後に変数代入する必要がない場合
val digits = 12
Kotlinで使える型について
Kotlinでは以下の型が使用可能
Double
Float
Long
Int
Short
Byte
String
数値型について
- Int
整数を扱うには最も適切なサイズ
- Long
整数型では最大のサイズ
- Double
64bitで小数点付きの数字を扱う際に最も大きいサイズ
- Float
浮動小数点型
floatは単精度、doubleは倍精度浮動小数点と呼ばれている。
- 以下二つはあまり使わない
Short 16 Byte 8
文字列型について
String型が使える(ここはJavaとほぼ同じ)
が、これも型推論の機能を使えばよい
var passowrd = "1234"
暗黙的にやるならば以下のようなイメージ
var passowrd : String = "1234"
変数宣言その2
変数の宣言方法
変数の宣言では var命令を用いる
var 変数名: 変数の型 = 初期値
Kotlinの基本データ型は以下の様になっている
- Double型は比較的大きい小数点数値で使う
暗黙の型変換(型推論機能)
Kotlinでは初期値から変数の型を推定してくれる。
ex) 以下のように書いてもnはInt型として判断される。
mはDouble型とみなされる。
var n = 10 var m = 1.5
※初期値とデータ型の両方の宣言を省略することはできない
※一度確定した型を変更するような代入ができない
var n = 10 n=11 n = "foo"
型変換
型同紙に互換性があれば必要にお応じて型を変換することもできる。
Javaでは互換性がある場合は自動で変換できるが、Kotlinでは明示的に変換する必要がある
var a: Float = 1.2 //error(ダブル型であるため) var a: Float = 1.2f //Ok var b: Double = 10 //error(整数であるため) var b: Double = 10 //ok
そのほかだと、toデータ型 () メソッドを用いて変換できる
var a = 10 var b: Long = a.toString()
toLong()以外にも、toBtye() やtoFloat() 等、変換先の型ごとにメソッドが存在する
Any型について
kotlinではすべてのクラスはany型を継承している。
したがって、どんな型でも代入できるような変数を設定したい場合はany型を使用すればよい
定数について
一度定義したら値を変えたくない物はvalで宣言する
再代入する予定のないものは、valを利用するのが基本
val a = 10 a=11 //error
配列については配列そのものを再代入するのはエラーが出る
しかし、配列の中身を変更するのは可能
val a = arrayof(1, 2, 3) a = arrayof (4, 5, 6) //エラー a[2] = 4 //OK
文字列と数値
リテラルとは?
ソースコードに書かれた具体的な値のこと
Kotlinの数値リテラル
主に使う数値リテラル
var a = 1001 //10新数 var b = 0x0F //16新数 var c = 0b10101 //2新数 0bスタ var d = 1.23 // 少数 var e = 1.23e+5 //指数
Kotlinの数値とアンダーバー
数値に入るは処理の上では無視される
したがって、桁区切りとして活用が可能
var a = 1000 var b = 1_000 var c = 0x3E8
したがって、上記の変数はすべて同じ値を意味する
- サンプルコード
var a = 1000 var b = 1,000 var c = 0x3E8 print(a) print (b) print(c) >> 1000 >> 1000 >>1000
型サフィックスについて
文字や数値の後ろに付けて意味を付与する仕組み
var a = 10L //Long var b = 10F //Float var b = 10f //Float
//サンプルコード
var a = 10L //Long! var b = 10f //Float print (a::class) >> class kotlin. lang print (b::class) >> class kotlin. float
文字列リテラルについて
文字列リテラルについて
Kotlinは二種類の文字列リテラルを持つ
エスケープ文字を含む文字列
改行やタブなど任意の文字列を含む文字列
//サンプルコード
var msg1 = "こんにちは。\n私はKotlinを学んでます" var msg2 = """こんにちは 私はKotlinを学んでますが
// 実行結果
こんにちは。 私はKotlinを学んでます
複数行を表示したい場合
クオーテーションを三つ続けることで複数行テキストを実現できる。
var msg2 = """こんにちは 私はKotlinを学んでます"""
Kotlinで複数行の文字列でタブが入ってしまうとき。
trimMarginメソッドを使うことで先頭のタブを取り除くことができる
fun main(){ var msg2 = """こんにちは 私はKotlinを学んでます を学んでます""".trimMargin() println(msg2) }
// 実行結果
こんにちは 私はKotlinを学んでいます。
Kotlinの文字列テンプレート
文字列に式を埋め込む場合
fun main { var data = array0f (1.2.3) println("配列dataの先頭の値は${data[0]}です") }
title:Kotlinの文字列リテラルについて【Kotlin入門】
description:文字列リテラルとは、ソースコードに書かれた具体的な値のこと。
category_script:True
Kotlinのnull
参照先を持たないことを意味する値→null
オブジェクトが参照を持たないことを意味する事もある。
Kotlinのオブジェクトの参照とは?
値(オブジェクト)はコンピュータ上のメモリに格納されることで状態を保存できる。 オブジェクトごとにメモリ上のアドレスが入っている状態。
変数はメモリアドレスを参照しており、オブジェクトそのものが入っているわけではない。
そして変数にオブジェクトの参照が設定されていない状態をnullという。
javaでは初期化をおこなわない限り、nullが初期値になっているが、これがエラーの元にもなる。
そこでデフォルトではnullを許容しない様にしている
var foo: String = "foo" foo = null // Error
しかし、nullを許容したい場合も存在すると思う
その場合は型名の後に?を付けることでnullを許容できる
var foo: String? = "foo" foo = null
このようにnullを許容している型をNullable型(ヌルアボー型)という
null取り扱い注意
nullについては意識的に取り扱わなければならない内容がある。
var a: Int = 1000 var b: Int = a var c: Int?= a println(a == b) //true println( a === b) //true println( a == c) //true printin( a === c) //false
変数aを非null型のbとcにそれぞれ代入する。
この時
「同じ値を持つことを確認する==では常にtrueになる」
「同じオブジェクトを参照するかどうかを確認する===ではfalseになる」
この点は直感と反するので注意が必要。
nullableを非null型に代入できない
String?型データをStringに入れることはできない
var fool: String? = "foo" var foo2: String = fool //エラー
これはAny型も例外ではない。
nullも許容したいAny型。その場合はAny?型を指定する。
nullable型のメンバにアクセスする際には「?.」を使う
String?の変数にアクセスする場合、「? メソッド」の形式
var a: String? = "foo" println(a?.length) var b: String? = null println (b?.length) //:null
また、nullableを非null型に強制的に変換する際には!!を使う
var a:String? = "foo" println(a)
備考
title:Kotlinのnullの取り扱いについて【Kotlin入門】
description:参照先を持たないことを意味する値→null。オブジェクトが参照を持たないことを意味する事もある。
category_script:True
配列とコレクション
Kotlind複数の要素をまとめて扱うにはJavaと同様にCollectionを扱う
配列
最もシンプルだが、宣言の段階でサイズを決める必要がある。
List
長さが固定でなく、配列よりも柔軟性が高い。(ほぼ配列の上位互換)
Set
リストとほぼ同じだが、重複した要素は登録されない。(集合の概念)
Map(辞書)
キーとバリューの一対一で登録される複数の値 辞書とも呼ばれる。
配列について
サンプルコード
var a = arrayof(1, 2, 3,4) var b = intArrayOf(1,2,3) //nullが入るので型推論が働かないため、方の指定が必要 var c: Array<String?> = arrayofNulls(3) //lamda式を利用した、柔軟な初期化 var d = Array(3, {i ->i*2}) ) println(d) // [0, 2,4] // 0スタートであることに注意!
リストのサンプルコード
var list = listOf("あ", "い","う") printIn(list) // ["55","L1","5"]
setのサンプルコード
出力の段階で重複が排除されていることに注意
var set = setof ("A", "A”, "A", "C", "B") println(set) //["A", "B", "C"]
mapのサンプルコード
Kotlinでのdictに当たる。
var map = mapOf("First" to 1, "Second" to 2, "Third" to 3) println(map) 7/{First=1, Second=2, Third= 3}
変更可能なコレクション
mutableコレクション名Of () 関数を使う
var list = mutableListof (1, 2, 3) list[2] = 4 println(list) // [1, 2, 3]
通常のlistがimutableなわけではない。
var mList = mutableListof (1,2,3) var list = listof (1, 2, 3, 4) //list[2] = 4 / //error mList[2] = 4 //ok! list = mList //OK
備考
title:Kotlinでの配列とリストの違い【Kotlin入門】
description:Kotlind複数の要素をまとめて扱うにはJavaと同様にCollectionを扱う
category_script:True
演算子・制御構文
四則演算や比較などの、値の計算処理を行うための記号
四則演算など基本的なものは他のプログラミング言語と同様
比較演算子 == と ===は挙動が異なる
範囲演算子between
m.nと書くと、m~nの範囲を表すものになる
val i = 10 printIn(i in 1..20) //true
両端の値も含むことに注意
1..20であれば、1はtrueになる。
val i = 1 println(i in 1..20) // true
val i = 20 println(i in 1..20) // true
小数点でも比較可能
val i = 11.11 println(i in 1..20) // true
kotliのif文
if文の例
val a = 10 if (a < 5) println("aは5以下です") }else if(a <= 10) { println("aは10以下です") }else{ println("aは10より大きいです”) } //結果:aは10以下です。
if式
ifは式であるので、値を返すことができる。
関数のように実行結果をreturnするのが可能だ。
val a = 10 var msg = if (a < 5) { ("aは5以下です") }else if(a <= 10) { ("aは10以下です) } else{ (aは10より大きいです") } printIn (msg) //結果:aは10以下です。
- if式を用いた場合は何かしらの値が必要になるので、elseが必ず必要
{}の中には複数行の記述も可能であり、その場合は**最後に書いた値を戻り値としてみなす
- 処理が一行のみならば、 { } は省略可能
val a = 5 var msg = if(a <= 5 ) "aは5以下です" else "aは10より大きいです” println(msg) //結果:aは5以下です。
when it
式の値に応じて処理を分岐させるにはwhen式を使う
switch文の代わりのようなもの
val x = 1 when(x) { 1 -> println("xは1です) 2 -> println("xは1です") else -> { printIns("xは1でも2でもない") } }
if式同様に、値を返すことができる
val score = 80 val msg = when (score) { in 100..99 -> "素晴らしい” in 60..98 -> "合格です” !in 60..100 -> "不合格です" else -> "不正な点数です。
型の判定
型での分岐も可能で、is演算子を利用する
val obj: Any = "あいうえお" when (obj) { is String -> println("母児数は${obj.length) です") else -> println("String型ではないです") }
注意 型チェックが行われた後のブロックでは、型変換が行われる!
以下のコードは is Stringで型変換が行われているので
val obj: Any = "あいうえお" when (obj) { obj is String -> println("母児数は${obj.length)です") else -> println("String型ではないです") }
以下のコードでは型変換が起きていないのでエラーが発生する。
val obj: Any = "$11535" println("moji $(obj.length}")
備考
title:Kotlinでのif文,if式と条件分岐【Kotlin入門】
description:四則演算や比較などの、値の計算処理を行うための記号。四則演算など基本的なものは他のプログラミング言語と同様。
category_script:True
for ループ
val arr = array0f (1, 2, 3) for (item in arr) { println(item) }
mapのforループ
val map = mapOf ("Firsst" to 1, "Second to 2, "Third” to 3) for ( (key, value) in map) { println("${key] : ${value}") }
配列でもwithIndexメソッドでインデックスと値の組み合わせを取得できる
val list = listof ("to", "\", "3") for ((index, value) in list.withIndex()) { println("${index} : $ {value}") }
範囲を指定したforループ (pythonならrength)
for (i in 1..3) { println(i) }``` ### 両端を含めたくない時のforループ
for (i in 1 until 3) { println(i) }```
インデックスを減少させるforループ
for (i in 3 downTo 1) { println(i) }
for文のステップ数を変化させたい時
ex) 3飛びでループのインデックスを回す
for (i in 1.. 10 step 3) { println(i) //11, 4,7,10 }
Kotlinのcontinue
for (i in 1..10) { if( i %3 == 0 ) continue println(i) if (i==9) break }
二重ループで外側のループに出たいとき
二重ループで外側のループに出たいときはラベル構文を用いる
但し、あまり嬉しそうに使うとスパゲッティになりやすいので注意が必要
outer@for (i in 1..3) { for(j in 1..3) { if(i*j > 5) { break@outer } print("${i*j} ") } }
whileループ
条件を満たす間は実行するwhileループ
var i = 1 while (i < 2 ){ println(i) i++ }``` ### do~whileループ do whileループは条件式の判定が処理の後ろになり、必ず一度は処理を通る ex) パスワードの入力など
var i = 1 do{ printIn(i) i++ } while (i < 2 )
title:Kotlinでのfor文の使い方【Kotlin入門】 description:二重ループで外側のループに出たいとき。二重ループで外側のループに出たいときはラベル構文を用いる。但し、あまり嬉しそうに使うとスパゲッティになりやすいので注意が必要 category_script:True ## 関数 KotlinではJavaと異なり、クラス以外に関数を宣言できる ### 関数の基本 関数を定義するためにはfunキーワードを使用する 関数の定義
fun 関数名 (仮引数: 引数の型, ...):戻り値の型 { //処理 } //呼び出し 関数名()
仮引数と戻り値の型の宣言は必須。 戻り値がない場合はUnitを指定するか省略する
fun getTriangleArea (width: Couble, height: Double):Double { return width * height / 2 } println( getTrianelArea(10, 0, 11,1))
fun sayHello (name: String): Unit { println("Hello, ${name}.") } sayHello("tarou”) // Hello, tarou
### 関数の処理が一行で終わる場合 returnなどを省略可能である
fun gettriangleArea (width: Double, height: Double): Double = width * height /2
また、戻り値の型が推論可能である場合, 型を省略することもできる
fun gettriangleArea (width: Double, height: Double) width * height /2
### 引数のデフォルト値 引数が省略されたときに設定される引数を「デフォルト値」という。
fun getTriangleArea (width: Couble=1.0, height: Double=1.5): Double { return width * height / 2 } println( getTriane Area ()) //0.75 println( getTrianel Area (3.0))
### 名前付き引数 呼び出し側に明示的に引数を指定できる。 通常の引数と混在させることもできるが、エラーの原因にもなるためなるべく避けた方が
fun getTriangleArea (width: Couble=1.0, height: Double=1.5): Double { return width * height / 2 } println(getTrianelArea(height = 30 width=20 ) println(getTrianelArea (height = 3.0))
必須の引数を先頭に、任意の引数(オプション)は後方に並べる方がよい。 ### 可変長引数 varargキーワードを用いる 可変長引数は内部的には配列とみなされるので、forループによる処理が可能
fun allSum(vararg values: Int): Int { var result = 0 for (value in values) { result += value return result println( al ISum (2, 3, 4, 2,5)) } }
### スプレッド演算子 スプレッド演算子を使うことで、配列を可変長引数として使うこともできる
fun allSum(vararg values: Int): Int { var result = 0 for (value in values) { result += value return result } } println( allSum(2, 3,4, 2,5)) //渡したい引数 val arr = int ArrayOf( 1, 1, 1, 1) println(allSum(arr)) println(allSum(4, arr, 3)) //ok
### Kotlinで戻り値を複数定義したい場合 引数の合計と平均を受け取りたい場合。 - Pairで括ることで二つの戻り値を返せる。 - 3つを返す場合はTipleで括る。 - 3つ以上を返す場合
fun allSum(vararg values: Int): Pair(Int, Double) { var result = 0 var count = 0.0 for (value in values) { result += value count ++ } return Pair (result, result / count) } val (sum, average) = alSUM(1,1,1,1)
printIn(sum) // 4.0
printIn(average) // 1.0
val (, average) = allSum(2, 2, 2, 2) // デメリットは使わない値が帰ってきてしまうこと // averageのみ必要であればこのようにを使う書き方がよい
### 高階関数 **引数や戻り値に関数を指定する関数**のこと 例)forEachメソッドなど 関数の引数に関数を渡すには::演算子を用いる
fun show(n: Int){ println(n) } val arr = arrayOf(1,1,1,1) arr.forEach(::show)
forEachメソッドは配列にデフォルトで実装されているメソッドで **全ての配列の要素に対して引数で受け取った関数を処理する** という特徴を持つ ### 匿名関数: ラムダ式 高階の引数として渡される関数は一度しか使われないケースが多い。 その場合はラムダ式として、使い捨ての関数を使うのが主流である。
val arr = arrayOf (1, 2, 3, 4)
// 通常のラムダ式 arr.forEach({ n: Int -> println(n) } //1 //2 //3
// 推論可能な型なので、Intを省略できる arr.forEach({ n -> println(n) }
// 引数が単一ならば、引数の指定をitでも可能 arr.forEach({ printin(it) } //1 //2 //3 //4
### ラムダ式の注意点 ラムダ式中でreturnをすると、直情の関数を抜けてしまう。
fun main(){ val arr = arrayof ( 1, 2, 1, 1) arr. for Each { if (it == 3) return // Dreturnid println(it) } } // ここまで飛ぶ
ラムダ式でreturnをするには、**ラベル構文を使用する**
fun main(){ val arr = arrayof( 1, 2, 1, 1) arr.forEach loop@ { if (it == 3) return@loop println(it) } //ここまで飛ぶ }
あるいは、forEachをラベルとして設定することもできる。
fun main(){ val arr = arrayof ( 1, 2, 1, 1) arr.for Each { if (it == 3) return@forEach println(it) } // ここまで飛ぶ }
### 高階関数を定義する事も可能 関数の処理時間を計測したい場合、以下のようなbenchmark関数を定義することができる
fun benchmark (unitStr: String, func: ()-> Unit) : String { val start = System.currentTimeMillis() func() val end = System.currentTimeMillis() return (end-start).ToString() + unitStr } var time = benchmark("ミリ秒", { var x = 0 for (i in 1..1_100_000_000) { X++ } println("SLIM " + time) }
title:Kotlinでの関数【Kotlin入門】 description:KotlinではJavaと異なり、クラス以外に関数を宣言できる category_script:True ## クラスの基本 Kotlinでクラスを定義するには以下のように書く
class Human { private var name = "名無し" var age = 20 fun intro() { println("私の名前h$ {name} です。${age} 歳です。") } }
アクセス修飾子を利用することもできる。 アクセス修飾子とは、変数やメソッドのスコープを定義する機能 例)
class Human { private var name = "名無し" var age = 20 protected fun intro() { println("私の名前h$ {name}です。${age}歳です。") } }
### 基本的なアクセス修飾子 - public:全てのクラスからアクセス可能 - protected:定義されたクラスとそのサブクラスからのみアクセス可能 - internal:同じpモジュール内のクラスからのみアクセス可能 モジュールとは Kotlinのファイルが一体としてコンパイルされるまとまりのこと Eclipseやandroid studioなどでのプロジェクト単位のまとまりのこと ### Javaコードが実行されるまでの流れ 1. 複数のJavaファイルがまとめてコンパイルされて、クラスファイルになる 2. Java virtual Machine(JVM) がクラスファイルに記載されたコードを解釈・実行 3. ここで、クラスファイルはソースコードを実行する過程で生成される中間コードであり、OSに依存しない。 クラスファイルはJVMに読み込まれるので、OSごとの依存が存在しない。また、JVMで動くコードはJava以外にもあり、KotlinもJVMのひとつ。 ### プロパティ (フィールド) Kotlinではフィールドではなく、プロパティという機能が存在する。(正直どっちも同) フィールドとは異なり、プロパティはただ単にクラスが持つ変数ではなく、それ自体がアクセサーを持つ。 getter, setterの関数でプロパティを設定する。
var プロパティ名:データ型 - 初期値 getter関数 setter関数
### Kotlinのプロパティのサンプルコード(定義部分) fieldはset内の特別な変数名で値の代入を受けたときに実行される。
class Human { var name = "名無し" var age = 20 set (value) { if(value < 0)) { println("年齢が不正です。") }else{ filed = value } } protected fun intro() { println("私の名前h${name}です。${age} 歳です。") } }
以下使用部分。 setメソッドは代入時に自動的に呼び出される。
val human = Human () human.intro() //私の名前は名無しです。20際です。 //以下setメソッド起動時の処理 human.age = -1 ///年齢が不正です。 printIn(human.name) //結果:名無し
### 注意点 - アクセサーの引数は慣習的にはvalueを用いる。 - filedはバッキングフィールドと呼ばれる。プロパティの値を格納するために裏側で自動生成されるフィールド - valを使ってプロパティを宣言すると、**読み取り専用のプロパティになる - setterを使用することはできず、getterは可能 title:Kotlinのクラスの書き方【Kotlin学習サイト】 description:public:全てのクラスからアクセス可能 - protected:定義されたクラスとそのサブクラスからのみアクセス可能 - internal:同じpモジュール内のクラスからのみアクセス可能 category_script:True