狠狠撸

狠狠撸Share a Scribd company logo
碍辞迟濒颈苍の绍介
                                       2012-12-11
                                       @ngsw_taro

                                            発表動画は
                             http://www.youtube.com/watch?v=3-WxEqTs5c0




Wednesday, December 12, 12
アジェンダ
                   ? 自己紹介
                   ? Kotlinとは
                   ? なんでKotlin?
                   ? Hello Worldから見るKotlin
                   ? Brainf*ckから見るKotlin
                   ? 适当にライブコーディング
                   ? まとめ
Wednesday, December 12, 12
自己紹介



Wednesday, December 12, 12
蔼苍驳蝉飞冲迟补谤辞って言います

                   ? 24歳
                   ? 某SIer 新卒1年目
                   ? ゆーすけさんの愛弟子
                   ? 趣味でAndroidアプリ

Wednesday, December 12, 12
础苍诲谤辞颈诲な活动


                   ? アプリ 夢と魔法の待ち時間
                        ? ディズニーランドの待ち時間情報
                   ? 書籍 炎のAndroid開発道場
                        ? チームで書いたちょっと変わった入門書


Wednesday, December 12, 12
础苍诲谤辞颈诲な活动


                   ? アプリ 夢と魔法の待ち時間
                        ? ディズニーランドの待ち時間情報
                   ? 書籍 炎のAndroid開発道場
                        ? チームで書いたちょっと変わった入門書


Wednesday, December 12, 12
碍辞迟濒颈苍な活动

                   ? Pull Request(標準ライブラリ)
                   ? 解説/まとめ
                        ?    プログラミングKotlin(仮)

                        ?    ブログ 算譜王に俺はなる!!!!


                   ? Advent Calendar
                        ?    Kotlin Advent Calendar 2012(全部俺)




Wednesday, December 12, 12
Kotlinとは



Wednesday, December 12, 12
闯别迟叠谤补颈苍蝉製闯痴惭言语
                   ? 2011年 7月 発表
                   ? 2012年 2月 公開
                   ? 2012年 4月 M1
                   ? 2012年 6月 M2
                   ? 2012年10月 M3.1
                   ? 2012年12月 M4 NEW
                                       画像は http://kotlin-demo.jetbrains.com/ より引用
Wednesday, December 12, 12
こんな言语
                   ? 静的型付け
                   ? オブジェクト指向
                   ? 関数型プログラミング的
                   ? JavaScriptへコンパイル可
                   ? 産業利用目的
                   ? Apache License 2.0
Wednesday, December 12, 12
简単に言うと



                   ?         簡潔
                   ?         安全
Wednesday, December 12, 12
なんでKotlin?



Wednesday, December 12, 12
闯补惫补ェ…

                   ? 互換性問題(レガシーへの対応)
                        ?    StringBu?er、スレッドまわり

                        ?    ジェネリクス何それ美味しいの?


                   ? 型安全性(配列)
                   ? 冗長な記述

Wednesday, December 12, 12
( ^o^) Kotlin使ってみるか




Wednesday, December 12, 12
(  )。o(待てよ.....
?????? Scalaでいいんじゃ)




