Kotlin学習ノート(一)
学習参考文書:http://www.kotlinlang.org/docs/reference/basic-syntax.html
名前を包む
パッケージ名はファイルの一番上にあります。
Imports
デフォルトのimport以外に、各ファイルには独自のimportコマンドが含まれます。
私たちはパッケージ名を導入することができます。このパッケージに導入されたすべてのコンテンツを含みます。(クラス、関数など)
宣言関数
戻り値の関数は次の例を見てください。この関数sumには2つのIntパラメータがあり、関数の戻り値の種類はIntです。
以下の関数は、戻り値がない関数、または関数は、実際の意味がない値を返します。UnitとJavaのvoid機能は似ています。
ローカル変数を宣言
一回だけローカル変数を割り当てます。
文字列テンプレートを使う
条件式を使う
空の値と確認nullを使う
1つの参照値は、値がNullの場合、nullであるかどうかを詳細に示す必要があります。以下の例では、この関数が整数で返されない場合、Nullが返されます。
タイプ検出用法と自動タイプ変換
式がタイプのインスタンスである場合は、タイプチェックです。可変ではないローカル変数または属性が特定のタイプの場合、タイプ変換は不要です。
ループを使う
あるいはこのように書いてもいいです。
条件式
数値の使用範囲
以下の操作は、数値が数値範囲内にあるかどうかを確認することです。
集合の使い方
集合を巡回:
名前を包む
パッケージ名はファイルの一番上にあります。
package my.demo
import java.util.*
ディレクトリとパッケージにマッチする必要はありません。ソースファイルは任意のファイルシステムに置くことができます。See Packages.ソースファイルは、1つのパケットの開始を宣言するために使用できます。package foo.bar
fun baz() {}
class Goo {}
// ...
以上のソースファイルの内容(クラスと関数を含む)はパッケージの声明に含まれています。したがって、上記の例では、baz()のフルネームはfoo.bar.baz、Goo類のフルネームはfoo.bar.Gooです。ステートメントパッケージがない場合、ソースファイルの内容は名前のない「default」パッケージに属します。Imports
デフォルトのimport以外に、各ファイルには独自のimportコマンドが含まれます。
私たちはパッケージ名を導入することができます。このパッケージに導入されたすべてのコンテンツを含みます。(クラス、関数など)
import foo.Bar //
このように導入することもできます。import foo.* //
import foo.Bar // Bar is accessible
import bar.Bar as bBar // bBar stands for 'bar.Bar'
Visibility of Top-level Declarations
トップステートメントがプライベートである場合、その文書はプライベートです。宣言関数
戻り値の関数は次の例を見てください。この関数sumには2つのIntパラメータがあり、関数の戻り値の種類はIntです。
fun sum(a: Int, b: Int): Int {
return a + b
}
関数を表式で表し、戻り値の種類として表現します。fun sum(a: Int, b: Int) = a + b
戻り値のない関数以下の関数は、戻り値がない関数、または関数は、実際の意味がない値を返します。UnitとJavaのvoid機能は似ています。
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
キーユニットは無視できます。書きません。public fun printSum(a: Int, b: Int) {
print(a + b)
}
See Funtions.ローカル変数を宣言
一回だけローカル変数を割り当てます。
val a: Int = 1
val b = 1 // Int
val c: Int //
c = 1 //
変数var x = 5 // `Int` type is inferred
x += 1
See also Propties And Fields.文字列テンプレートを使う
fun main(args: Array<String>) {
if (args.size() == 0) return
print("First argument: ${args[0]}")
}
See String templates.条件式を使う
fun max(a: Int, b: Int): Int {
if (a > b)
return a
else
return b
}
表式を使うこともできます。fun max(a: Int, b: Int) = if (a > b) a else b
See if-expressions.空の値と確認nullを使う
1つの参照値は、値がNullの場合、nullであるかどうかを詳細に示す必要があります。以下の例では、この関数が整数で返されない場合、Nullが返されます。
fun parseInt(str: String): Int? {
// ...
}
戻り値を使うと空の関数になります。fun main(args: Array<String>) {
if (args.size() < 2) {
print("Two integers expected")
return
}
val x = parseInt(args[0])
val y = parseInt(args[1])
// Using `x * y` yields error because they may hold nulls. x y Null
if (x != null && y != null) {
// x and y are automatically cast to non-nullable after null check Null ,x y
print(x * y)
}
}
あるいはこのように書きます // ...
if (x == null) {
print("Wrong number format in '${args[0]}'")
return
}
if (y == null) {
print("Wrong number format in '${args[1]}'")
return
}
// x and y are automatically cast to non-nullable after null check
print(x * y)
See Null-safety.タイプ検出用法と自動タイプ変換
式がタイプのインスタンスである場合は、タイプチェックです。可変ではないローカル変数または属性が特定のタイプの場合、タイプ変換は不要です。
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` is automatically cast to `String` in this branch
return obj.length
}
// `obj` is still of type `Any` outside of the type-checked branch
return null
}
備考:この関数はnullまたは整数に戻ります。これはJavaより柔軟です。戻りタイプはこのように書きました。fun getStringLength(obj: Any): Int? {
if (obj !is String)
return null
// `obj` is automatically cast to `String` in this branch
return obj.length
}
or evenfun getStringLength(obj: Any): Int? {
// `obj` is automatically cast to `String` on the right-hand side of `&&`
if (obj is String && obj.length > 0)
return obj.length
return null
}
See Class and Type casts.ループを使う
fun main(args: Array<String>) {
for (arg in args)
print(arg)
}
備考:for循環使用キーワードInt?
が行うあるいはこのように書いてもいいです。
for (i in args.indices)
print(args[i])
See for loop.条件式
fun cases(obj: Any) {
when (obj) {
1 -> print("One")
"Hello" -> print("Greeting")
is Long -> print("Long")
!is String -> print("Not a string")
else -> print("Unknown")
}
}
備考:この条件式は比較的柔軟で、整数、文字列の値を比較できます。タイプを判断することもできます。また、デフォルトのelseもあります。数値の使用範囲
以下の操作は、数値が数値範囲内にあるかどうかを確認することです。
if (x in 1..y-1)
print("OK")
数値が数値の範囲外にあるかどうかを確認します。if (x !in 0..array.lastIndex)
print("Out")
数値範囲を巡回:for (x in 1..5)
print(x)
See Ranges.集合の使い方
集合を巡回:
for (name in names)
println(name)
次の操作は、セットにオブジェクトが含まれているかどうかを確認します。if (text in names) // names.contains(text) is called
print("Yes")
関数でフィルタリングし、Mapセットを巡回します。names.filter { it.startsWith("A") }.sortBy { it }.map { it.toUpperCase() }.forEach { print(it)
}
See Higher-order functions and Lambands.