Upgrade to Pro — share decks privately, control downloads, hide ads and more …

システムリニューアルと サーバーサイドKotlin

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

システムリニューアルと サーバーサイドKotlin

Avatar for Hidenori Maehara

Hidenori Maehara

August 24, 2017
Tweet

More Decks by Hidenori Maehara

Other Decks in Technology

Transcript

  1. 自己紹介 • 前原 秀徳 • @maeharin(まえはりん) • エムスリー株式会社 エンジニア •

    チームリーダー、グループ会社取締役等を歴任 • 自慢:ブログ記事が、はてぶ1200 ◦http://maeharin.hatenablog.com/
  2. 主要システム Ruby on Rails なぜ時間がかかる? (2)10年前のシステムが... • ビジネス上優先度の高いシステムはRuby on Railsになっている

    • しかし、相対的に優先度低いシステムは10年前のJavaシステム ◦ =>この部分の優先度が高まってきた Javaの独自FW viewの部分はXSLT! 10年前の Javaシステム 7年前の Javaシステム
  3. Kotlin採用理由(私のチームの場合) • 型:あり。(型推論、null safetyも嬉しい) • エムスリーにはたろう (@ngsw_taro) がいる! Kotlinスタートブック絶賛発売中! エムスリー株式会社

    日本Kotlinユーザーグループ代表 長澤 太郎 たろう(@ngsw_taro) • 社内共有ライブラリ:使える(JavaとRuby版が提供されている) • フレームワーク:Spring Boot(問題なし) • 言語の将来性:きっとある(Google I/OでAndroid開発公式言語に) • IDE:IntelliJ IDEA community(無料) • 学習コスト:Rubyエンジニアが親しみやすい構文(後述)
  4. リスト操作 Ruby Kotlin a.map {i -> i * 10} a.reduce

    {sum,n -> sum + n} a.groupBy {i -> i % 2} a.filter {i -> i % 2 == 0} a.map {|i| i * 10} a.reduce {|sum,n| sum + n} a.group_by {|i| i % 2} a.select {|i| i % 2 == 0}
  5. Set, Range Ruby Kotlin val setA = setOf(1,1,2,3,4) val setB

    = setOf(1,2,3,4,5) println(setA + setB) (1..10).forEach {println(it)} set_a = Set.new([1,1,2,3,4]) set_b = Set.new([1,2,3,4,5]) puts set_a + set_b (1..10).each {|i| puts i}
  6. if式 Ruby Kotlin val job = if (name == "taro")

    { "エバンジェリスト" } else { "エンジニア" } job = if name == "taro" "エバンジェリスト" else "エンジニア" end
  7. lambda Ruby Kotlin fun foo(cb: () -> Unit) { println("start")

    cb() println("done") } foo({ println("doing") }) def foo(cb) puts "start" cb.call puts "done" end foo(-> { puts "doing" })
  8. 演算子オーバーロード Ruby Kotlin class Id(val int: Int) { operator fun

    plus(that: Id) = Id(this.int + that.int) } val id1 = Id(1) val id2 = Id(2) println(id1 + id2) class Id attr_reader :int def initialize(int) @int = int end def +(that) Id.new(@int + that.int) end end id1 = Id.new(1) id2 = Id.new(2) p id1 + id2
  9. スクリプト言語っぽく使うことも可能 list-folders.kts import java.io.File val folders = File(args[0]).listFiles { file

    -> file.isDirectory() } folders?.forEach { folder -> println(folder) } ターミナル $ kotlinc -script list-folders.kts .