44
普段C#使っている僕から見た、Kotlin @RyotaMurohoshi

普段C#を使っている僕から見たKotlin

Embed Size (px)

Citation preview

Page 1: 普段C#を使っている僕から見たKotlin

普段C#使っている僕から見た、Kotlin

@RyotaMurohoshi

Page 2: 普段C#を使っている僕から見たKotlin

いやー、みなさんすばらしいLTでしたね

Page 3: 普段C#を使っている僕から見たKotlin

残念ながら、僕のLTは技術的な内容薄くなってます

過度な期待はしないで下さい

Page 4: 普段C#を使っている僕から見たKotlin

普段C#使っている僕から見た、Kotlin

Page 5: 普段C#を使っている僕から見たKotlin

おまえだれよ• 室星亮太

• Unityでモバイルゲーム開発

• 3年くらい前までAndroid開発

• C#(Unityだと、dynamicやasyncなどは使えない)

• 26歳、プログラマ4年目

Page 6: 普段C#を使っている僕から見たKotlin

C#が好きですもちろん、Kotlinも好きですよ

実はGroovyとかも好きです

Page 7: 普段C#を使っている僕から見たKotlin

この場にいる方は、• Kotlinに少しでも興味がある方

• Kotlinをこれから勉強してたいと思っている方

• Kotlinを使っていて流行らせたい方

だと思います。

Page 8: 普段C#を使っている僕から見たKotlin

Kotlinを使っていて流行らせたい方そして

Kotlin(勉強中で)仲間を増やしたい方

Page 9: 普段C#を使っている僕から見たKotlin

ちょっと聞いてください。

Page 10: 普段C#を使っている僕から見たKotlin

Scalaプログラマの方にKotlinをすすめると...

Page 11: 普段C#を使っている僕から見たKotlin

Kotlin公式、Comparison-to-Scala-より

Taking'this'into'account,'if'you'are'happy'with'Scala,'you'probably'do'not'need'Kotlin

h"p://kotlinlang.org/docs/reference/comparison6to6scala.html

Page 12: 普段C#を使っている僕から見たKotlin

Scalaプログラマの方には、やはりScalaで満足?

Page 13: 普段C#を使っている僕から見たKotlin

僕の主張

Page 14: 普段C#を使っている僕から見たKotlin

Kotlinを流行らせたい方、C#プログラマの人に勧めるのいいのでは!

Page 15: 普段C#を使っている僕から見たKotlin

C#が大好きなC#プログラマ、だけど仕事でJVM言語を使う必要がある方(C#に割と近い機能を持つ)Kotlinでプロダクトを作りながら

C#6.0で加わったり・今後加わりそうな機能を試すの、

いいと思うんですよ!

Page 16: 普段C#を使っている僕から見たKotlin

(あくまで僕の妄想ですが...)

C#プログラマが、Javaで何か書く必要が出てきたとして...

Page 17: 普段C#を使っている僕から見たKotlin

「あの機能がない」「C#だとできるのに...」ってなりそう(あくまで僕の妄想です)

Page 18: 普段C#を使っている僕から見たKotlin

あくまで僕の妄想です

Page 19: 普段C#を使っている僕から見たKotlin

例を挙げます

Page 20: 普段C#を使っている僕から見たKotlin

C#とKotlinにはあるけれどJavaになくてつらい機能

個人的に第1位

Page 21: 普段C#を使っている僕から見たKotlin

例その1"名前付き引数メソッド呼び出しが超読みやすくなる

Page 22: 普段C#を使っている僕から見たKotlin

例えばこんなメソッドがあったとてfun reformat( str: String, normalizeCase: Boolean, upperCaseFirstLetter: Boolean, divideByCamelHumps: Boolean, wordSeparator: Character) {(略)}

Page 23: 普段C#を使っている僕から見たKotlin

呼び出し側はこんな感じreformat(str, true, true, false, '_')

なるほど、わからん。実装を見ないと。IDEだったら実装側にジャンプすればいいけれど

githubとかでこういうののリビューだるい

Page 24: 普段C#を使っている僕から見たKotlin

呼び出し側で名前付き引数を使うと!reformat( str, normalizeCase = true, uppercaseFirstLetter = true, divideByCamelHumps = false, wordSeparator = '_')