Wednesday, December 12, 12
? JetBrains ? ┗(?` )┓三




Wednesday, December 12, 12
( ?? )? Scalaは複雑
                             Kotlinはシンプル



Wednesday, December 12, 12
▂▅▇█▓??(&#虫27;ω&#虫27;)??▓█▇▅▂
        うわああああああああああああ




Wednesday, December 12, 12
闯痴惭言语のライバルたち


                   ?         Scala
                        ?    複雑(演算子オーバロード、暗黙の型変換)


                   ?         Groovy
                        ?    動的だからミスが生じやすい




Wednesday, December 12, 12
まぁ何でもトレードオフ
                    (例)
                   ? 複雑だけど高機能
                   ? 冗長だけど意味が明確
                   ? シンプルだけど表現力が弱い
                   ? 動的で柔軟だけど型安全保証なし

Wednesday, December 12, 12
Hello World
                             から見るKotlin


Wednesday, December 12, 12
package com.taroid.sample

               fun main(args : Array<String>) {

                         println("Hello, world!")

               }


Wednesday, December 12, 12
package com.taroid.sample
              名前空間レベルに関数                  型が変数名の後


               fun main(args : Array<String>) {

                         println("Hello, world!")

               }             セミコロン不要
                                          配列にジェネリクス



Wednesday, December 12, 12
型推论


                             val hoge : Int = 5

                             val hoge = 5


Wednesday, December 12, 12
型推论
                                       数値リテラルはInt型
                    ここのIntは冗長

                             val hoge : Int = 5

                             val hoge = 5
                                   コンパイラが型を推論


Wednesday, December 12, 12
配列がジェネリクス
                   // Java
                   final Integer[] ints = {1, 2, 3};
                   final Number[] nums = ints;
                   nums[0] = Double.valueOf(0.1);

                  // Kotlin
                  val ints : Array<Int> = array(1, 2, 3)
                  val nums : Array<Number> = ints

Wednesday, December 12, 12
配列がジェネリクス
                // Java
                final Integer[] ints = {1, 2, 3}; OK
               Runtime ERROR!!!
                final Number[] nums = ints;
                nums[0] = Double.valueOf(0.1);

                  // Kotlin
                                     Compile ERROR!!!
                  val ints : Array<Int> = array(1, 2, 3)
                  val nums : Array<Number> = ints

Wednesday, December 12, 12
Brainf*ck
                             から見るKotlin


Wednesday, December 12, 12
叠谤补颈苍蹿*肠办とは


                   ? 難解プログラミング言語
                   ? チューリング完全
                   ? 単純な8つの命令語を持つ

Wednesday, December 12, 12
叠谤补颈苍蹿*肠办の命令语
               >         ポインタを1増やす
               <         ポインタを1減らす
               +         ポインタが指す値を1増やす
               -        ポインタが指す値を1減らす
               [        ポインタが指す値が0なら対応する]へ飛ぶ
               ]        ポインタが指す値が0意外なら対応する[へ飛ぶ
               .       ポインタが指す値を出力する
               ,       ポインタが指す先へ1バイト入力する


Wednesday, December 12, 12
叠谤补颈苍蹿*肠办の贬别濒濒辞奥辞谤濒诲
               +++++++++[>+++++++
               +>+++++++++++>++++
               +<<<-]>.>++.+++++++..+
               ++.>-.------------.<+++++
               +++.--------.+
               +.------.--------.>+.
Wednesday, December 12, 12
この処理系を
                  Kotlinで実装したった


Wednesday, December 12, 12
実装を持てるインタフェース

              public trait Brainfxck {

                  public fun execute(source: String,
                   inputStream: InputStream = System.`in`,
                   outputStream: OutputStream = System.`out`)
              }
                               デフォルトのパラメータ



Wednesday, December 12, 12
object BrainfxckImpl : Brainfxck {

                    override public fun execute(source : String,
                      inputStream : InputStream,
                      outputStream : OutputStream) {
                        // do something
                    }
                }



Wednesday, December 12, 12
シングルトン                    トレイトの実装

                object BrainfxckImpl : Brainfxck {

                    override public fun execute(source : String,
                      inputStream : InputStream,
                      outputStream : OutputStream) {
                         アノテーション
                        // do something
                    }
                }



Wednesday, December 12, 12
private val incrementPointerOperator = {
                (runtimeState : RuntimeState) ->
                 runtimeState.incrementPointer()
              }
                          関数リテラルを変数に割り当てる

              private val decrementPointerOperator = {
                (runtimeState : RuntimeState) ->
                 runtimeState.decrementPointer()
              }

Wednesday, December 12, 12
private val operators = hashMap(
                INCREMENT_POINTER to incrementPointerOperator,
                DECREMENT_POINTER to decrementPointerOperator,
                INCREMENT_VALUE to incrementValueOperator,
                DECREMENT_VALUE to decrementValueOperator,
                INPUT                   to inputOperator,
                OUTPUT                  to outputOperator,
                LOOP_START              to loopStartOperator,
                LOOP_END                to loopEndOperator
           )




Wednesday, December 12, 12
?命令语(文字)と
                                                ?操作(関数リテラル)を
           private           val operators = hashMap(
                                                ?マッピング
                INCREMENT_POINTER to incrementPointerOperator,
                DECREMENT_POINTER to decrementPointerOperator,
                INCREMENT_VALUE to incrementValueOperator,
                DECREMENT_VALUE to decrementValueOperator,
                INPUT             to inputOperator,
                OUTPUT            to outputOperator,
                LOOP_START       to loopStartOperator,
                LOOP_END         to loopEndOperator
           )
                               演算子風関数呼び出し


Wednesday, December 12, 12
while (!runtimeState.isEndOfProgram()) {
        val code = runtimeState.getCurrentProgramCode()
        val operator = operators[code] ?: doNothingOperator
        operator(runtimeState)
        runtimeState.next()
      }




Wednesday, December 12, 12
マップに配列风アクセス
      while (!runtimeState.isEndOfProgram()) {
        val code = runtimeState.getCurrentProgramCode()
        val operator = operators[code] ?: doNothingOperator
        operator(runtimeState)
        runtimeState.next()
                          エルビス演算子
      }




Wednesday, December 12, 12
デモの前に


                        叠谤补颈苍蹿*肠办の命令语を
                        別の文字列に置き換える




Wednesday, December 12, 12
イケメン仕様
     private fun toBrainfxckSource(source : String) =
      source.replaceAll("山本", INCREMENT_POINTER.toString())
                       .replaceAll("裕介", DECREMENT_POINTER.toString())
                       .replaceAll("イケ", INCREMENT_VALUE.toString())
                       .replaceAll("メン", DECREMENT_VALUE.toString())
                       .replaceAll("Twitter4J", OUTPUT.toString())
                       .replaceAll("ん、", LOOP_START.toString())
                       .replaceAll("#呼んだ?", LOOP_END.toString())



Wednesday, December 12, 12
デモ



Wednesday, December 12, 12
适当に
                       ライブコーディング


Wednesday, December 12, 12
まとめ



Wednesday, December 12, 12
碍辞迟濒颈苍まとめ

                   ? 静的型付けJVM言語
                   ? オブジェクト指向
                   ? 関数型プログラミング的
                   ? モダンで簡潔で安全
                   ? かわいい
Wednesday, December 12, 12
ご清聴
                 ありがとうございました



                             @ngsw_taro

Wednesday, December 12, 12

More Related Content

Similar to 碍辞迟濒颈苍の绍介 (10)

「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasual「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasual
SATOSHI TAGOMORI
?
础诲办を使って音声コマンドで操作する戦车を作ってみた
础诲办を使って音声コマンドで操作する戦车を作ってみた础诲办を使って音声コマンドで操作する戦车を作ってみた
础诲办を使って音声コマンドで操作する戦车を作ってみた
Yusuke Ohmichi
?
I phone勉強会 2010_03_06_gameloop
I phone勉強会 2010_03_06_gameloopI phone勉強会 2010_03_06_gameloop
I phone勉強会 2010_03_06_gameloop
Tomohiko Okita
?
罢丑谤别别.箩蝉で3顿気分
罢丑谤别别.箩蝉で3顿気分 罢丑谤别别.箩蝉で3顿気分
罢丑谤别别.箩蝉で3顿気分
Toshio Ehara
?
Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説
kuno4n
?
Riak Source Code Reading #2: Erlang Client
Riak Source Code Reading #2: Erlang ClientRiak Source Code Reading #2: Erlang Client
Riak Source Code Reading #2: Erlang Client
nobu_k
?
厂奥滨骋で搁耻产测バインディング
厂奥滨骋で搁耻产测バインディング厂奥滨骋で搁耻产测バインディング
厂奥滨骋で搁耻产测バインディング
Yukimitsu Izawa
?
Unityハッカソン チームト?ミノ 発表用資料 2012.12
Unityハッカソン チームト?ミノ 発表用資料 2012.12Unityハッカソン チームト?ミノ 発表用資料 2012.12
Unityハッカソン チームト?ミノ 発表用資料 2012.12
takashi Ohsaka
?
「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasual「ほげエンジニア」の定義について #operationcasual
「ほげエンジニア」の定義について #operationcasual
SATOSHI TAGOMORI
?
础诲办を使って音声コマンドで操作する戦车を作ってみた
础诲办を使って音声コマンドで操作する戦车を作ってみた础诲办を使って音声コマンドで操作する戦车を作ってみた
础诲办を使って音声コマンドで操作する戦车を作ってみた
Yusuke Ohmichi
?
I phone勉強会 2010_03_06_gameloop
I phone勉強会 2010_03_06_gameloopI phone勉強会 2010_03_06_gameloop
I phone勉強会 2010_03_06_gameloop
Tomohiko Okita
?
罢丑谤别别.箩蝉で3顿気分
罢丑谤别别.箩蝉で3顿気分 罢丑谤别别.箩蝉で3顿気分
罢丑谤别别.箩蝉で3顿気分
Toshio Ehara
?
Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説
kuno4n
?
Riak Source Code Reading #2: Erlang Client
Riak Source Code Reading #2: Erlang ClientRiak Source Code Reading #2: Erlang Client
Riak Source Code Reading #2: Erlang Client
nobu_k
?
厂奥滨骋で搁耻产测バインディング
厂奥滨骋で搁耻产测バインディング厂奥滨骋で搁耻产测バインディング
厂奥滨骋で搁耻产测バインディング
Yukimitsu Izawa
?
Unityハッカソン チームト?ミノ 発表用資料 2012.12
Unityハッカソン チームト?ミノ 発表用資料 2012.12Unityハッカソン チームト?ミノ 発表用資料 2012.12
Unityハッカソン チームト?ミノ 発表用資料 2012.12
takashi Ohsaka
?

碍辞迟濒颈苍の绍介

  • 1. 碍辞迟濒颈苍の绍介 2012-12-11 @ngsw_taro 発表動画は http://www.youtube.com/watch?v=3-WxEqTs5c0 Wednesday, December 12, 12
  • 2. アジェンダ ? 自己紹介 ? Kotlinとは ? なんでKotlin? ? Hello Worldから見るKotlin ? Brainf*ckから見るKotlin ? 适当にライブコーディング ? まとめ Wednesday, December 12, 12
  • 4. 蔼苍驳蝉飞冲迟补谤辞って言います ? 24歳 ? 某SIer 新卒1年目 ? ゆーすけさんの愛弟子 ? 趣味でAndroidアプリ Wednesday, December 12, 12
  • 5. 础苍诲谤辞颈诲な活动 ? アプリ 夢と魔法の待ち時間 ? ディズニーランドの待ち時間情報 ? 書籍 炎のAndroid開発道場 ? チームで書いたちょっと変わった入門書 Wednesday, December 12, 12
  • 6. 础苍诲谤辞颈诲な活动 ? アプリ 夢と魔法の待ち時間 ? ディズニーランドの待ち時間情報 ? 書籍 炎のAndroid開発道場 ? チームで書いたちょっと変わった入門書 Wednesday, December 12, 12
  • 7. 碍辞迟濒颈苍な活动 ? Pull Request(標準ライブラリ) ? 解説/まとめ ? プログラミングKotlin(仮) ? ブログ 算譜王に俺はなる!!!! ? Advent Calendar ? Kotlin Advent Calendar 2012(全部俺) Wednesday, December 12, 12
  • 9. 闯别迟叠谤补颈苍蝉製闯痴惭言语 ? 2011年 7月 発表 ? 2012年 2月 公開 ? 2012年 4月 M1 ? 2012年 6月 M2 ? 2012年10月 M3.1 ? 2012年12月 M4 NEW 画像は http://kotlin-demo.jetbrains.com/ より引用 Wednesday, December 12, 12
  • 10. こんな言语 ? 静的型付け ? オブジェクト指向 ? 関数型プログラミング的 ? JavaScriptへコンパイル可 ? 産業利用目的 ? Apache License 2.0 Wednesday, December 12, 12
  • 11. 简単に言うと ? 簡潔 ? 安全 Wednesday, December 12, 12
  • 13. 闯补惫补ェ… ? 互換性問題(レガシーへの対応) ? StringBu?er、スレッドまわり ? ジェネリクス何それ美味しいの? ? 型安全性(配列) ? 冗長な記述 Wednesday, December 12, 12
  • 15. ( )。o(待てよ..... ?????? Scalaでいいんじゃ) Wednesday, December 12, 12
  • 16. ? JetBrains ? ┗(?` )┓三 Wednesday, December 12, 12
  • 17. ( ?? )? Scalaは複雑 Kotlinはシンプル Wednesday, December 12, 12
  • 18. ▂▅▇█▓??(&#虫27;ω&#虫27;)??▓█▇▅▂ うわああああああああああああ Wednesday, December 12, 12
  • 19. 闯痴惭言语のライバルたち ? Scala ? 複雑(演算子オーバロード、暗黙の型変換) ? Groovy ? 動的だからミスが生じやすい Wednesday, December 12, 12
  • 20. まぁ何でもトレードオフ (例) ? 複雑だけど高機能 ? 冗長だけど意味が明確 ? シンプルだけど表現力が弱い ? 動的で柔軟だけど型安全保証なし Wednesday, December 12, 12
  • 21. Hello World から見るKotlin Wednesday, December 12, 12
  • 22. package com.taroid.sample fun main(args : Array<String>) { println("Hello, world!") } Wednesday, December 12, 12
  • 23. package com.taroid.sample 名前空間レベルに関数 型が変数名の後 fun main(args : Array<String>) { println("Hello, world!") } セミコロン不要 配列にジェネリクス Wednesday, December 12, 12
  • 24. 型推论 val hoge : Int = 5 val hoge = 5 Wednesday, December 12, 12
  • 25. 型推论 数値リテラルはInt型 ここのIntは冗長 val hoge : Int = 5 val hoge = 5 コンパイラが型を推論 Wednesday, December 12, 12
  • 26. 配列がジェネリクス // Java final Integer[] ints = {1, 2, 3}; final Number[] nums = ints; nums[0] = Double.valueOf(0.1); // Kotlin val ints : Array<Int> = array(1, 2, 3) val nums : Array<Number> = ints Wednesday, December 12, 12
  • 27. 配列がジェネリクス // Java final Integer[] ints = {1, 2, 3}; OK Runtime ERROR!!! final Number[] nums = ints; nums[0] = Double.valueOf(0.1); // Kotlin Compile ERROR!!! val ints : Array<Int> = array(1, 2, 3) val nums : Array<Number> = ints Wednesday, December 12, 12
  • 28. Brainf*ck から見るKotlin Wednesday, December 12, 12
  • 29. 叠谤补颈苍蹿*肠办とは ? 難解プログラミング言語 ? チューリング完全 ? 単純な8つの命令語を持つ Wednesday, December 12, 12
  • 30. 叠谤补颈苍蹿*肠办の命令语 > ポインタを1増やす < ポインタを1減らす + ポインタが指す値を1増やす - ポインタが指す値を1減らす [ ポインタが指す値が0なら対応する]へ飛ぶ ] ポインタが指す値が0意外なら対応する[へ飛ぶ . ポインタが指す値を出力する , ポインタが指す先へ1バイト入力する Wednesday, December 12, 12
  • 31. 叠谤补颈苍蹿*肠办の贬别濒濒辞奥辞谤濒诲 +++++++++[>+++++++ +>+++++++++++>++++ +<<<-]>.>++.+++++++..+ ++.>-.------------.<+++++ +++.--------.+ +.------.--------.>+. Wednesday, December 12, 12
  • 32. この処理系を Kotlinで実装したった Wednesday, December 12, 12
  • 33. 実装を持てるインタフェース public trait Brainfxck { public fun execute(source: String, inputStream: InputStream = System.`in`, outputStream: OutputStream = System.`out`) } デフォルトのパラメータ Wednesday, December 12, 12
  • 34. object BrainfxckImpl : Brainfxck { override public fun execute(source : String, inputStream : InputStream, outputStream : OutputStream) { // do something } } Wednesday, December 12, 12
  • 35. シングルトン トレイトの実装 object BrainfxckImpl : Brainfxck { override public fun execute(source : String, inputStream : InputStream, outputStream : OutputStream) { アノテーション // do something } } Wednesday, December 12, 12
  • 36. private val incrementPointerOperator = { (runtimeState : RuntimeState) -> runtimeState.incrementPointer() } 関数リテラルを変数に割り当てる private val decrementPointerOperator = { (runtimeState : RuntimeState) -> runtimeState.decrementPointer() } Wednesday, December 12, 12
  • 37. private val operators = hashMap( INCREMENT_POINTER to incrementPointerOperator, DECREMENT_POINTER to decrementPointerOperator, INCREMENT_VALUE to incrementValueOperator, DECREMENT_VALUE to decrementValueOperator, INPUT to inputOperator, OUTPUT to outputOperator, LOOP_START to loopStartOperator, LOOP_END to loopEndOperator ) Wednesday, December 12, 12
  • 38. ?命令语(文字)と ?操作(関数リテラル)を private val operators = hashMap( ?マッピング INCREMENT_POINTER to incrementPointerOperator, DECREMENT_POINTER to decrementPointerOperator, INCREMENT_VALUE to incrementValueOperator, DECREMENT_VALUE to decrementValueOperator, INPUT to inputOperator, OUTPUT to outputOperator, LOOP_START to loopStartOperator, LOOP_END to loopEndOperator ) 演算子風関数呼び出し Wednesday, December 12, 12
  • 39. while (!runtimeState.isEndOfProgram()) { val code = runtimeState.getCurrentProgramCode() val operator = operators[code] ?: doNothingOperator operator(runtimeState) runtimeState.next() } Wednesday, December 12, 12
  • 40. マップに配列风アクセス while (!runtimeState.isEndOfProgram()) { val code = runtimeState.getCurrentProgramCode() val operator = operators[code] ?: doNothingOperator operator(runtimeState) runtimeState.next() エルビス演算子 } Wednesday, December 12, 12
  • 41. デモの前に 叠谤补颈苍蹿*肠办の命令语を 別の文字列に置き換える Wednesday, December 12, 12
  • 42. イケメン仕様 private fun toBrainfxckSource(source : String) = source.replaceAll("山本", INCREMENT_POINTER.toString()) .replaceAll("裕介", DECREMENT_POINTER.toString()) .replaceAll("イケ", INCREMENT_VALUE.toString()) .replaceAll("メン", DECREMENT_VALUE.toString()) .replaceAll("Twitter4J", OUTPUT.toString()) .replaceAll("ん、", LOOP_START.toString()) .replaceAll("#呼んだ?", LOOP_END.toString()) Wednesday, December 12, 12
  • 44. 适当に ライブコーディング Wednesday, December 12, 12
  • 46. 碍辞迟濒颈苍まとめ ? 静的型付けJVM言語 ? オブジェクト指向 ? 関数型プログラミング的 ? モダンで簡潔で安全 ? かわいい Wednesday, December 12, 12
  • 47. ご清聴 ありがとうございました @ngsw_taro Wednesday, December 12, 12