SlideShare a Scribd company logo
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に
似ているところあるよね?
ご清聴ありがとうございました。

More Related Content

PDF
Kotlinの紹介
PDF
Rubyist started to learn Groovy - things important to leran new LL
PDF
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
PDF
ROS2.0時代に備えたc++11/14
PPTX
Crystal勉強会#4 LT資料
PDF
Kotlin as an AltJS
PDF
Logcatの話
PDF
Rubyボードハンズオンテキスト
Kotlinの紹介
Rubyist started to learn Groovy - things important to leran new LL
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
ROS2.0時代に備えたc++11/14
Crystal勉強会#4 LT資料
Kotlin as an AltJS
Logcatの話
Rubyボードハンズオンテキスト

What's hot (20)

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

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

PPTX
Kotlin が公式サポートになったので Kotlin の話
PPTX
サーバサイド Kotlin
PPTX
Java で書かれたAndroid アプリに Kotlin を適用させていく
PPTX
Java で書かれた Android アプリに Kotlin を適用させていく
PPTX
PDF
Kotlin handson
PDF
KotlinでROSノードを書いてみた
PDF
Kotlinことはじめ -まずは触って動かしてみよう-
PDF
NDS36 Kotlin Cute
PDF
KotlinでWebアプリ開発
PDF
もう一度Kotlinの話をしよう #ndsmeetup4
PDF
Kotlinのwebフレームワーク探訪
PDF
Kotlinアンチパターン
PDF
KotlinAndroidLibを使ってみた
PPTX
Kotlin 使いになりました
PPTX
コードで感じるKotlin入門
PPTX
YJTC18 C-1 Kotlin導入の状況と展望
PDF
Potato03 KotlinでAndroidアプリ開発(後編)
PPTX
Kotlinについて学んだコト
PPTX
Kotlinことはじめ
Kotlin が公式サポートになったので Kotlin の話
サーバサイド Kotlin
Java で書かれたAndroid アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
Kotlin handson
KotlinでROSノードを書いてみた
Kotlinことはじめ -まずは触って動かしてみよう-
NDS36 Kotlin Cute
KotlinでWebアプリ開発
もう一度Kotlinの話をしよう #ndsmeetup4
Kotlinのwebフレームワーク探訪
Kotlinアンチパターン
KotlinAndroidLibを使ってみた
Kotlin 使いになりました
コードで感じるKotlin入門
YJTC18 C-1 Kotlin導入の状況と展望
Potato03 KotlinでAndroidアプリ開発(後編)
Kotlinについて学んだコト
Kotlinことはじめ
Ad

More from 豊明 尾古 (18)

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

Rubyistのためのkotlin紹介