IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

Ruby で引数なし super を使ってみる

スーパークラス

ここでスーパークラスとして使う Product クラスは以下の通り。initialize メソッドで2つの引数を受け取り、@name と @price を初期化して、インスタンス変数を読み取り用として設定する。

f:id:matt-note:20181029170937p:plain

 

サブクラスで引数なし super を呼び出してみる

スーパークラスとサブクラスで引数の数が同じ場合は、引数なしの super を呼ぶだけで自分に渡された引数をすべてスーパークラスに引き渡すとのこと。

initialize メソッドでは2つの引数を受け取るが、super は何も受け取っていないように見える。しかし、スーパークラスと引数が同じだから super の引数は省略できるとのこと。

f:id:matt-note:20181029170851p:plain

 

実行してみると、以下のように出力する。設定できている。

f:id:matt-note:20181029171310p:plain

 

super も省略する

以下のように、サブクラスの Pen クラスでは、なにも定義なし。

f:id:matt-note:20181029171813p:plain

 

これを実行すると、インスタンスの初期化で渡した2つの引数について、値を出力する。

f:id:matt-note:20181029171905p:plain

 

まとめ

super を省略して使うとややこしいなと。個人的には、省略せずに明示的に書くのがわかりやすくて良いのでは。とはいえ、誰かが書いたコードで、これが出てきた時に意味は理解していないといけない…。

ruby-style-guide をざっと読んでみたが、super の引数の省略、super 自体の省略についての記述は見られなかった。

 

明示的に書く場合

f:id:matt-note:20181029173903p:plain

 

参考