Kotlinファイルには.kt拡張子が付いています。
目次
パッケージ宣言
コードファイルの先頭は通常、パッケージの宣言です。
package com.ceodata.main
import java.util.*
fun test() {}
class Ceodata {}
Kotlinソースファイルは一致するディレクトリとパッケージがいらないで、ソースファイルは任意のファイルディレクトリに配置できます。
上記の例では、test()のフルネームはcom.ceodata.main.testであり、Ceodataのフルネームはcom.ceodata.main.Ceodataです。
パッケージが指定されていない場合、デフォルトでデフォルトのパッケージになります。
デフォルトでインポートする
複数のパッケージはデフォルトで各Kotlinファイルにインポートされます。
- kotlin.*
- kotlin.annotation.*
- kotlin.collections.*
- kotlin.comparisons.*
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*
関数の定義
関数の定義にはキーワードfunを使用し、パラメータの構文は次のとおりです。パラメータ:型
fun sum(a: Int, b: Int): Int { // Int パラメータ,返す値 Int
return a + b
}
式は関数の本体であり、返す値の型は自動的に推測されます。
fun sum(a: Int, b: Int) = a + b
public fun sum(a: Int, b: Int): Int = a + b // public メソッドは返す値の型を明確に記述する必要があります
返す値のない関数(Javaのvoidに似てます):
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
// Unit型を返す場合は、省略できます(publicメソッドについても同じです):
public fun printSum(a: Int, b: Int) {
print(a + b)
}
可変長パラメータ関数
関数の可変長パラメータは、varargキーワードでマークできます。
fun vars(vararg v:Int){
for(vt in v){
print(vt)
}
}
// テスト
fun main(args: Array<String>) {
vars(1,2,3,4,5) // 12345を出力します
}
lambda(無名関数)
lambda式の実例:
// 测试
// テスト
fun main(args: Array<String>) {
val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
println(sumLambda(1,2)) // 3を出力します
}
定数と変数を定義する
可変変数の定義:varキーワード
var <識別子>:<型> = <初期化値>
不変変数の定義:valキーワード、一度だけ割り当てることができる変数(Javaにあるfinal変数に似てます)
val <識別子>:<型> = <初期化値>
定数と変数には初期化値を含めないことはできますが、参照する前に初期化する必要があります
コンパイラは自動的に型の判定をサポートしています。つまり、宣言する時には型を指定しなくてもいいです。コンパイラでそれを判定します。
val a: Int = 1
val b = 1 // システムは自動的に変数の型がIntであると判定します
val c: Int // 宣言時に初期化しない場合は、変数の型を指定する必要があります
c = 1 // 明確な割り当て
var x = 5 // システムは自動的に変数の型がIntであると判定します
x += 1 // 変数は変更できます
コメント
Kotlinは1行および複数行のコメントをサポートしています。実例は次の通りです。
// これは1行のコメントです
/* これは複数行の
ブロックコメントです。 */
Javaとは異なり、Kotlinのブロックコメントはネストが可能です。
文字列テンプレート
$変数名または変数値を表します
$varName 変数値を表します
${varName.fun()} 変数のメソッドの返す値を表します:
var a = 1
// テンプレート内のシンプルな名字:
val s1 = "a is $a"
a = 2
// テンプレート内の任意の式:
val s2 = "${s1.replace("is", "was")}, but now is $a"
NULLチェックメカニズム
Kotlinのnull安全設計は、nullであるパラメータの宣言に使用されます。使用する際には、nullの判定処理が必要で、2つの方法があります。1つはフィールドの後に!!を追加し、Javaのようにnull例外をスローします。もう一つは他のフィールドの後に?を追加し、処理がないでnullを返し、または?:と協力してnullの判定処理を実行します。
//型の後に?を追加し、nullであることができることを示します
var age: String? = "23"
//nullポインタ例外をスローします
val ages = age!!.toInt()
//処理せずにnullを返します
val ages1 = age?.toInt()
//ageがnullの場合は-1を返します
val ages2 = age?.toInt() ?: -1
null値である可能性がある値を参照する場合には、対応する型の宣言はnull可能として明確にマークする必要があります。
strの文字列の内容が整数でない場合、nullを返します。
fun parseInt(str: String): Int? {
// ...
}
次の例では、返す値がnullになる可能性のある関数の使い方を示しています。
fun main(args: Array<String>) {
if (args.size < 2) {
print("Two integers expected")
return
}
val x = parseInt(args[0])
val y = parseInt(args[1])
// `x * y`を直接使用すると、nullになる可能性があるため、エラーが発生します。.
if (x != null && y != null) {
// null値をチェックした後、xとyの型は自動的にnull以外の変数に変換されます
print(x * y)
}
}
型の検出と自動的に型の変換
is演算子を使用して、式が特定の型のインスタンスであるかどうかを検出できます。(Javaのinstanceofキーワードに似てます)
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 型が判断された後、objはシステムによって自動的にString型に変換されます
return obj.length
}
//Javaのinstanceofとは異なる別のメソッドがあり、!isを使用します
// if (obj !is String){
// // XXX
// }
// ここでのobjはまだAny型の参照です
return null
}
或は
fun getStringLength(obj: Any): Int? {
if (obj !is String)
return null
// このブランチでは、 `obj`の型は自動的に` String`に変換されます
return obj.length
}
または
fun getStringLength(obj: Any): Int? {
// `&&`演算子の右側では、 `obj`の型が自動的に` String`に変換されます
if (obj is String && obj.length > 0)
return obj.length
return null
}
間隔
間隔の式は、inおよび!inで補足された演算子形式のrangeTo関数によって形成されます。
間隔は、同等の型に対して定義されていますが、整数プリミティブ型の場合、実装が最適化されています。 次には間隔を使用する例を挙げます。
for (i in 1..4) print(i) // “1234”を出力します
for (i in 4..1) print(i) // 何も出力しません
if (i in 1..10) { // 1 <= i && i <= 10に相当します
println(i)
}
for (i in 4 downTo 1 step 2) print(i) // 输出“42”
// stepを使用して間隔を指定します
for (i in 1..4 step 2) print(i) // “13”を出力します
for (i in 4 downTo 1 step 2) print(i) // “42”を出力します
// until関数を使用して、終了の要素を除外します
for (i in 1 until 10) { // i in [1, 10) 10を除外しました
println(i)
}
テストの例
fun main(args: Array<String>) {
print("ループで出力します:")
for (i in 1..4) print(i) // “1234”を出力します
println("\n----------------")
print("間隔を設定します:")
for (i in 1..4 step 2) print(i) // “13”を出力します
println("\n----------------")
print(" downToを使用します:")
for (i in 4 downTo 1 step 2) print(i) // “42”を出力します
println("\n----------------")
print(" untilを使用します:")
// until関数を使用して、終了の要素を除外します
for (i in 1 until 4) { // i in [1, 4) 4を除外しました
print(i)
}
println("\n----------------")
}
出力の結果:
ループで出力します:1234
----------------
間隔を設定します:13
----------------
downToを使用します:42
----------------
untilを使用します:123
----------------
コメントを残す