Kotlin Reference(一)-入門ガイド
23445 ワード
Kotlin Reference(一)-入門ガイド
商业転載を禁止します.ソースの住所を教えてください.http://kotlinlang.org/docs/reference Ktlin Reference一-入門ガイド 基礎文法 パッケージ構造定義 方法定義 は、局所変数 を定義する.注釈 文字列テンプレート出力 を使用する.使用条件式 は、nullの可能性のある値を使用して、空の値をチェックする .タイプチェックと自動モデルチェンジを使用して フォーサイクルを使用する whileサイクルを使う when表現を使う 使用区間 セットを使用します.
コードスタイル DoOs POJOsオブジェクト を作成します.メソッドパラメータのデフォルト値 は、List をフィルタリングする. MapList を巡回しました.使用区間 読み取り専用のList 読み取り専用のMap はMap にアクセスします.怠け者の性質 機能拡張 単例 を作成します.ショートカット ショートカット 空であれば、ステートメントを実行する .空きがなければ、動作を実行する . when条件文に戻り値 trycatch表現 if表現 Builder-style usage of methods that return Unit 単一行表現の方法 ウィスを使用してオブジェクトを呼び出すことができる複数の方法 . Java 7 s try with resource は、汎型情報を宣言する一般的な方法のための便利なフォーマット を提供する.は、空いているBooleanタイプ を使用しています.
符号化慣例 命名スタイル コロン Lambands ユニット Functions vs Propties 基礎文法
パッケージ構造の定義
定義されたパケット情報はソースファイルの最初の行でなければなりません.
2つの
定数の割り当てを使う
JavaとJava Scriptのように、Ktlinは単一の行の注釈とブロックの注釈をサポートしています.
文字列テンプレートを使って出力する
一つの引用がnullの使用を許可される場合は、nullableの明確な表記を使用しなければならない.
以下の方法は、
一つの表式があるタイプのインスタンスである場合、この表式のタイプはオペレーターが手動でチェックする必要があります.可変ではないローカル変数や属性のタイプが検出されると、明確なモデルチェンジが必要なくなります.
次の操作で一つの数字がある区間にあるかどうかを確認します.
集合を巡回する
ここではよく使われているものとあまり使われていないものが集められています.コードスタイルがよければ、GitHubで
DOsオブジェクトを作成します.
使用区間
val data=...val email=data[email]?throw IllagalStation Exception(「Email is missing!」)
空でない場合は操作を実行します.
このページには現在のKotlin言語のコードスタイルが含まれています.
名前付きスタイル
Javaの符号化慣例:ラクダピーク命名法 を使用します.類のイニシャル メソッドと属性の最初の文字小文字 4個のスペースを使って字下げする .共通の方法は、文書の注釈を追加する必要がある .
コロンをつける
コロンの役割がセパレートタイプと親タイプの場合は、コロンの前にスペースを追加する必要があります.区切りのインスタンスとタイプの場合、スペースを追加する必要はありません.
Lambda式では、括弧を区切るためにスペースを使用します.同様に、引数と関数の頭を区切るためにスペースも使用されます.
ユニット
関数の戻り値がユニットタイプの場合、戻り値タイプの宣言は無視できます.
通常、パラメータがない関数は読み取り専用属性に置き換えられます.
下記の規則を満たすときは、方法と属性を交換できます.異常を投げませんでした. 複雑度は0(1) です.簡単な計算です. と同じ戻り値
商业転載を禁止します.ソースの住所を教えてください.http://kotlinlang.org/docs/reference
パッケージ構造の定義
定義されたパケット情報はソースファイルの最初の行でなければなりません.
package my.demo
import java.util.*
//...
メソッドの定義2つの
Int
タイプのパラメータとInt
タイプの戻り値を有する方法を定義する.fun sum(a: Int, b: Int): Int {
return a + b
}
表式を含めて、戻り値を推論する方法を指定します.fun sum(a: Int, b: Int) = a + b
無意味のタイプUnit
の戻り値を定義する方法fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
無意味タイプUnit
は無視されてもよい.fun printSum(a: Int, b: Int) {
print(a + b)
}
ローカル変数を定義定数の割り当てを使う
val a: Int = 1
val b = 1 // Int
val c: Int //
c = 1 //
変数の割り当てを使うvar x = 5 // Int
x += 1
コメントJavaとJava Scriptのように、Ktlinは単一の行の注釈とブロックの注釈をサポートしています.
//
/*
/* */
*/
Javaとは違って、Ktlinのブロック注釈は入れ子が可能です.文字列テンプレートを使って出力する
fun main(args: Array<String>) {
if (args.size == 0) return
print("First argument: ${args[0]}")
}
条件式を使うfun max(a: Int, b: Int): Int {
if (a > b)
return a
else
return b
}
if-else
式を使用した場合fun max(a: Int, b: Int) = if (a > b) a else b
null可能な値を使って空の値をチェックします.一つの引用がnullの使用を許可される場合は、nullableの明確な表記を使用しなければならない.
以下の方法は、
str
がInt
タイプに変換できない場合、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
if (x != null && y != 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 y
print(x * y)
タイプチェックと自動変換を使う一つの表式があるタイプのインスタンスである場合、この表式のタイプはオペレーターが手動でチェックする必要があります.可変ではないローカル変数や属性のタイプが検出されると、明確なモデルチェンジが必要なくなります.
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// obj String
return obj.length
}
// if ,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
}
forループを使うfun main(args: Array<String>) {
for (arg in args)
print(arg)
}
またはfor (i in args.indices)
print(args[i])
whileループを使うfun main(args: Array<String>) {
var i = 0
while (i < args.size)
print(args[i++])
}
when表現を使う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")
}
}
使用区間次の操作で一つの数字がある区間にあるかどうかを確認します.
if (x in 1..y-1)
print("OK")
一つの数字が区間外にあるかどうかを確認します.if (x !in 0..array.lastIndex)
print("Out")
区間を巡回するfor (x in 1..5)
print(x)
集合を使う集合を巡回する
for (name in names)
println(name)
次の操作でセット内に特定のオブジェクトが含まれているかどうかを確認します.if (text in names) // names.contains(text) is called
print("Yes")
lamda表現を使って、集合をフィルタリングしてマッピングします.names
.filter { it.startsWith("A") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { print(it) }
コードスタイルここではよく使われているものとあまり使われていないものが集められています.コードスタイルがよければ、GitHubで
pull request
を使って貢献してください.DOsオブジェクトを作成します.
data class Customer(val name: String, val email: String)
上記の操作は、以下の機能を含むCustomer
類を提供しています. getters (and setters in case of vars) for all properties
equals()
hashCode()
toString()
copy()
component1(), component2(), …, for all properties
メソッドパラメータのデフォルト値fun foo(a: Int = 0, b: String = "") { ... }
Listをフィルタしますval positives = list.filter { x -> x > 0 }
または選択のためにより短い方法を提供します.val positives = list.filter { it > 0 }
$
を使って文字列を挿入します.println("Name $name")
オブジェクトチェックwhen (x) {
is Foo -> ...
is Bar -> ...
else -> ...
}
Map/Listを巡回for ((k, v) in map) {
println("$k -> $v")
}
k
、v
は、任意の名前をつけてもよい.使用区間
for (i in 1..100) { ... } // : 100
for (i in 1 until 100) { ... } // : 100
for (x in 2..10 step 2) { ... } // 2
for (x in 10 downTo 1) { ... } //
if (x in 1..10) { ... } // x
読み取り専用のListval list = listOf("a", "b", "c")
読み取り専用のMapval map = mapOf("a" to 1, "b" to 2, "c" to 3)
Mapにアクセスprintln(map["key"])
map["key"] = value
なまけ者根性val p: String by lazy {
// compute the string
}
機能拡張fun String.spaceToCamelCase() { ... }
"Convert this to camelcase".spaceToCamelCase()
単例を作成object Resource {
val name = "Name"
}
ショートカットの判定が空ですval files = File("Test").listFiles()
println(files?.size)
ショートカットの判定が空ですval files = File("Test").listFiles()
println(files?.size ?: "empty")
空の場合は声明を実行します.val data=...val email=data[email]?throw IllagalStation Exception(「Email is missing!」)
空でない場合は操作を実行します.
val data = ...
data?.let {
... // execute this block if not null
}
when条件文で値を返します.fun transform(color: String): Int {
return when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
}
‘try/catch’表現fun test() {
val result = try {
count()
} catch (e: ArithmeticException) {
throw IllegalStateException(e)
}
// Working with result
}
‘if’表現fun foo(param: Int) {
val result = if (param == 1) {
"one"
} else if (param == 2) {
"two"
} else {
"three"
}
}
Builder-style usage of methods that return Unitfun arrayOfMinusOnes(size: Int): IntArray {
return IntArray(size).apply { fill(-1) }
}
単一行表現の方法fun theAnswer() = 42
に等しいfun theAnswer(): Int {
return 42
}
以下は他のコードスタイルを効率的に統合し、よりシンプルなコードを生成します.fun transform(color: String): Int = when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
with
を使用してオブジェクトを呼び出すことができる複数の方法class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) { //draw a 100 pix square
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
Java 7’s try with resourceval stream = Files.newInputStream(Paths.get("/some/file.txt"))
stream.buffered().reader().use { reader ->
println(reader.readText())
}
一般的な情報を宣言する一般的な方法に便利なフォーマットを提供します.// public final class Gson {
// ...
// public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
// ...
inline fun T: Any> Gson.fromJson(json): T = this.fromJson(json, T::class.java)
空きタイプのBooleanを使用します.val b: Boolean? = ...
if (b == true) {
...
} else {
// `b` is false or null
}
コーディングの慣例このページには現在のKotlin言語のコードスタイルが含まれています.
名前付きスタイル
Javaの符号化慣例:
コロンをつける
コロンの役割がセパレートタイプと親タイプの場合は、コロンの前にスペースを追加する必要があります.区切りのインスタンスとタイプの場合、スペースを追加する必要はありません.
interface Foo<out T : Any> : Bar {
fun foo(a: Int): T
}
LambandsLambda式では、括弧を区切るためにスペースを使用します.同様に、引数と関数の頭を区切るためにスペースも使用されます.
list.filter { it > 10 }.map { element -> element * 2 }
lamda表式が短く、かつ額がはまっていない場合は、生命パラメータを明確にするのではなく、伝統的な慣行を使用することを推奨します.ユニット
関数の戻り値がユニットタイプの場合、戻り値タイプの宣言は無視できます.
fun foo() { // ": Unit" is omitted here
}
Functions vs Propties通常、パラメータがない関数は読み取り専用属性に置き換えられます.
下記の規則を満たすときは、方法と属性を交換できます.