SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
普段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の文法の復習になると思うの
懇親会で
仕事では使わないかもしれない「言語」を学ぶ事と、仕事での「実用」について
お話しさせてもらえると嬉しいです

Contenu connexe

Tendances

Tendances (20)

ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~
なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~
なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~
 
Addressables で大量のリソース管理・困りどころと解消法
Addressables で大量のリソース管理・困りどころと解消法Addressables で大量のリソース管理・困りどころと解消法
Addressables で大量のリソース管理・困りどころと解消法
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
DeNAの動画配信サービスを支えるインフラの内部 #denatechcon
DeNAの動画配信サービスを支えるインフラの内部  #denatechconDeNAの動画配信サービスを支えるインフラの内部  #denatechcon
DeNAの動画配信サービスを支えるインフラの内部 #denatechcon
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 

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

QtでC++開発環境構築
QtでC++開発環境構築QtでC++開発環境構築
QtでC++開発環境構築
You&I
 

Similaire à 普段C#を使っている僕から見たKotlin (10)

Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフター
 
Rでを作る
Rでを作るRでを作る
Rでを作る
 
ヤフーにおけるkotlinとのかかわり #kotlinfest
ヤフーにおけるkotlinとのかかわり #kotlinfestヤフーにおけるkotlinとのかかわり #kotlinfest
ヤフーにおけるkotlinとのかかわり #kotlinfest
 
QtでC++開発環境構築
QtでC++開発環境構築QtでC++開発環境構築
QtでC++開発環境構築
 
ソフトウェア開発が好きだ
ソフトウェア開発が好きだソフトウェア開発が好きだ
ソフトウェア開発が好きだ
 
Pydata_fukuoka_LT
Pydata_fukuoka_LTPydata_fukuoka_LT
Pydata_fukuoka_LT
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
 
第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン
 
QtとBuildrootの紹介
QtとBuildrootの紹介QtとBuildrootの紹介
QtとBuildrootの紹介
 

Plus de Ryota Murohoshi

Plus de Ryota Murohoshi (18)

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

Dernier

Dernier (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

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