Ruby の型注釈のオレオレ記法

Ruby が型を明示的に書かないのはすごくラクだし気に入っているのだけれど、複雑な処理をするメソッドなどでは型注釈があった方がわかりやすい場合もあります。なので、コメントで型注釈をする仕方を自分で決めてみました。
 

●引数(self も含む) -> メソッド内の変数 >> 返り値

メソッド内に出現するすべての変数を登場順に書きます。引数と返り値は自明ならば省略します。

def hoge(a, b, c)
  #a, b, c -> x, .. >> String
  x = a.each {}
  ...
  return result
end

 

●型

型としてクラス名を指定します。下みたいな感じ。型が自明な場合は省略します。

def hoge
  #Integer{i, j}, Array{ar}, a, b, ...
end

 
ダッグタイピングで型が複数あるばあいは、Integer or Float{num, r, ..} のように書きます。

配列の場合は、中身の型を書いてもよい。

  #Integer{a[], matrix[][]}, ...

あるいは

  #Array[Integer]{a1, a2, ..}

あるいは

  #a[Integer, String], ...

 
ハッシュの場合は、

  #Hash{h[Object]: Integer, ...}

あるいは

  #(Hash[Symbol]: Integer){h1, h2, ...}

みたいに書いてもよい。

●ユーザー定義型

同じ Integer でも呼び方を変えたい場合は、「%ユーザー定義型 = クラス名」みたいに宣言して使う。

  #%distance = Integer, %counter = Integer
  #%distance{r, d}, %counter{i, j}

みたいに。

●返り値

配列が返るときだけ、

  # ... >> [String]

みたいな書き方を許す。


こんな感じでどうでしょうか。

例。
基数ソート(Ruby) - Camera Obscura
Ruby で循環小数を扱う - Camera Obscura
ベルマン−フォード・アルゴリズム(Ruby) - Camera Obscura