SlideShare a Scribd company logo
普段C#使っている僕から見た、Kotlin
@RyotaMurohoshi
いやー、みなさんすばらしいLTでしたね
残念ながら、
僕のLTは技術的な内容薄くなってます
過度な期待はしないで下さい
普段C#使っている僕から見た、Kotlin
おまえだれよ
• 室星亮太
• Unityでモバイルゲーム開発
• 3年くらい前までAndroid開発
• C#(Unityだと、dynamicやasyncなどは使えない)
• 26歳、プログラマ4年目
C#が好きです
もちろん、Kotlinも好きですよ
実はGroovyとかも好きです
この場にいる方は、
• Kotlinに少しでも興味がある方
• Kotlinをこれから勉強してたいと思っている方
• Kotlinを使っていて流行らせたい方
だと思います。
Kotlinを使っていて流行らせたい方
そして
Kotlin(勉強中で)仲間を増やしたい方
ちょっと聞いてください。
Scalaプログラマの方に
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
Scalaプログラマの方には、
やはりScalaで満足?
僕の主張
Kotlinを流行らせたい方、
C#プログラマの人に勧めるのいいのでは!
C#が大好きなC#プログラマ、
だけど仕事でJVM言語を使う必要がある方
(C#に割と近い機能を持つ)Kotlinでプロダクトを作りながら
C#6.0で加わったり・今後加わりそうな機能を試すの、
いいと思うんですよ!
(あくまで僕の妄想ですが...)
C#プログラマが、
Javaで何か書く必要が出てきたとして...
「あの機能がない」
「C#だとできるのに...」
ってなりそう(あくまで僕の妄想です)
あくまで僕の妄想です
例を挙げます
C#とKotlinにはあるけれど
Javaになくてつらい機能
個人的に第1位
例その1"名前付き引数
メソッド呼び出しが超読みやすくなる
例えばこんなメソッドがあったとて
fun reformat(
str: String,
normalizeCase: Boolean,
upperCaseFirstLetter: Boolean,
divideByCamelHumps: Boolean,
wordSeparator: Character) {
(略)
}
呼び出し側はこんな感じ
reformat(str, true, true, false, '_')
なるほど、わからん。実装を見ないと。
IDEだったら実装側にジャンプすればいいけれど
githubとかでこういうののリビューだるい
呼び出し側で名前付き引数を使うと!
reformat(
str,
normalizeCase = true,
uppercaseFirstLetter = true,
divideByCamelHumps = false,
wordSeparator = '_'
)
どの引数がどのような意味なのか、すんなり読める!
名前付き引数はデフォルト引数(C#のオプショナル引数)
と組み合わせるとさらに強力!
派手さはないけど、使えるところ多くて便利
例その2"拡張メソッド(拡張関数)
クラスにメソッドを追加したい、継承せずに
例えば...
java.u&li.Collec&onにisNotEmptyメソッドを追加したい
(要素が存在すればtrueを、空ならfalseを返すメソッド)
実は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()
(後略)
雑な解説
• 名前空間の下に関数が定義できる
• 拡張関数で関数の追加
• 単一式関数
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()
(後略)
C#から見たさっきの例
• 文法や定義できる場所は違うけどクラスに関数を追加できる
• C#6.0のexpression/bodiedみたいに式形式で関数を書ける
C##6.0だけでなく、更にその先
拡張プロパティ
/**
* 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
thisが無くても拡張関数(プロパティ)が呼べる
Test fun lastIndex() {
assertEquals(-1, empty.lastIndex)
assertEquals(1, data.lastIndex)
}
C#7.0で入るかどうか分からないけれど
ディスカッションされているもの、
Kotlinではもすでに使える!!!
普段C#使っている僕から見た、Kotlin
Kotlin、C#にわりと近い気がするの
Kotlin仲間増やすなら
Scalaバリバリの人を勧誘されるよりも
JVM言語をやる必要になったC#バリバリの方
勧誘されてはどうでしょう?
そして未来のC#は、
Kotlinと似ている部分が増える気がする
まとめ
C#erな僕は、Kotlinがすきです
蛇足
C#とかGroovyとか勉強していて
deprecateになっている機能・文法・クラスがあったり
歴史的な経緯で変えられないものが多いのがちょいつらい
Kotlinはそれらの失敗から学んだり、破壊的な変更ができたりす
る
のかな(?)
kotlinパッケージのメソッドのソース読むの面白い
Kotlinの文法の復習になると思うの
懇親会で
仕事では使わないかもしれない「言語」を学ぶ事と、仕事での「実用」について
お話しさせてもらえると嬉しいです

More Related Content

PPTX
DevOps勉強会
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
PDF
FlutterでBLEを
いい感じにする
PDF
UniRx の1歩目
PPTX
Linuxのsemaphoreとmutexを見る 
PPTX
世界一わかりやすいClean Architecture
PDF
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」
PPTX
初心者向けMongoDBのキホン!
DevOps勉強会
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
FlutterでBLEを
いい感じにする
UniRx の1歩目
Linuxのsemaphoreとmutexを見る 
世界一わかりやすいClean Architecture
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」
初心者向けMongoDBのキホン!

What's hot (20)

PPTX
CleanArchitecture 第4部 「コンポーネントの原則」
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
PDF
IL2CPPに関する軽い話
PPTX
がっつりMongoDB事例紹介
PDF
Dockerを支える技術
PDF
Try new transport protocol SRT (ver. 2)
PDF
【Unite Tokyo 2019】ライブエンターテイメントにおけるUnity
PDF
UniTask入門
PDF
初心者向けCTFのWeb分野の強化法
PPTX
Docker Tokyo
PPTX
【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?
PPTX
トランザクションをSerializableにする4つの方法
PPTX
本当は恐ろしい分散システムの話
PDF
できる!並列・並行プログラミング
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PPTX
WebRTC mediasoup on raspberrypi3
PDF
ワタシはSingletonがキライだ
PDF
Monad tutorial
CleanArchitecture 第4部 「コンポーネントの原則」
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
IL2CPPに関する軽い話
がっつりMongoDB事例紹介
Dockerを支える技術
Try new transport protocol SRT (ver. 2)
【Unite Tokyo 2019】ライブエンターテイメントにおけるUnity
UniTask入門
初心者向けCTFのWeb分野の強化法
Docker Tokyo
【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?
トランザクションをSerializableにする4つの方法
本当は恐ろしい分散システムの話
できる!並列・並行プログラミング
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
コンテナの作り方「Dockerは裏方で何をしているのか?」
WebRTC mediasoup on raspberrypi3
ワタシはSingletonがキライだ
Monad tutorial
Ad

Similar to 普段C#を使っている僕から見たKotlin (9)

PDF
Kotlinの紹介
PDF
Rubyistのためのkotlin紹介
PPTX
Java で書かれた Android アプリに Kotlin を適用させていく
PPTX
Java で書かれたAndroid アプリに Kotlin を適用させていく
PDF
Better Java なだけじゃない。Kotlin の思想と未来
PDF
NDS36 Kotlin Cute
PPTX
サーバサイド Kotlin
PDF
KotlinでROSノードを書いてみた
PDF
Potato03 KotlinでAndroidアプリ開発(後編)
Kotlinの紹介
Rubyistのためのkotlin紹介
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれたAndroid アプリに Kotlin を適用させていく
Better Java なだけじゃない。Kotlin の思想と未来
NDS36 Kotlin Cute
サーバサイド Kotlin
KotlinでROSノードを書いてみた
Potato03 KotlinでAndroidアプリ開発(後編)
Ad

More from Ryota Murohoshi (18)

PDF
UnityでC#6.0が使える未来がそろそろ来そう!
PDF
【Unity】気づいたら加わっていたあいつ【もくもく】
PDF
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
PDF
「var禁止」禁止
PDF
Javaのバージョニング問題の話しよっか
PDF
LINQ、Select連弾ってやります?
PDF
C#のList_TがIListを実装している件
PDF
どうしてこのコードエラーになるんですか?
PDF
広告ネイティブプラグインの辛かった話しよっか
PDF
UnityでC#を勉強しはじめた私の主張
PDF
T4使ってみた
PDF
UnityでのLINQ活用例
PDF
私とUnityとLINQと
PDF
「LINQ」っていう名前だけでも 覚えて帰ってください!
PDF
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
PDF
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
PDF
共変戻り値型って知ってますか?
PDF
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
UnityでC#6.0が使える未来がそろそろ来そう!
【Unity】気づいたら加わっていたあいつ【もくもく】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
「var禁止」禁止
Javaのバージョニング問題の話しよっか
LINQ、Select連弾ってやります?
C#のList_TがIListを実装している件
どうしてこのコードエラーになるんですか?
広告ネイティブプラグインの辛かった話しよっか
UnityでC#を勉強しはじめた私の主張
T4使ってみた
UnityでのLINQ活用例
私とUnityとLINQと
「LINQ」っていう名前だけでも 覚えて帰ってください!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
共変戻り値型って知ってますか?
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数

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