イベントとevent
プログラミング用語として使われている「イベント」って、一般的な意味のイベントとは違うんじゃないかなーって思った件について。
まず一般的な意味でのイベントとは、スポーツ大会とかアイドルの握手会のようなものも含めて、事前に計画されて行なわれる「催し物」の意味で使われている言葉だと思う。
一方でプログラミング用語のイベントは、ユーザーによる入力やネットワーク通信、ディスクアクセスのようにいつ起こるか分からない・いつ終わるか分からない事柄についてその発生や完了を表したものだ。コーディングの際にはそのようなイベントが発生したらこれこれの処理をする、という書き方をする。つまりイベントを捕まえて特定の処理を行なっている。
なので、一般的な意味でのイベント、つまり催し物で言えば、イベントは「発生」するものではないし、それをとっ捕まえて処理するようなことはしない。
ここに言葉の意味の相違がある。
では英語のeventは一般的にどういう意味なのか?と疑問に思った。そこで、とりあえずLongmanの英英辞書で調べてみた(http://www.ldoceonline.com/dictionary/event)ところ、大きく分けて2つの意味があった。
1つ目に「something that happens, especially something important, interesting or unusual」とある。何か重要な、興味深い、あるいは普通でない出来事という意味だろう。例文を見ても、日本語の一般的な意味でのイベントとは異なる。どちらかと言うとこれがプログラミング用語のイベントに近いと思う。
2つ目にあるのが「at which people gather together to watch or take part in something」ということで、人々が集まって参加する催し物という意味で、これが日本語の一般的な意味に当たろう。ソーシャルイベントという言葉もある。
辞書で一番初めに出てくる意味がその単語のprincipalな意味だとすると、英語で言うイベント駆動(event-driven)は英語では直感的な分かりやすい用法なのであろう。その意味でのeventは、日本語の「イベント」ではなく、どちらかと言うと「ハプニング(happening)」に近いのではないか。ハプニングといえば、一般的にいつ起きるか分からない現象というふうに捉えられるので、イベント駆動の持つ本来の意味が伝わりやすいと思われる。
ちなみに、ゲーム用語でいうイベントはまた少し異なっており、主にRPGなどで使われるが、おそらくこれは英語本来のeventの意味に似た使い方をされていると思う。
今回の記事を書いた理由としては、自分がイベント駆動の意味をすんなり理解できなかったというわけではないが、他人にイベント駆動のパラダイムを教える場合に、単に「イベント駆動」と言っても通じないかもしれないと思ったからである。JavaではListenerインターフェースがイベントのハンドリングによく使われているように、イベント駆動はよく使われるプログラミング方法である。なので、プログラミング初心者は上から下へのプログラム(フローチャートで簡単に書けるような単純な処理のプログラム)から学び始めるが、少しプログラムが出来るようになると、イベント駆動のような、処理があっちからこっちへ急に飛ぶようなプログラムを書く機会が、必要がでてくる。そういったときに、その概念の本質をわかりやすく伝えるには、言葉の持つ意味だけでは足りないことがあると時々思うものである。