HIRASE CONNECTION WK

programming collection

目次

Blog 利用状況

ニュース

あわせて読みたいブログパーツ

書庫

日記カテゴリ

Link Collection

[C#] イベント関連の命名規則

C#のイベント関連の命名規則ってあるのかな?

 

イベント名は、過去形で?

イベント名は、どうやら「~~ed」と過去形になっていることが多い。

■1a. public event System.EventHandler ValueChanged;

でも名前だけを見たとき、イベントなのかプロパティなのかがわかりにくい。

■1b. public event System.EventHandler ValueChangedEvent;

だけど、これはこれで冗長な感じがする。

そのイベントを起こす内部関数は、「On+イベント名」で?

イベントを起こす際には1枚ラッパ関数を挟んで、イベントを起こすようだ。
で、そのラッパ関数は「On+イベント名」となっていることが多い。

■2a. protected void OnValueChanged() {}

これは、何となくイベントが「起きた」のか「起こす」のかがわからない。

■2b. protected void RaiseValueChanged() {}

これは、どうだろう。

そのイベントを受け取る側は・・・?

で、イベントを受け取る関数は、どう書いたらいいんだろう。
Visual Studio が吐くコードは、こんなの↓

■3a. void HogeClass_ValueChanged(object sender, EventArgs e){}

■3b. void myHogeInstance_ValueChanged(object sender, EventArgs e){}

だけど、これはそれぞれマイクロソフトの名前付け規則「識別子にはアンダースコアを使用できません」と「識別子の大文字/小文字を正しく使い分ける必要があります」に違反している。

で、考えたのは、以下。

■3c. void HogeClassValueChangedEventOccurred(object sender, EventArgs e) {}

これがはじめに考えたもの。ちょー長い。

■3d. void WhenValueChanged(object sender, EventArgs e) {}

これはわかりやすい(ような気がする)。
が、どこでイベントが起きたのかわからない。

■3e. void WhenValueChangedInHogeClass(object sender, EventArgs e) {}

そこで「In~~」と場所まで書く。
これは・・、長すぎて区切りがわからない。

■3f. void WhenHogeValueChanged(object sender, EventArgs e) {}

で、もう少し短くしてみる。
だけど、なんか意味をとりづらい気がする。

んー、どうしたら、いいんだろう。

追記 - 2008年3月6日 15:08@JST

フィードバック欄にて、よねけんさんが挙げておられるサイトは以下。

追記 - 2008年3月7日 16:44@JST

フィードバック欄にて、れいさんが挙げておられるサイトは以下。

msdnブログ、Krzysztof Cwalinaさんの「API Design Guidelines Digest」

投稿日時 : 2008年3月6日 12:44

コメントを追加

# re: [C#] イベント関連の命名規則 2008/03/06 13:02 シャノン

ガイドラインの存在は知らない。
以下、個人的なこと。

> イベント名は、過去形で?

基本的には、何かが「起きた」ことを通知するものだから、過去形。
ただし、一部には、「これから何かが起きる」ことを通知するイベントもあり、~Changing みたいな名前になっている。
で、~ing イベントは、CancelEventArgs から派生した EventArgs を取って、その変更自体をキャンセルできる場合が多い。

その他はまぁ、慣例に従って。

.NET Framework のドキュメントを見慣れていれば、メソッド名が「On」で始まるだけで、「あ、これはイベントを発生させる protected virtual なメソッドだな」というのがわかる。

イベントハンドラのメソッド名も、対象のインスタンス名_イベント名にしている。
対象のインスタンス名が小文字で始まる場合はイベントハンドラ名も小文字で始まる。
ただし、複数のインスタンスからの同じイベントをキャッチする場合は、クラス名_イベント名にしたり、まぁその場に応じて臨機応変に。
イベントハンドラでないメソッドは大文字で始まり、アンダースコアは使わないようにしている。

# re: [C#] イベント関連の命名規則 2008/03/06 13:09 れい

れいです。はじめまして。

> > イベント名は、過去形で?
> 基本的には、何かが「起きた」ことを通知するものだから、過去形。

えー・・・。
過去形ではなく、「過去分詞」です。

> ただし、一部には、「これから何かが起きる」ことを通知するイベントもあり、~Changing みたいな名前になっている。

これは現在分詞。
「現在~している」という意味です。

「起きた」とか「起す」というのは
どの立場からみるかで変わってくる話で、昔からもめているところです。
それに対する解のひとつが
「On~」で、
「~が起きるとき(に呼ぶ)」という意味です。

# re: [C#] イベント関連の命名規則 2008/03/06 13:16 凪瀬

過去分詞でしょうねぇ。
受動態で「クリックされた」を意味しているととらえるのが自然。
日本語だと過去形でも「クリックされた」なんだけどw

# re: [C#] イベント関連の命名規則 2008/03/06 13:36 れい

Control.Clickとかいくつか例外はありますが。
「Form.Shown」とかで分詞であるのがわかるかと。

> void WhenHogeValueChanged(object sender, EventArgs e) {}

Whenだと接続詞なので後ろには文がこないと変。
「WhenHogeValueHasChanged」
句にするなら「OnHogeValueChanged」。

変な英語使うくらいなら
日本語でコーディングしたらいいと思うんですが。

# re: [C#] イベント関連の命名規則 2008/03/06 14:01 よねけん

こんにちは。
以下のようなガイドラインがあります。

・msdn内
- イベントの名前付けのガイドライン

・msdn2内
- 型のメンバの名前
- イベントのデザイン

ちなみに、れいさん、凪瀬さんが指摘されているように過去分詞や現在分詞だと
思っています・・・が、ガイドラインによれば、過去形や動名詞と説明されていたりします。

日本の英語教育では「過去分詞」という区別をしますが、ひょっとするとネイティブの場合は
過去形と過去分詞という分類の仕方をしないのかもしれませんね。
Shownイベントなんかは完全に過去分詞ですけど。

#URLがあると投稿できないっぽいので各ガイドラインのURLは削除。
#キーワードでぐぐってください。

# re: [C#] イベント関連の命名規則 2008/03/06 15:45 T.Hirase

みなさま、フィードバックありがとうございます。
英語が不得意なうちは、マイクロソフトに従っておくことにします。
# 真剣に悩んでるわけではなく、皆様はどうしておられるのかと思っただけですし。

>ちなみに、れいさん、凪瀬さんが指摘されているように過去分詞や現在分詞だと
>思っています・・・が、ガイドラインによれば、
>過去形や動名詞と説明されていたりします。
過去分詞云々についてですが、英語版ページには「Use a gerund (the "ing" form of a verb) to create an event name that expresses the concept of pre-event, and a past-tense verb to represent post-event.」と書いてあり、該当箇所 "past-tense" を訳すなら「過去時制の動詞」という感じですね(過去分詞と意訳しても問題ないのかな?)。

■TO: シャノンさま。
>.NET Framework のドキュメントを見慣れていれば、メソッド名が「On」で始まるだけで、「あ、これはイベントを発生させる protected virtual なメソッドだな」というのがわかる。
protected virtual だったのですね・・。単に protected かと思ってました。
(調べろよ自分。)

■TO: れいさま。
>Whenだと接続詞なので後ろには文がこないと変。
>「WhenHogeValueHasChanged」
あぁ、ダメだ、自分。
勉強になります。

>変な英語使うくらいなら
>日本語でコーディングしたらいいと思うんですが。
日本語を使ってしまうと、海外の人に使ってもらえないじゃないですか。
(使ってもらえるほどのものを作ってるかは別として。)
でもまぁ、変な英語を使うぐらいなら、日本語。
日本語を使うぐらいなら、変な気を回さずマイクロソフトルールでいこうと思います。

■TO: 凪瀬さま。
>日本語だと過去形でも「クリックされた」なんだけどw
日本語だと全く一緒なんですよね。
前後の文脈がないと判断できないですし、
前後の文脈があっても判断できないことが多いです。

■TO: よねけんさま。
ガイドラインの参考情報ありがとうございます。

>#URLがあると投稿できないっぽいので各ガイドラインのURLは削除。
ダメでしたか・・。自分も知りませんでした・・。
テスト→http://blogs.wankuma.com/hirase/

# re: [C#] イベント関連の命名規則 2008/03/06 15:45 T.Hirase

ありゃ、いけた。

# re: [C#] イベント関連の命名規則 2008/03/06 16:37 よねけん

>>#URLがあると投稿できないっぽいので各ガイドラインのURLは削除。
>ダメでしたか・・。自分も知りませんでした・・。

wankumaのブログのスパム対策内情はわからないですが、
アルファベットやらURLやらが一定量あるとダメっぽいです。
#英字をほとんど使っていない場合でも投稿が無視される場合があるので、
#たぶん何らかのNGワードも設定されているような気がします

> 過去分詞云々についてですが、英語版ページには
> 「Use a gerund (the "ing" form of a verb) to create an event name that expresses the concept of pre-event, and a past-tense verb to represent post-event.」
>と書いてあり、該当箇所 "past-tense" を訳すなら「過去時制の動詞」という感じですね(過去分詞と意訳しても問題ないのかな?)。

私もここを読んで、past-tenseが過去形と過去分詞の両方を意味的に含むのかどうかがわかりませんでした。昔、この文を個人的に和訳したときは、単純に「過去時制」と訳してました。

過去分詞の英語はpast participleになりますが、例えば、日本人が日本語の品詞をあまり意識する機会がないように、英語がネイティブな人には過去形か過去分詞かという言語学者(及び、英語が母国語でない人)しか使わなさそうな言葉をあまり意識しないのではないかなと想像しています。

# re: [C#] イベント関連の命名規則 2008/03/06 17:59 凪瀬

> 過去分詞云々についてですが、英語版ページには
> 「Use a gerund (the "ing" form of a verb) to create an event name that expresses the concept of pre-event, and a past-tense verb to represent post-event.」
>と書いてあり、該当箇所 "past-tense" を訳すなら「過去時制の動詞」という感じですね(過去分詞と意訳しても問題ないのかな?)。

> 英語がネイティブな人には過去形か過去分詞かという言語学者(及び、英語が母国語でない人)しか使わなさそうな言葉をあまり意識しないのではないかなと想像しています。

うーむ。
このあたりは語学に堪能な人にでも聞かないとわかりませんね…。

# re: [C#] イベント関連の命名規則 2008/03/06 19:09 シャノン

msdn2じゃないmsdn.microsoft.comへのリンクははれないって聞いたような。

# re: [C#] イベント関連の命名規則 2008/03/07 15:19 れい

むむー

こちらにコーディング規約のダイジェストがあります。
http://blogs.msdn.com/kcwalina/archive/2004/09/28/235232.aspx
ここではpresend particleとかいてありますが、
ダイジェストではないコーディング規約にはgerundとあります。

少なくとも現在分詞と動名詞は混乱しているようです。

ざっと探してみましたが、
明白に過去形であると言う例は見つかりませんでした。
過去分詞である例は
shown, done, written
の三つが見つかりました。

> 英語がネイティブな人には過去形か過去分詞かという言語学者(及び、英語が母国語でない人)しか使わなさそうな言葉をあまり意識しないのではないかなと想像しています。

私の周りの人3人に訊いてみました。
米英では学校で習うそうです。
外国語教育を受けているレベルなら、間違うことはあまりないということでした。
ですが、イベント名が過去形であるというのはそれ以上に考えられない、とも言っていました。
なので、恐らく過去分詞です。

ところで。

「read」の場合、皆さんはどうしますか?

# re: [C#] イベント関連の命名規則 2008/03/07 16:43 T.Hirase

返事が遅れまして申し訳ありません。
read、read、read・・・、loadedに直すとかやりそうです。

タイトル  
名前  
URL
コメント