For faster navigation, this Iframe is preloading the Wikiwand page for イベント (プログラミング).

イベント (プログラミング)

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?"イベント" プログラミング – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL (2011年12月)

プログラミングにおけるイベント (: event) は、プログラム内で発生した動作・出来事、またそれらを表現する信号である[1]メッセージあるいはアクション(動作)とも呼ばれる。

イベントの例としてWEBブラウザにおける「クリック」動作、ネットワークリクエストにおける「fetch完了」出来事が挙げられる。動作・出来事そのものではなく、それらをプログラム上で表現し詳細情報を保持しているオブジェクト(イベントオブジェクト)を単純にイベントと呼ぶことが多い。

イベントドリブン

[編集]

イベントドリブン (イベント駆動型、: event-driven) とは、イベントに応じて選択的にインスタンスへの処理(メソッドの実行)やコンテクストの切り替えを行う方式である。アクションの例としては、キーボードのキーが押される、マウスのボタンがクリックされる、などがある。アクションが発生すると、イベント信号が付帯情報(キー種別やボタン種別などのデータ)とともに発信される。また、アクションを起爆剤としてさらに他のプログラムコードが動かされたりするようにプログラミングすることをイベント駆動型プログラミングと称することが多い。

一般的にGUIアプリケーションソフトウェアのプログラミングでは、イベントの発生を監視しながら待機するイベントループ(メッセージループ)にて、オペレーティングシステムから受け取ったイベント(メッセージ)オブジェクトを、あらかじめ登録されたコールバック関数[2]にディスパッチ(配送)してイベントに応じたユーザー処理(イベントハンドラー)を実行し、再びイベントループに戻るポーリング的な手法が用いられている。

なお、登録されるコールバック関数はそれぞれインタフェースが決まっており、プログラマはインタフェースを除いてこの関数の中身を自由に記述することでイベントを処理することができる。

通常、コールバック処理の登録は関数ポインタデリゲートなどを用いて実現される。Javaではコールバック処理のカスタマイズに、イベントリスナーインタフェースを実装するカスタム派生クラスでのメソッドオーバーライドを利用する[3]。イベントを言語の仕様として組み込んでいるプログラミング言語、たとえばC#では、特定のアクションが発生した場合に呼び出されるイベントハンドラーを簡潔に記述・登録できる。

DOM Events

[編集]

DOMイベントはWebにおいて発生した動作・出来事である[1][4]。 正格な定義としては、Document Object Model(DOM)で定義されたEventinterfaceを実装するオブジェクトが event と呼ばれる[5]

例として、ウェブブラウザが発火するclick イベントや keydownイベントが挙げられる。またプログラマが任意に発火できるカスタムイベントCustomEvent interfaceの実装)も存在する[6]。これらのイベントを用いることでマウスクリックのような動作(アクション)、ネットワークリクエスト完了のような出来事(イベント)の発生を表現し、イベントに応答した振る舞いを定義できる。

DOM Eventsの特徴は、イベントの伝播がDOM(ウェブブラウザ処理系)によって扱われる点にある。イベントはDOM treeのnodeに対して発行され、treeのrootへ向かって各nodeで処理されながら伝播していく。この伝播はすべてウェブブラウザによって処理されており、その点でウェブブラウザはイベント(メッセージ)処理のためのミドルウェアとして働いているとみなすことができる。

排他制御におけるイベント

[編集]

WindowsWin32以降)には、「イベント」と呼ばれるカーネルオブジェクトがあり、「Win32イベント」と呼ばれることもある。[7]このオブジェクトは、前述のイベントドリブンとはなんら関係ない。イベントオブジェクトは、そのオブジェクトがシグナル(発信)されることにより、待機状態にあるスレッドを再開させるなど、待機状態にある何らかの処理を起動する目的に使われる。また、プロセス間をまたいでイベントオブジェクトを共有できることから、スレッド間通信のみならずプロセス間通信にも利用される。

Win32イベントはイベント的事象を伝達することに特化しており、待機中スレッドがイベント待ちから解放されたとき、自動的にイベントを非シグナル状態にするといった機能がある。セマフォと似ているが、決定的な違いは、イベントは資源数が常に1であり、また伝達できる情報はシグナル発生のみである点である。

イベントは、各APIごとに次のようなクラスまたは関数を通して提供されている。

  • Windows API - CreateEvent()関数(HANDLE型オブジェクト)
  • ATL/MFC - CEventクラス
  • .NET Framework - System.Threading.AutoResetEventクラス、System.Threading.ManualResetEventクラス

脚注

[編集]
  1. ^ a b イベントは、あなたがプログラムを書いているシステムで生じた動作、出来事を指します。 MDN web docs - イベントの紹介
  2. ^ Microsoft Windowsでは、ウィンドウごとに登録されるコールバック関数のことをウィンドウプロシージャ (window procedure) と呼ぶ。
  3. ^ イベントドリブン | じっくり学ぶ Java講座 [初心者向け・入門]”. 2023年7月10日閲覧。
  4. ^ Throughout the web platform events are dispatched to objects to signal an occurrence, such as network activity or user interaction. DOM Living Standard - 2.1. Introduction to "DOM Events" 2019-11-25T07:39+09:00閲覧
  5. ^ An Event object is simply named an event. DOM Living Standard - 2.2. Interface Event 2019-11-25T07:43+09:00閲覧.
  6. ^ CustomEvent インターフェイスはどんな目的のアプリケーションからも初期化されるイベントを表現します。 MDN web docs - CustomEvent
  7. ^ カーネルオブジェクト-win32 apps | Microsoft Learn”. 2023年7月10日閲覧。

関連項目

[編集]
{{bottomLinkPreText}} {{bottomLinkText}}
イベント (プログラミング)
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?