web-dev-qa-db-ja.com

関数の接頭辞「on」(「onButtonPressed」など)はどういう意味ですか?

たとえば、ボタンリスナーのように、一部の関数が接頭辞として "on"を使用する場合があります。

onButtonPressed();

そして他の例があります:

onStateChanged();
onNotified();
onResume();

接頭辞「オン」は、その背後に暗黙の意味上の意味がありますか?

3
ggrr

接頭辞「on」は、メソッドがコールバックとして使用されることを意図していることを示すために最も頻繁に使用されます。つまり、直接呼び出されるのではなく、何らかのイベントのハンドラーとして設定されます。

たとえば、onClickという名前のメソッドを記述する場合、おそらく直接呼び出すことはありませんが、ユーザーがボタンをクリックすると、GUIツールキットがそれを呼び出すことを期待します。

9
el.pescado

編集済み@MetaFightでのコメントでの会話の後に私の回答を修飾して拡張します


イベントで見たほとんどすべての言語(JavaScript、ActionScript2/3)では、on接頭辞を使用して、イベントハンドラープロシージャとemitfire、またはraise接頭辞は、イベントを誘発するメソッドで使用されます。 (Onは、onclick HTML属性などのように、コールバックの添付を示すプロパティ名でも使用される場合があります。)

一方、C#は、この慣例を多少破っているようです。

基本クラスのメソッドでOn接頭辞を使用すると、実際にはイベントが発生します

public class Base
{
    public delegate void OpeningEventHandler(Object sender, EventArgs e);
    public event OpeningEventHandler Opening = delegate {};

    protected virtual void OnOpening(EventArgs e)
    {
        Opening(this, e);
    }
}

このメソッドが派生クラスでオーバーライドされると、オーバーライドはイベントをhandleすることになり、基本実装も呼び出します。

public class Derived : Base
{
    protected override void OnOpening(EventArgs e)
    {
        // handle event here
        base.OnOpening(e);
    }
}

これはおそらく、派生クラスがイベントの伝搬をキャンセルできるようにするために使用されます(基本メソッドを呼び出さないことによって)。

Form.OnloadメソッドのMSDNドキュメント から:

備考

...

OnLoadメソッドを使用すると、デリゲートをアタッチせずに、派生クラスでイベントを処理することもできます。これは、派生クラスでイベントを処理するための推奨手法です。

継承者へのメモ:

派生クラスでOnLoadをオーバーライドする場合は、登録されているデリゲートがイベントを受け取ることができるように、基本クラスのOnLoadメソッドを呼び出してください。

SOに関連する質問 があります。

6
paul

これは、前置詞として使用される英語の単語「on」の多くの意味の1つにすぎません。アクションがいつ発生するかを示します。そのため、ボタンが押されたときにonButtonPressed()が呼び出されます。

関数の名前はwhenButtonPressed()に変更できますが、これは長く、慣用的ではありません

3
Simon B

「OnXXX」は通常、イベントを伴うものですが、プラットフォームごとに異なる命名規則があるため、正確な役割は言語によって異なり、混乱を招く可能性があります。

.net UIクラスでは、「On」という接頭辞が付いたメソッド名は原因イベントが発生するメソッドです。たとえば、Button.OnClick()Click- eventを発生させるメソッドです。 OnXXXメソッドは保護されているため、イベントを発生させることができるのはオブジェクト自体だけです。このパターンは、Webフォーム、Windowsフォーム、WPFの両方に当てはまります。

しかし、asp.net Webコントロールマークアップでは、OnXXXという名前の属性は、イベントのイベントハンドラーregistersであるため、意味が異なります。例えば。 _OnClick="Btn1_Click"_は、メソッド_Btn1_Click_をClickイベントのハンドラーとして登録します。つまり、WebコントロールのOnClick属性はnotOnClickメソッドに直接対応します。むしろそれはコード_Click += Btn1_Click_に対応します。正直なところ、これはやや混乱します。XAMLマークアップでは規約が変更されているため、イベントをアタッチする属性の名前には「On」プレフィックスがありませんが、イベントの名前と直接一致します。例:_Click="Btn1_Click"_。

JavaScriptでは、規則が異なります。ここでonXXXはイベントの名前handlerです。例えば。 _button.onclick_は、クリックイベントが発生したときに呼び出されるメソッドです(.netのようにイベントを発生させるメソッドではありません)。 HTMLのイベントハンドラー属性もonXXXという名前で、イベントハンドラーをアタッチします。 onclick="handleClick()"は、clickイベントのハンドラーを登録します(Asp.netの場合と同様)。

2
JacquesB