Rubyのsyntax

Rubyは非常にsyntaxが独特で、いろいろな書き方ができる。

さらに、動的型付け言語であり、かつメタプログラミングが多用されている文化の特性上、普段Rustなどの強い静的型付け言語を使っている人間には若干難しい面がある。

最近自分はRust以外にもRubyやPHPなどに触れており、だんだんと脳内でRubyをパースできるようになってきた。

メソッドの呼び出し

Rubyの記法で一番重要かつ多用されるのが「メソッド呼び出し時に()が不要になる」という点

例えば

l = [1, 2 3]
l.append(4)
=> [1, 2, 3, 4]

のような時

l = [1, 2, 3]
l.append 4
=> [1, 2, 3, 4]

と書ける

引数を受け取らないメソッドについても同様で、

l = [1, 2, 3]
l.reverse.append 0
=> [4, 3, 2, 1, 0]

と書ける。

さらに、Hashについても同様に{}を省略することができる。

> {"hoge"=>"fuga"}.== "hoge"=>"fuga"
=> true

HashのキーがSymbolの場合

> {"hoge"=>"fuga"}.== hoge: :fuga
=> false
> {"hoge"=>"fuga"}.== hoge: "fuga"
=> false

これさえ覚えておけばまぁ読める

脳内パーサ

サラッと書いたが、

{"hoge"=>"fuga"}.==

この書き方、普通しない。

脳内でRubyのパーサが育ってきた時にふと思いついてやってみたが、演算子もクラスメソッドとして定義されてるので.+とか.<<とかも許容されてる。

> l = [1, 2, 3, 4]
> [0].+ l, 5
=> [0, 1, 2, 3, 4]

さらにこう書くこともできる

> l = [1, 2, 3, 4]
> s = [0].+ l, 5
> s.[]= 5, 5
=> [0, 1, 2, 3, 4, 5]

doc

おもしれー言語。

おわりに

この記事はn01e0 Advent Calendar 2023の1日目の記事です。

明日はあるかわかりません

また、IPFactory OB Advent Calendar 2023の1日目の記事も兼ねています。