Your SlideShare is downloading. ×
0
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Rubyistのためのkotlin紹介

601

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
601
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×