ひとりSE

ひとりでシステム開発やってます。真面目な業務システムからふざけたゲームまで

thisを省略するのやめました

C++ではメンバの参照にthisを省略可能

C++ では、クラスのメンバ関数内では、

Popup::open ( const char* title, const char* mssg )

{

  setTitle( title );

  setMessage( mssg );

  ・・・省略・・・

}

こんな風に関数名だけでメンバ関数がコールできます。上のように書けば、Popup::setTitle(), Popup::setMessage() がコールされます。

メンバ関数だけでなくグローバル関数としても setTitle() や setMessage() が定義されていて、グローバル関数の方をコールしたい場合には、

  ::setTitle( title );

  ::setMessage( mssg );

と、:: でそれを示す必要があります。

 

もちろん、メンバ関数をコールする際、

  this->setTitle( title );

  this->setMessage( mssg );

と、this を付けてメンバ関数であることを明示的に示しても良いわけですが、自分はメンバ関数をコールする際にこの this-> を省略するスタイルを長年続けてきてました。

JavaScriptではまった

JavaScriptではメンバ関数をコールする際、この this が省略不可。

しかしJavaScriptに手を出し始めた頃、C++の癖でちょくちょくこれを省略しちゃってました。

クライアントに納品したJavaScriptのアプリ、「ある条件でウィンドウ毎閉じられてしまう」という指摘を受けまして。

よくよく見てみると、ポップアップをウィンドウを閉じる処理で、

  this.close();

と書かなきゃいけないところが単に close() と書いてありまして。

そう、this が省略されているために window.close() が呼ばれてしまってた、というオチです。

省略できるものでも省略しない

この件以来、C++ でも this-> を省略しないで書くようになりました。