GJAX IS UNDER CONSTRUCTION! (※日本語ブログ)

Please wait a minute for GJAX/2008

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  171  : 記事  0  : コメント  392  : トラックバック  50

ニュース

今後のスケジュールについて

予定なし

インフォメーション

わんくま同盟メンバ ブログ トップ

ブログタイトル(July 2007~)
GSP.NET GJAX!
【読み方:じーえすぴーどっとねっと/じーじゃっくす】
【サブ:~ A C# programmer dives into ASP.NET! ~】

ASP.NET AJAXと違って、GSP.NET [ghost_shell's (web) pages & .NET]の部分が正式名称、GJAX!の部分が省略形・俗語となっています。

過去のブログタイトル
【表記:ウェブ100】
【読み方:うぇっぶいちまるまる】
【サブ:.Net & Webに てん ぜろ】

書庫

日記カテゴリ

リファクタリングがしっかりできている人は、メソッド切り出しもやっていると思います。

私の指針は、

  1. 読みやすさを維持しつつ行数を抑える。
  2. 1画面に収まらない(※1)場合は、適切な長さの意味のあるブロックをメソッドとして切り出す。
    (※1) あくまで目安です。

といった感じです。(今回の話に関係する箇所のみ)

 

こういった切り出しによって作成された1箇所からしか呼ばれないメソッドはありませんか。これに「利用範囲は広いのに1箇所でしか使ってない!」というメソッドは含みません。

そういうメソッドはオーバーヘッドを考えて(※2)「インライン化できればなぁ。」と思います。ただC#にはそういった書き方はありません。(C++.NETはどうだっけ?)

(※2) このオーバーヘッドは無視できるという共通認識ではありますが

 

まぁでも、インラインにできなくてもいいです。それよりももっと切実に思うことがあります。

「インテリセンスから消す(メソッドの存在を隠す)ようにしてくれ!」

ソースが見づらいという理由で生まれたメソッドなのに普通のメソッドと扱いが同じことにあまりいい気がしません。

「アクセス指定子のinternalもそうだけど、内部でも隠しておきたい・使われたくないってことな~い?」

 

ちなみに以下のリンクでは今回したいことは解決できませんのであしからず。(名前空間を見ればわかると思う。)

VS.NET プロパティウィンドウのカスタマイズ - Insider.NET(掲示板)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=26297&forum=7

System.ComponentModel 名前空間(.NET Framework クラス ライブラリ)
http://msdn2.microsoft.com/ja-jp/library/system.componentmodel(VS.80).aspx

10 行でズバリ!! 番外編~ 自分流のコントロールを作っちゃおう
http://www.microsoft.com/japan/msdn/thisweek/10lines/extra_propertyBrowser.aspx

投稿日時 : 2007年7月13日 15:24

コメント

# re: インラインにできなくても 2007/07/13 16:17 まどか
> ソースが見づらいという理由で生まれたメソッドなのに

理由はわかります。
構造化とオブジェクト指向が入り混じって混乱しますが、
それらが「いつ呼んでも正しく動く」ものではなく、
依存やタイミングを限定するものだとある意味良くないという感じもします。

たとえば、
1.名前を限定化する。
  InitializeMembersListView()
  「リストビュー」汎用ではなく、「メンバー一覧」限定であることがわかります。
2.引数により抽象化する。
  InitializeListView(ByVal targetListView As ListView)
  プロシージャ内部で固定のコントロールを参照しない、つまり呼び出し側が依存情報を持っています。
というようなことをおこない、「呼びたきゃ呼べば」な状態で作るのも大事かと。

# re: インラインにできなくても 2007/07/13 16:19 まどか
よく見たら、このブログ「誰の」がどこにも書いてないね。(汗

# re: インラインにできなくても 2007/07/13 16:26 Ã΃ǃЃуŃʃ
C++/CLIだとinlineに書いてもinline展開してくれてないポです。

# re: インラインにできなくても 2007/07/13 17:55 ダッチ
私も同じようなことを思っていました。
あるメソッドからしか呼べないメソッドが欲しいです。アクセス修飾子でいうと Private より弱くて Local より強いやつ。Local メソッドでもいいかも。
匿名メソッドを見たときに、これだ!と思ったんですが、用途が違いました。

# re: インラインにできなくても 2007/07/13 18:13 まどか
> あるメソッドからしか呼べないメソッドが欲しいです。

Private Sub Hoge()

Call HogeSub()

InnerSub HogeSub() ’Regionみたいに閉じれるよ!
End InnerSub

End Sub

あ~、GoSub~Returnを思いだすぅ。


# re: インラインにできなくても 2007/07/13 18:58 ghost_shell
まどかさん

ghost_shellです。来週に向けてCSS・ブログ名を変えたいと考えています。自宅でネットにつなげられない、っていう重大な問題があるのですが。
オブジェクト指向とプログラミング作法を分けてオブジェクト指向だけ考えれば、呼び出し箇所が限定されるメソッドの切り出しはNGに近いと私は思います。
ただソースコードの長いメソッドって読む気が失せるから、人に見せることを考えて分けています。
それこそregionがもう少し高機能になってくれればなぁ。(展開状態のまま印刷したり、#regionの部分を取り除いてくれたり。)
テクニックは大切にさせていただきます。


επιστημη先生?

元の言語に準拠してはじかないようにしているけど、そんなことはやらないよ。っていうことなんでしょうか。


ダッチさん

>匿名メソッドを見たときに、これだ!と思ったんですが、用途が違いました。

私も思ったことあります。でもまるで違う。

# re: インラインにできなくても 2007/07/13 21:02 ddnp
おはつです。ddnpといいます。
以下、的外れならごめんなさい

>>「インテリセンスから消す(メソッドの存在を隠す)ようにしてくれ
昔、VB6でクラスライブラリチックなものを作ってたときは、
private function でインテリセンスから除外されていたような。
→ <instance>. の時点でリストアップされない。

C++/CLIは勉強不足(というか触れていないorz)ので分かりませんが
C++でいうと、private: はあくまでアクセス制御、
可視・不可視ではなく、さわれる・さわれないを示すから、
VC2005などでは、インテリセンスからその存在が見えちゃいますね。
クラス内部での処理をするために、privateなメンバ関数を
割と使いますので、クラスを他人に公開する側としては
インテリセンスに出てきてほしくない、というのはすごくよく分かります。

thisに絡まないものなら、anonymous-namespaceに放り込んだりもしますが・・・。
# 何とかパターン、あの不完全なポインタ経由でアクセスさせるやつ
# あれを勉強したい。あれが匿名メソッド?

# re: インラインにできなくても 2007/07/13 23:28 かるあ
別にソースが長くても問題ないと思うけれど、(無理に短くする必要な無い)
Delphi や PL/SQL だと メソッドの中に名前をつけたメソッドを作れますよね。

# re: インラインにできなくても 2007/07/14 0:27 siokoshou
こんにちは。インテリセンスから消すっておもしろそうと思ってぐぐったら、こんなの見つけました。
http://www.hadianto.net/destination/archives/2005/08/hide_methodspro.html

つまり、[EditorBrowsable( EditorBrowsableState.Never )] と属性をつけてやれば、本来ならインテリセンスから消えるそうです。
しかし、C#のIDEがバグってて効かないそうですw
VBはOKのようです。


Post Feedback

タイトル
名前
Url:
コメント: