どうしてKotlinに完全に切り替えるべきですか?
17862 ワード
現代のプログラミング言語を使う時だ!
Kotlinという新しいプログラミング言語を教えてあげたいのですが、次のプロジェクトのために考えるべき理由を教えてあげたいと思います.私は昔Javaが大好きでした.しかし昨年、私はいつでもできるだけKotlinでプログラミングしていることに気づきました.この点に基づいて、Javaがより良い選択になる状況は本当に考えられません.
KotlinはJetBrainsによって開発された.実際、IntelliJやReSharperなどのIDEキットの背後にある人々がKotlinをキラキラさせたのです.それはとても優雅で、とても簡潔です.プログラミングを快適で効率的な体験にします.
KotlinはJavaScriptとマシンコードにコンパイルできますが、主な環境であるJVMに注目します.
そのため、コマンドではなくKotlinに完全に切り替える理由がたくさんあります.
0#Java相互運用性
KotlinはJavaと100%相互運用可能です.Javaの残りのプロジェクトでKotlinを使用し続けることができます.あなたの好きなJavaフレームワークはすべて使用できます.Kotlinでどんなフレームワークを作成しても、Javaの忠実な友达は喜んで受け入れます.
1#よく知っている文法
Kotlinは学術のために生まれた奇妙な言語ではない.その文法はOOP(オブジェクト向けプログラミング)分野からのプログラマーにとってよく知られています.入門者にとって、多かれ少なかれ理解しやすい.もちろん、Javaとは違うものもあります.たとえば、再設計されたコンストラクション関数と
2#文字列挿入
Java版の
3#タイプ推定
Kotlinはタイプを推定し、どこにいてもコードの可読性が向上すると感じます.
4#インテリジェントタイプ変換
Kotlinコンパイラはコードロジックを追跡します.可能であれば、タイプが自動的に変換されます.これは、
5#直感的な等価性判断
明示的に
6#デフォルトパラメータ
複数のパラメータの異なる類似の方法を定義する必要はありません(関数の再ロードは必要ありません):
7#名前付きパラメータ
デフォルトのパラメータとともに(使用)、ネーミングパラメータはコンストラクタに対する需要を消滅させます.
8#When式
式として使用したり、文として使用したりできます.パラメータを持つことも、パラメータを持たないこともできます.
9#属性
カスタム
10#データクラス
データクラスは、
11#オペレータリロード
あらかじめ定義されたオペレータのセットをリロードして、読みやすさを向上させることができます.
12#構造関数宣言
一部のオブジェクトは破棄できます.たとえば、反復マッピング(
13#範囲
可読性のため:
14#拡張関数
Javaを使用して1つの
古いクラスに新しい関数を追加する方法がある場合は、IDEがコードを入力するときに正しい関数を見つけることができます.Kotlinでは、このようにすることができます.
Kotlin標準ライブラリはJavaの元のタイプの機能を拡張しています.これは
15#Nullポインタセキュリティ
私たちはよくJava佳作を静的なタイプの言語にします.その中の
Kotlinは空でないタイプと空でないタイプを区別することによってこの問題を解決する.タイプのデフォルトは空ではありません.ただし、
Kotlinは、いつでも空のタイプにアクセスするように強制しています.NPEに注意してください.
しかし、時にはこれは少し余計に見えるかもしれません.しかし、この特性に多少感謝しなければならない.インテリジェントなタイプ変換があります.いつでも、可能な限り空のタイプを空でないタイプのインテリジェントな変換に変換します.
セキュリティコール
セキュリティコールはチェーン化できます.これにより、ネストされた
もしあなたが好きなものが一つもなかったら、あなたは絶対にNPEが必要です!明示的な質問をしなければなりません.
16#より良いLambda
ねえ、これはいいlambdaシステムです.読みやすさと簡潔さを完璧にバランスさせています.賢明な言語設計の選択に感謝しましょう.文法は直接的です.
賢明がどこにあるか見てみましょうlambdaを最後に置くか、メソッドにパラメータが1つしかない場合は、メソッド呼び出しのカッコを削除できます. 単一パラメータのlambdaのパラメータを選択しない場合は、デフォルトの名前は
上記の説明を合わせると、次の3行のコードが表示されます.
これにより、よりシンプルな関数コードを作成できます.その感動的な点を見てみましょう.
Kotlinのlambdaシステムは拡張関数を加え,DSLの作成に理想的な選択となった.Androidが開発したAnkoコードをDSLとして検出した例:
17#IDEサポート
Kotlinを上手にしたいなら、いくつかの選択肢があります.しかし、KotlinがセットになったIntelliJを強くお勧めします.その特性はプログラミング言語言語とIDEの設計者が同じグループのメリットであることを説明している.
小さくて美しい例をあげましょう.Stack OverflowからJavaコードを初めてコピーすると、次のようなダイアログボックスが表示されます.
拡張読書:『Kotlin実戦』 Kotlin on Android. Now official Why Kotlin is my next programming language Scala vs Kotlin Swift is like Kotlin The Road to Gradle Script Kotlin 1.0 Introducing Kotlin support in Spring Framework 5.0 10 cool things about Kotlin Kotlin full stack application example Why I abandoned Java in favour of Kotlin I used Kotlin at Hackathon From Java to Kotlin Kotlin Idioms
Why you should totally switch to Kotlin
Kotlinという新しいプログラミング言語を教えてあげたいのですが、次のプロジェクトのために考えるべき理由を教えてあげたいと思います.私は昔Javaが大好きでした.しかし昨年、私はいつでもできるだけKotlinでプログラミングしていることに気づきました.この点に基づいて、Javaがより良い選択になる状況は本当に考えられません.
KotlinはJetBrainsによって開発された.実際、IntelliJやReSharperなどのIDEキットの背後にある人々がKotlinをキラキラさせたのです.それはとても優雅で、とても簡潔です.プログラミングを快適で効率的な体験にします.
KotlinはJavaScriptとマシンコードにコンパイルできますが、主な環境であるJVMに注目します.
そのため、コマンドではなくKotlinに完全に切り替える理由がたくさんあります.
0#Java相互運用性
KotlinはJavaと100%相互運用可能です.Javaの残りのプロジェクトでKotlinを使用し続けることができます.あなたの好きなJavaフレームワークはすべて使用できます.Kotlinでどんなフレームワークを作成しても、Javaの忠実な友达は喜んで受け入れます.
1#よく知っている文法
Kotlinは学術のために生まれた奇妙な言語ではない.その文法はOOP(オブジェクト向けプログラミング)分野からのプログラマーにとってよく知られています.入門者にとって、多かれ少なかれ理解しやすい.もちろん、Javaとは違うものもあります.たとえば、再設計されたコンストラクション関数と
val
、var
変数宣言.以下に示すコードの大部分はベースです.class Foo {
val b: String = "b" // val means unmodifiable
var i: Int = 0 // var means modifiable
fun hello() {
val str = "Hello"
print("$str World")
}
fun sum(x: Int, y: Int): Int {
return x + y
}
fun maxOf(a: Float, b: Float) = if (a > b) a else b
}
2#文字列挿入
Java版の
String.format()
のようです.しかし、よりスマートで、より読み取り可能です.言語に組み込まれていますval x = 4
val y = 7
print("sum of $x and $y is ${x + y}") // sum of 4 and 7 is 11
3#タイプ推定
Kotlinはタイプを推定し、どこにいてもコードの可読性が向上すると感じます.
val a = "abc" // type inferred to String
val b = 4 // type inferred to Int
val c: Double = 0.7 // type declared explicitly
val d: List = ArrayList() // type declared explicitly
4#インテリジェントタイプ変換
Kotlinコンパイラはコードロジックを追跡します.可能であれば、タイプが自動的に変換されます.これは、
instanceof
チェックの後に明示的なタイプ変換が必要ないことを意味します.if (obj is String) {
print(obj.toUpperCase()) // obj is now known to be a String
}
5#直感的な等価性判断
明示的に
equals()
を呼び出すことはできません.現在==
オペレータは構造の等価性をチェックします.val john1 = Person("John")
val john2 = Person("John")
john1 == john2 // true (structural equality)
john1 === john2 // false (referential equality)
6#デフォルトパラメータ
複数のパラメータの異なる類似の方法を定義する必要はありません(関数の再ロードは必要ありません):
fun build(title: String, width: Int = 800, height: Int = 600) {
Frame(title, width, height)
}
7#名前付きパラメータ
デフォルトのパラメータとともに(使用)、ネーミングパラメータはコンストラクタに対する需要を消滅させます.
build("PacMan", 400, 300) // equivalent
build(title = "PacMan", width = 400, height = 300) // equivalent
build(width = 400, height = 300, title = "PacMan") // equivalent
8#When式
switch...case...
は、より読み取りやすく、より柔軟なwhen
式に置き換えられます.when (x) {
1 -> print("x is 1")
2 -> print("x is 2")
3, 4 -> print("x is 3 or 4")
in 5..10 -> print("x is 5, 6, 7, 8, 9, or 10")
else -> print("x is out of range")
}
式として使用したり、文として使用したりできます.パラメータを持つことも、パラメータを持たないこともできます.
val res: Boolean = when {
obj == null -> false
obj is String -> true
else -> throw IllegalStateException()
}
9#属性
カスタム
set
およびget
動作を公開フィールドに追加できます.これは、意味のないgetter
とsetter
がコードを膨張させないことを意味します.class Frame {
var width: Int = 800
var height: Int = 600
val pixels: Int
get() = width * height
}
10#データクラス
データクラスは、
`toString()
,equals()
,hashCode()
,およびcopy()
を含むPOJO
である.Javaとは異なり、100行を超えるコードはありません.data class Person(val name: String,
var email: String,
var age: Int)
val john = Person("John", "[email protected]", 112)
11#オペレータリロード
あらかじめ定義されたオペレータのセットをリロードして、読みやすさを向上させることができます.
data class Vec(val x: Float, val y: Float) {
operator fun plus(v: Vec) = Vec(x + v.x, y + v.y)
}
val v = Vec(2f, 3f) + Vec(4f, 1f)
12#構造関数宣言
一部のオブジェクトは破棄できます.たとえば、反復マッピング(
map
)に非常に役立ちます.for ((key, value) in map) {
print("Key: $key")
print("Value: $value")
}
13#範囲
可読性のため:
for (i in 1..100) { ... }
for (i in 0 until 100) { ... }
for (i in 2..10 step 2) { ... }
for (i in 10 downTo 1) { ... }
if (x in 1..10) { ... }
14#拡張関数
Javaを使用して1つの
List
オブジェクトをソートしたのを初めて覚えていますか?sort
関数が見つかりません.だから、指導者に聞いたり、Googleに勉強したりしなければなりません.その後、Collections.sort()
オブジェクトを大文字に変換する必要がある場合は、自分のアシスタント関数を作成します.String
という関数を知らないからです.古いクラスに新しい関数を追加する方法がある場合は、IDEがコードを入力するときに正しい関数を見つけることができます.Kotlinでは、このようにすることができます.
fun String.replaceSpaces(): String {
return this.replace(' ', '_')
}
val formatted = str.replaceSpaces()
Kotlin標準ライブラリはJavaの元のタイプの機能を拡張しています.これは
StringUtils.capitalize()
特に必要なものですね.str.removeSuffix(".txt")
str.capitalize()
str.substringAfterLast("/")
str.replaceAfter(":", "classified")
15#Nullポインタセキュリティ
私たちはよくJava佳作を静的なタイプの言語にします.その中の
String
タイプの変数は、String
オブジェクトを指すことを保証しません.String
を指す可能性があります.これまでよく行われてきたが,静的タイプ検査によって否定された.その結果、Java開発者は永続的なnull
恐怖の中で生きざるを得なかった.Kotlinは空でないタイプと空でないタイプを区別することによってこの問題を解決する.タイプのデフォルトは空ではありません.ただし、
NullPointerException
を追加することで空にすることができる.このように:var a: String = "abc"
a = null // compile error
var b: String? = "xyz"
b = null // no problem
Kotlinは、いつでも空のタイプにアクセスするように強制しています.NPEに注意してください.
val x = b.length // compile error: b might be null
しかし、時にはこれは少し余計に見えるかもしれません.しかし、この特性に多少感謝しなければならない.インテリジェントなタイプ変換があります.いつでも、可能な限り空のタイプを空でないタイプのインテリジェントな変換に変換します.
if (b == null) return
val x = b.length // no problem
セキュリティコール
?
も使用できます.NPEを投げ出すのではなく、空のポインタになります.val x = b?. // type of x is nullable Int
セキュリティコールはチェーン化できます.これにより、ネストされた
?.
チェックを回避することができる.私たちは時々他の言語でこのように書きます.if not null
ではなく、個別のデフォルト値がほしい場合は、3元オペレータnull
を使用します.val name = ship?.captain?.name ?: "unknown"
もしあなたが好きなものが一つもなかったら、あなたは絶対にNPEが必要です!明示的な質問をしなければなりません.
val x = b?.length ?: throw NullPointerException() // same as below
val x = b!!.length // same as above
16#より良いLambda
ねえ、これはいいlambdaシステムです.読みやすさと簡潔さを完璧にバランスさせています.賢明な言語設計の選択に感謝しましょう.文法は直接的です.
val sum = { x: Int, y: Int -> x + y } // type: (Int, Int) -> Int
val res = sum(4,7) // res == 11
賢明がどこにあるか見てみましょう
?:
です.上記の説明を合わせると、次の3行のコードが表示されます.
numbers.filter({ x -> x.isPrime() })
numbers.filter { x -> x.isPrime() }
numbers.filter { it.isPrime() }
これにより、よりシンプルな関数コードを作成できます.その感動的な点を見てみましょう.
persons
.filter { it.age >= 18 }
.sortedBy { it.name }
.map { it.email }
.forEach { print(it) }
Kotlinのlambdaシステムは拡張関数を加え,DSLの作成に理想的な選択となった.Androidが開発したAnkoコードをDSLとして検出した例:
verticalLayout {
padding = dip(30)
editText {
hint = “Name”
textSize = 24f
}
editText {
hint = “Password”
textSize = 24f
}
button(“Login”) {
textSize = 26f
}
}
17#IDEサポート
Kotlinを上手にしたいなら、いくつかの選択肢があります.しかし、KotlinがセットになったIntelliJを強くお勧めします.その特性はプログラミング言語言語とIDEの設計者が同じグループのメリットであることを説明している.
小さくて美しい例をあげましょう.Stack OverflowからJavaコードを初めてコピーすると、次のようなダイアログボックスが表示されます.
拡張読書:
Why you should totally switch to Kotlin