質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

1683閲覧

自前のクラスが状態変化でイベントを発火させるには?

kekemoto

総合スコア34

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/01/04 23:24

編集2016/01/04 23:26

###やりたいことの例
例えば、バッテリークラスを作ったとして、容量がなくなったらイベントを発火するといった処理が行いたいです。
例外を投げるみたいに、容量がなくなる可能性がある部分に対して毎回try...catchするのではなくて、バッテリークラス自身がイベントを発火させて、予めリスナーに登録しといた処理をさせるということをしたいです。

###お願い
具体例はJavaScriptで知りたいです。
またはC,C++,Java,PHPのどれかでお願いしたいです。
具体例はなくても構いませんが、あった方が嬉しいです。

###調べた事
JavaScriptでのカスタムイベントを少し調べて見たのですが、作れるタイプがHTMLに関するもの、マウスに関するものと分類分けされていて、やりたい事と違うように感じました。
http://shim0mura.hatenadiary.jp/entry/20111224/1324735206

W3Cの仕様もチラッとだけ読んだのですが、どこに書いてあるのか分からず断念しました。
https://w3c.github.io/uievents/#event-flow

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

こんにちは。

例外で通知するのではなく、オブザーバー・バターンで通知したいということですよね?
単純に例外を投げる代わりに登録されているリスナーを次々と呼べば良いだけと思います。

すいません、具体的な記述については、JavaScriptが得意な方にお任せ致します。

投稿2016/01/05 02:12

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

回答ありがとうございました。

バッテリーがなくなったら関数のリストを呼び出すというのが思いつかなかったです。さらに突き詰めるとオブサーバー・パターンになるのだろうと思います。

これはこれで正解なのですが、JavaScriptの場合はパターンを作らずとも、カスタムイベントで自前のイベントを作れるようです。カスタムイベントは調べたつもりでしたが、足りなかったようです。
Creating and triggering events

JavaScript

1var Observer = document.createElement("aerial"); 2Observer.addEventListener("lack", function(e){alert(e.type);}, false); 3 4function Battery(energy){ 5 this.energy = energy; 6} 7Battery.prototype.use = function(energy){ 8 if(this.energy < energy){ 9 this.energy = 0; 10 Observer.dispatchEvent(new Event("lack")); 11 } 12 else{ 13 this.energy -= energy; 14 } 15} 16 17var battery = new Battery(10); 18battry.use(11);

投稿2016/01/05 15:28

kekemoto

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

イベントを発火させる方法を考える前にバッテリの状態をどうやって取得するのかを考える必要があるのではないでしょうか。
バッテリ状態を能動的にGETするAPIしか用意されていないのなら setInterval でバッテリ状態を監視する必要がありますし、バッテリ状態が変化する事を捕捉できるならそのAPIを使えば良いでしょう。

とりあえず、Battery Status にお望みのイベントがあるように読めます。
Battery Status でも足りなければ、適切なタイミングで dispatchEvent して下さい。

Re: kekemotoさん

投稿2016/01/05 06:34

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

バッテリーに

  • 容量がなくなったら呼び出す関数のリスト
  • ↑に関数を追加/削除するための関数

を用意して、
バッテリーは容量がなくなったらリストに登録されている関数を全部呼び出せば
実現できます。

投稿2016/01/05 03:01

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問