Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

一回しか変数を呼べなくすることは可能か

バグを出しにくいソフトウェアを型で実現、みたいな話題が好きで、しょっちゅう型でなんとかできないか考えている。

そんな中、そもそもバグが出るのって、1つの変数を複数回「見る」ことによるものも多いのではないかと思った:

  • 同じ変数が、離れた別々のスコープにまで引き回されて、別々の使い方をされているのは健全なのか?
  • ある箇所でオブジェクトのfooプロパティを見て処理しているが、しばらくしてまたfooプロパティを見ているのは良いことなのか?
  • ↑こういうことをしていると、「思いもよらない場所に影響が出る」という類のバグになる
    • これを防げないか、というのが主題

そこで、こういうことを発想してみた:

  • オブジェクトのプロパティは、一度取り出すと、元のオブジェクトからは見えなくする
    • つまり、{foo: 1, bar: 2}fooをなんらかの形で使うと、そのスコープ以降fooの使用ができなくなる
  • これを型で強制する

んー、これってRustの所有権みたいな話題じゃん、と考えながら自分で思ったのだけれど、所有権と違って、書き込みのみならず読み込みすらも1度に制約しているというのが違う。

なんらかのプロパティを使う処理をそれぞれApplicativeとして表現して、お互いに見ているプロパティが重複していなければ合成可能、みたいなふうに規則を与えたらうまく動くかもしれない。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?