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

あなたとCrystal、いますぐダウンロード

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 あなたとCrystal、いますぐダウンロード

合同勉強会2015

Avatar for Takafumi Yoshida

Takafumi Yoshida

December 05, 2015
Tweet

More Decks by Takafumi Yoshida

Other Decks in Technology

Transcript

  1. メソッド定義(1)  def greet(name : String) "Hello, #{name}" end puts

    greet(“Kotori”) puts greet(123) 引数の型を指定 コンパイルエラーになる
  2. メソッド定義(2)  def hoge : String "hoge" end def fuga

    : String 123 end 戻り値の型を指定 コンパイルエラーになる
  3. 複合型の指定  array = Array(Int32 | String).new # alias IntString

    = Int32 | String # array = Array(IntString).new array << 1 array << 2 array << "hoge" OK 複合型を指定
  4. 竹内関数  def tarai(x, y, z) return y if x

    <= y tarai( tarai(x - 1, y, z), tarai(y - 1, z, x), tarai(z - 1, x, y) ) end puts tarai(13, 10, 0)
  5. Rubyの場合  $ ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636)

    $ time ruby tarai.rb 13 real 0m8.899s user 0m8.818s sys 0m0.052s 約9秒
  6. Crystalの場合  $ crystal -v Crystal 0.9.0 [be93828] $ crystal

    build tarai.rb --release $ time ./tarai 13 real 0m0.352s user 0m0.348s sys 0m0.003s 0.3秒 最適化ビルド 約30倍
  7. Javaの場合  public class Tarai { public static int tarai(int

    x, int y, int z) { if(x <= y) return y; return tarai(tarai(x - 1, y, z), tarai(y - 1, z, x), tarai(z - 1, x, y)); } public static void main(String[] args) { System.out.println(tarai(13, 10, 0)); } }
  8. Javaの場合  $ java -version java version "1.8.0_65" Java(TM) SE

    Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode) $ time java Tarai 13 real 0m0.336s user 0m0.316s sys 0m0.026s 0.3秒 ほぼCrystalと同じ