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は...
1. 型安全(静的型付 & 型推論)
2. Null安全
a. Nullの可能性があるところをコンパイラが指摘し
てくれる。
3. 高階関数・ローカル関数・関数リテラル・ク
ロージャ・インライン関数(未実装)・拡張関数
など、
関数機能がとても...
所感
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()...
fun main(args: Array<String>) {
var sam : String?
sam = null
sam.toUpperCase() // コンパイルできない
sam?.toUpperCase() // nullなら何も...
条件分岐を見てみる
fun main(args: Array<String>) {
val age = 25
val is_adult = if(age >= 20) {
"成人"
} else {
"未成年"
}
println(is_adult) // => ...
関数機能を見てみる
fun main(args: Array<String>) {
"Sam".hello() // => Hello, Sam!
}
fun String.hello() {
println("Hello, ${this}!")
}
継承すること...
fun main(args: Array<String>) {
hello()
}
fun hello() {
fun world():String {
return "world!"
}
println("Hello, ${world()}"...
fun main(args: Array<String>) {
val hello = {
(str:String) -> println("Hello! ${str}.")
}
hello("Sam") // Hello! Sam.
arra...
fun main(args: Array<String>) {
hello("Sam", "Mike") {(name) ->
"Hello!! ${name}!!"
}
hello("太郎", "次郎") {(name) ->
"こんにちは!...
fun main(args: Array<String>) {
var i = 0
fun countUp() {
i++
}
countUp()
println(i) // => 1
countUp()
println(i) // => 2
...
他にもあるけど(mix-inとか)
Kotlinって、結構Rubyに
似ているところあるよね?
ご清聴ありがとうございました。
Upcoming SlideShare
Loading in …5
×

Rubyistのためのkotlin紹介

1,150 views

Published on

  • Be the first to comment

Rubyistのためのkotlin紹介

  1. 1. Rubyistのための Kotlin紹介 2013/07/06 @patorash
  2. 2. 名前:尾古 豊明 twitter: @patorash 所属:株式会社リゾーム 業務内容: RoRでショッピングセンター向けの グループウェアを作っています。 また週一度、チーム勉強会を、 月一度、チームLT会をしています。 自己紹介
  3. 3. 今日はOkayama RubyKaigiですが、 Kotlinの話をします。
  4. 4. Kotlinのこと知ってる人は 手を上げてください。
  5. 5. (´・ω・`) ショボーン
  6. 6. 1. JetBrains社が開発しているJVM言語。 2. Java,Groovy,Scalaなどのいいとこ取り。 3. Javaと同じくらい速い。 4. Javaとの相互運用生に優れる。 5. Android上での動作が可能。 6. IDEはIntelliJ IDEAのみ。 Kotlinとは?(Wikipediaより抜粋)
  7. 7. 1. 型安全(静的型付 & 型推論) 2. Null安全 a. Nullの可能性があるところをコンパイラが指摘し てくれる。 3. 高階関数・ローカル関数・関数リテラル・ク ロージャ・インライン関数(未実装)・拡張関数 など、 関数機能がとても強力!! 4. mix-in Kotlinの特徴
  8. 8. 所感
  9. 9. KotlinとRubyは結構似ている!
  10. 10. Hello worldしてみる。
  11. 11. package com.example.sample fun main(args : Array<String>) { println("Hello world.") } セミコロン不要 名前空間レベルに 関数を定義。 型が引数の後ろ
  12. 12. 他の基本的な機能も見てみる
  13. 13. 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からできる。
  14. 14. fun main(args: Array<String>) { var sam : String? sam = null sam.toUpperCase() // コンパイルできない sam?.toUpperCase() // nullなら何もしない sam!!.toUpperCase() // ぬるぽで落ちる } nullの可能性がある 場合は?付きで型宣言 null安全。コンパイラが nullの可能性を潰してくれ る。 ?.だと、nullなら 何もしない !!.だと、開発者側がnullはあり得ないと 決めつける。nullがきたらぬるぽ発生 する。
  15. 15. 条件分岐を見てみる
  16. 16. 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)の指定も可能。 -> 以降は関数リテラルでもよい。
  17. 17. 関数機能を見てみる
  18. 18. fun main(args: Array<String>) { "Sam".hello() // => Hello, Sam! } fun String.hello() { println("Hello, ${this}!") } 継承することなしにクラスに メソッドを追加できる。 final宣言されたクラスに対しても有効。 Rubyのオープンクラスみたいなもの。 拡張関数
  19. 19. fun main(args: Array<String>) { hello() } fun hello() { fun world():String { return "world!" } println("Hello, ${world()}") // Hello, world! } 関数内に関数を定義できる。 ローカル関数
  20. 20. 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みたいなもの。 関数リテラル
  21. 21. 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みたいなもの。 高階関数 共通部分 一部違う処理を関数 リテラルに任せる。 違う言語で挨拶するという 一部違う処理を関数リテラ ルに任せる。
  22. 22. fun main(args: Array<String>) { var i = 0 fun countUp() { i++ } countUp() println(i) // => 1 countUp() println(i) // => 2 countUp() println(i) // => 3 } 関数リテラルやローカル関数が、外側で定義され ている変数を見たり書き換えたりすることができ る。 クロージャ
  23. 23. 他にもあるけど(mix-inとか) Kotlinって、結構Rubyに 似ているところあるよね?
  24. 24. ご清聴ありがとうございました。

×