SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Rubyistのための
Kotlin紹介
2013/07/06 @patorash
名前:尾古 豊明
twitter: @patorash
所属:株式会社リゾーム
業務内容:
RoRでショッピングセンター向けの
グループウェアを作っています。
また週一度、チーム勉強会を、
月一度、チームLT会をしています。
自己紹介
今日はOkayama RubyKaigiですが、
Kotlinの話をします。
Kotlinのこと知ってる人は
手を上げてください。
(´・ω・`) ショボーン
1. JetBrains社が開発しているJVM言語。
2. Java,Groovy,Scalaなどのいいとこ取り。
3. Javaと同じくらい速い。
4. Javaとの相互運用生に優れる。
5. Android上での動作が可能。
6. IDEはIntelliJ IDEAのみ。
Kotlinとは?(Wikipediaより抜粋)
1. 型安全(静的型付 & 型推論)
2. Null安全
a. Nullの可能性があるところをコンパイラが指摘し
てくれる。
3. 高階関数・ローカル関数・関数リテラル・ク
ロージャ・インライン関数(未実装)・拡張関数
など、
関数機能がとても強力!!
4. mix-in
Kotlinの特徴
所感
KotlinとRubyは結構似ている!
Hello worldしてみる。
package com.example.sample
fun main(args : Array<String>) {
println("Hello world.")
} セミコロン不要
名前空間レベルに
関数を定義。 型が引数の後ろ
他の基本的な機能も見てみる
package com.example.sample
class User(name : String, age : Int) {
val name = name
val age = age
{
// コンストラクタ
}
fun hello() : String {
return "Hello! My name is ${name}. ${age} years old."
}
}
fun main(args : Array<String>) {
val sam = User("Sam", 25)
val bob = User(age = 30, name = "Bob")
println(bob.hello()) // => Hello! My name is Bob.30years old.
}
コンストラクタ
Rubyのように、
文字列の中に変数を
埋め込むことが可能。
型推論のため、
型宣言が不要
戻り値の型を関数の
最後に書く
インスタンス化にnew
は不要
名前付き引数も使える。
Rubyも2.0からできる。
fun main(args: Array<String>) {
var sam : String?
sam = null
sam.toUpperCase() // コンパイルできない
sam?.toUpperCase() // nullなら何もしない
sam!!.toUpperCase() // ぬるぽで落ちる
}
nullの可能性がある
場合は?付きで型宣言
null安全。コンパイラが
nullの可能性を潰してくれ
る。
?.だと、nullなら
何もしない
!!.だと、開発者側がnullはあり得ないと
決めつける。nullがきたらぬるぽ発生
する。
条件分岐を見てみる
fun main(args: Array<String>) {
val age = 25
val is_adult = if(age >= 20) {
"成人"
} else {
"未成年"
}
println(is_adult) // => 成人
val generation = when (age) {
0,1,2,3,4,5,6 -> "幼児"
in 7..12 -> "小学生"
in 13..15 -> "中学生"
in 16..18 -> "高校生"
in 19..22 -> "大学生"
else -> {
var adult = "社"
adult += "会"
adult += "人"
adult
}
}
println(generation) // => 社会人
}
if文ではなく、if式なので、戻り値があ
る。Rubyと同じ。
when式。Javaのswitch文に近い。
Rubyのcase式と似ている。
戻り値がある。
elseが必須。
条件を一度に複数指定することができる。
レンジ(1..99)の指定も可能。
-> 以降は関数リテラルでもよい。
関数機能を見てみる
fun main(args: Array<String>) {
"Sam".hello() // => Hello, Sam!
}
fun String.hello() {
println("Hello, ${this}!")
}
継承することなしにクラスに
メソッドを追加できる。
final宣言されたクラスに対しても有効。
Rubyのオープンクラスみたいなもの。
拡張関数
fun main(args: Array<String>) {
hello()
}
fun hello() {
fun world():String {
return "world!"
}
println("Hello, ${world()}") // Hello, world!
}
関数内に関数を定義できる。
ローカル関数
fun main(args: Array<String>) {
val hello = {
(str:String) -> println("Hello! ${str}.")
}
hello("Sam") // Hello! Sam.
array("Suzan", "Bob", "Tom").forEach(hello)
// ちなみにforEachはRubyのeach文に似てる
// 関数リテラルと同じ処理はこうなる
array("Suzan", "Bob", "Tom").forEach {
println("Hello! ${it}.")
}
}
関数を変数に代入できる。
returnは要らない。最後の式が戻り値とみなされ
る。Procみたいなもの。
関数リテラル
fun main(args: Array<String>) {
hello("Sam", "Mike") {(name) ->
"Hello!! ${name}!!"
}
hello("太郎", "次郎") {(name) ->
"こんにちは!${name}"
}
}
fun hello(str1:String, str2:String, f: (String) -> String) {
println(str1)
println(str2)
println(f(str1))
}
引数に関数リテラル
を受け取る。
yieldみたいなもの。
高階関数
共通部分
一部違う処理を関数
リテラルに任せる。
違う言語で挨拶するという
一部違う処理を関数リテラ
ルに任せる。
fun main(args: Array<String>) {
var i = 0
fun countUp() {
i++
}
countUp()
println(i) // => 1
countUp()
println(i) // => 2
countUp()
println(i) // => 3
}
関数リテラルやローカル関数が、外側で定義され
ている変数を見たり書き換えたりすることができ
る。
クロージャ
他にもあるけど(mix-inとか)
Kotlinって、結構Rubyに
似ているところあるよね?
ご清聴ありがとうございました。

Más contenido relacionado

La actualidad más candente

松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピール松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピール
Sho Hashimoto
 
るりまの1/nはMatsue.rbでできています。
るりまの1/nはMatsue.rbでできています。るりまの1/nはMatsue.rbでできています。
るりまの1/nはMatsue.rbでできています。
Sho Hashimoto
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
Yoji Shidara
 
Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理
Sugawara Genki
 

La actualidad más candente (20)

slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
 
開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy
 
コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話
 
First step of Rails Contribute‎ #shibuyarb
First step of Rails Contribute‎ #shibuyarbFirst step of Rails Contribute‎ #shibuyarb
First step of Rails Contribute‎ #shibuyarb
 
Rubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarbRubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarb
 
プリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHirobaプリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHiroba
 
松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピール松江Ruby会議03 LT るりまアピール
松江Ruby会議03 LT るりまアピール
 
るりまの1/nはMatsue.rbでできています。
るりまの1/nはMatsue.rbでできています。るりまの1/nはMatsue.rbでできています。
るりまの1/nはMatsue.rbでできています。
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
 
KPTは2回目が大切なのに…
KPTは2回目が大切なのに…KPTは2回目が大切なのに…
KPTは2回目が大切なのに…
 
Hello Ruby
Hello RubyHello Ruby
Hello Ruby
 
計算数学
計算数学計算数学
計算数学
 
RFinanceJはじめました
RFinanceJはじめましたRFinanceJはじめました
RFinanceJはじめました
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
Kotlinにお触り
Kotlinにお触りKotlinにお触り
Kotlinにお触り
 
GC本読んでJSで偽GC作った
GC本読んでJSで偽GC作ったGC本読んでJSで偽GC作った
GC本読んでJSで偽GC作った
 
Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理
 

Similar a Rubyistのためのkotlin紹介

KotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみたKotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみた
豊明 尾古
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
Koichi Sakata
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
Satoshi KOBAYASHI
 

Similar a Rubyistのためのkotlin紹介 (20)

Kotlinのwebフレームワーク探訪
Kotlinのwebフレームワーク探訪Kotlinのwebフレームワーク探訪
Kotlinのwebフレームワーク探訪
 
KotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみたKotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみた
 
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろうかわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪
 
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけどKotlinこんなん出ましたけど
Kotlinこんなん出ましたけど
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
KotlinでWebアプリ開発
KotlinでWebアプリ開発KotlinでWebアプリ開発
KotlinでWebアプリ開発
 
KotlinでROSノードを書いてみた
KotlinでROSノードを書いてみたKotlinでROSノードを書いてみた
KotlinでROSノードを書いてみた
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
 
nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slide
 
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
 
YJTC18 C-1 Kotlin導入の状況と展望
YJTC18 C-1 Kotlin導入の状況と展望YJTC18 C-1 Kotlin導入の状況と展望
YJTC18 C-1 Kotlin導入の状況と展望
 
mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論
 

Más de 豊明 尾古

Más de 豊明 尾古 (18)

OSS-DB 取得のススメ
OSS-DB 取得のススメOSS-DB 取得のススメ
OSS-DB 取得のススメ
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について
 
ActiveRecord::Enumのススメ
ActiveRecord::EnumのススメActiveRecord::Enumのススメ
ActiveRecord::Enumのススメ
 
便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips
 
ウェブアプリケーションのためのユニバーサルデザインを読んだので共有する
ウェブアプリケーションのためのユニバーサルデザインを読んだので共有するウェブアプリケーションのためのユニバーサルデザインを読んだので共有する
ウェブアプリケーションのためのユニバーサルデザインを読んだので共有する
 
Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
 
Slimの紹介
Slimの紹介Slimの紹介
Slimの紹介
 
Calabashでbddしようぜ
CalabashでbddしようぜCalabashでbddしようぜ
Calabashでbddしようぜ
 
Rubotoを試してみた
Rubotoを試してみたRubotoを試してみた
Rubotoを試してみた
 
Successful git
Successful gitSuccessful git
Successful git
 
アプリ内課金してみた
アプリ内課金してみたアプリ内課金してみた
アプリ内課金してみた
 
Webデザイナーのためのandroid用レイアウト講座
Webデザイナーのためのandroid用レイアウト講座Webデザイナーのためのandroid用レイアウト講座
Webデザイナーのためのandroid用レイアウト講座
 
Android 3.Xアプリを開発してみて
Android 3.Xアプリを開発してみてAndroid 3.Xアプリを開発してみて
Android 3.Xアプリを開発してみて
 
Gae開発入門
Gae開発入門Gae開発入門
Gae開発入門
 
ABC2011 Winter #jag4
ABC2011 Winter #jag4ABC2011 Winter #jag4
ABC2011 Winter #jag4
 
初めてのC2DM
初めてのC2DM初めてのC2DM
初めてのC2DM
 

Rubyistのためのkotlin紹介