40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

はじめてのRubyを再度読み返す

昨日につづいてまたRubyネタ

WEBrickのライブラリを読んでいてたとえばhttpserver.rbに

def mount_proc(dir, proc=nil, &block)

とあった場合の&blockというのがわからなかったり、あとはserver.rbの

  class SimpleServer
    def SimpleServer.start
      yield
    end
  end

というののyieldというのなど、rubyならではの記法についての理解がやっぱり甘いっていうことを再認識

そのためMacbook Airと一緒に携帯してたはじめてのRubyの7章のメソッドの所を写経しながら再度勉強しなおしました
この章の中でレシーバの省略という項目があり

class Laputa
  def hover
    vibrate
  end
  def vibrate
    p "vibrated"
  end
end
takalamakhan = Laputa.new
takalamakhan.hover

こんなサンプルがあったのですが3行目のvibrateの箇所がメソッド呼び出しのレシーバを省略した書き方ということで凄い違和感があったのですが

この場合はレシーバであるselfに対してメソッドを呼び出します。selfは、C++Java,C#でいうthisの相当です。

という説明で「あーなるほどね。」と納得。

要は

  def hover
    self.vibrate
  end

というのと同じっていうことかー

納得したついでに、javascriptで書き直してみた。

var Laputa = function(){};
Laputa.prototype = {
  hover:function() {
    this.vibrate();
  },
  vibrate:function(){
    alert("vibrated");
  }
};
var takalamakhan = new Laputa();
takalamakhan.hover(); // -> vibrated