鶏頭のプログラム

Ruby, Javascript, C言語, SQLなどのプログラミング

RubyのコードをCrystalに置き換えてみる

Rubyライクに書けて
さらにコンパイルしてバイナリファイルを作ることができる
Crystalを触ってみました。

Crystalのサイト: Crystal
Crystalのドキュメント(英語):Introduction | Crystal Programming Language

他のサイトでも指摘されていることですが、あくまでもRuby風なのであって
Rubyのコーディングが同じように使用できるわけではないです。

というわけで、今回はRubyをCrystalに置き換えるとこんなエラーがよく出る
というのを紹介していきます。

Crystalに変更する際に起こるエラーは以下のようなものが存在します。

unterminated char literal, use double quotes for strings

String型にはダブルクオテーションを使用しなさい。というエラー

a = 'hello world!'

ではなく

a = "hello world!"

としなくてはいけません。

for empty arrays use '[] of ElementType'

配列型を使用する場合は配列に入る値の型を指定しなさい。というエラー。

arr = []

ではなく

arr = [] of String

のように記載しなくてはなりません。
Array | Crystal Programming Language

expecting token 'CONST', not 'xxxx'

aliasを使用した際にこのようなエラーが発生します。実質的にRubyのようなaliasの使い方はできないようです。
alias | Crystal Programming Language
aliasやalias_methodなどはRubyと動きが異なるため修正が必要です。
どのように修正が必要かは場合によって変わってきます。

unexpected token: NEWLINE
    private

rubyではprivateを書いた後の関数はすべてprivate関数になりますが、Crystalでは違います。
privateやprotectedの関数にしたい場合はすべてをprivate,protectedと記載する必要があります。

private
  def hoge
     puts "hoge!"
  end
  
  def piyo
     puts "piyo!"
  end

ではなく

  private def hoge
     puts "hoge!"
  end
  
  private def piyo
     puts "piyo!"
  end

としなくてはいけません。

undefined method 'attr_accessor'
undefined method 'attr_reader'
undefined method 'attr_writer'

Crystalのドキュメントにはこのように記述されています。

We prefer getter, setter and property over attr_reader, attr_writer and attr_accessor

つまり
attr_reader, attire_writer, attir_accessorの代わりに getter, setter, property 使ってねということらしいです。

あくまでもRuby風だというのは使っていくとつくづく実感していきます。
えっこれないの!?とかは結構あります。

できれば今後も成長していってもらいたい言語ですので記事を書いていきたいとおもいます。

というわけでしばらくはCrystalについての記事を記載していきます。

なにか、間違いなどありましたらご指摘いただけるとありがたいです。