どの引数がどのような意味なのか、すんなり読める!

Page 25: 普段C#を使っている僕から見たKotlin

名前付き引数はデフォルト引数(C#のオプショナル引数)

と組み合わせるとさらに強力!

派手さはないけど、使えるところ多くて便利

Page 26: 普段C#を使っている僕から見たKotlin

例その2"拡張メソッド(拡張関数)クラスにメソッドを追加したい、継承せずに

Page 27: 普段C#を使っている僕から見たKotlin

例えば...

java.u&li.Collec&onにisNotEmptyメソッドを追加したい

(要素が存在すればtrueを、空ならfalseを返すメソッド)

実はKotlinでは、拡張関数でこれが標準で追加さていれる

Page 28: 普段C#を使っている僕から見たKotlin

h"ps://github.com/JetBrains/kotlin/blob/build90.12.1525/libraries/stdlib/src/kotlin/collec>ons/JU>l.kt@より

package kotlin

import java.util.*

(前略)

/** Returns true if the collection is not empty */public fun <T> Collection<T>.isNotEmpty(): Boolean = !isEmpty()

(後略)

Page 29: 普段C#を使っている僕から見たKotlin

雑な解説• 名前空間の下に関数が定義できる

• 拡張関数で関数の追加

• 単一式関数

Page 30: 普段C#を使っている僕から見たKotlin

h"ps://github.com/JetBrains/kotlin/blob/build90.12.1525/libraries/stdlib/src/kotlin/collec>ons/JU>l.kt@より

package kotlin

import java.util.*

(前略)

/** Returns true if the collection is not empty */public fun <T> Collection<T>.isNotEmpty(): Boolean = !isEmpty()

(後略)

Page 31: 普段C#を使っている僕から見たKotlin

C#から見たさっきの例• 文法や定義できる場所は違うけどクラスに関数を追加できる

• C#6.0のexpression/bodiedみたいに式形式で関数を書ける

Page 32: 普段C#を使っている僕から見たKotlin

C##6.0だけでなく、更にその先

Page 33: 普段C#を使っている僕から見たKotlin

拡張プロパティ/** * Returns the index of the last item in the list or -1 if the list is empty * * @sample test.collections.ListSpecificTest.lastIndex */public val <T> List<T>.lastIndex: Int get() = this.size() - 1

Page 34: 普段C#を使っている僕から見たKotlin

thisが無くても拡張関数(プロパティ)が呼べる Test fun lastIndex() { assertEquals(-1, empty.lastIndex) assertEquals(1, data.lastIndex) }

Page 35: 普段C#を使っている僕から見たKotlin

C#7.0で入るかどうか分からないけれどディスカッションされているもの、Kotlinではもすでに使える!!!

Page 36: 普段C#を使っている僕から見たKotlin

普段C#使っている僕から見た、Kotlin

Page 37: 普段C#を使っている僕から見たKotlin

Kotlin、C#にわりと近い気がするの

Page 38: 普段C#を使っている僕から見たKotlin

Kotlin仲間増やすならScalaバリバリの人を勧誘されるよりも

JVM言語をやる必要になったC#バリバリの方勧誘されてはどうでしょう?

Page 39: 普段C#を使っている僕から見たKotlin

そして未来のC#は、Kotlinと似ている部分が増える気がする

Page 40: 普段C#を使っている僕から見たKotlin

まとめ

C#erな僕は、Kotlinがすきです

Page 41: 普段C#を使っている僕から見たKotlin

蛇足

Page 42: 普段C#を使っている僕から見たKotlin

C#とかGroovyとか勉強していて

deprecateになっている機能・文法・クラスがあったり

歴史的な経緯で変えられないものが多いのがちょいつらい

Kotlinはそれらの失敗から学んだり、破壊的な変更ができたりする

のかな(?)

Page 43: 普段C#を使っている僕から見たKotlin

kotlinパッケージのメソッドのソース読むの面白い

Kotlinの文法の復習になると思うの

Page 44: 普段C#を使っている僕から見たKotlin

懇親会で

仕事では使わないかもしれない「言語」を学ぶ事と、仕事での「実用」について

お話しさせてもらえると嬉しいです