tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^6: 長くなりすぎるプロシージャ名
投稿日: 2008/06/02(Mon) 12:30
投稿者ひでと
ありがとうございます。
> しかし、下記のようなメソッドはどうでしょうか?
>
> ' stringValue->検査対象、number->検査対象で整数として読み取れる部分までを変換した整数を返す
> ' 例えば、"123XX"という文字列を渡した場合、numberは123、戻り値はFalse
> Public Function IsNumber(ByVal stringValue As String, ByRef number As Integer) As Boolean
>
> このメソッドに違和感を感じませんか?
> stringValueを検査するという機能と、stringValueから整数と読み取れる箇所を抜き出す機能という2つの機能を持っています。
> この機能面に基づいてメソッド名を変えるとIsNumberAndCutNumberのような
> 妙な名前のメソッドになるかもしれません。
>
> こういうような意味での「1つの機能」です。
戻り値が二つあるようなら 機能が二つあるという感じですね。
関数としての「1つの機能」は理解できました。ありがとうございました。

>
> > Public Sub 処理11(選択 as Integer)
> >   Select Case 選択
> >  Case1:   処理111
> >   Case2:   処理112
> >      :
> >   CaseN:   処理11N
> >  End Select
> > End Sub
> > この場合は1つの機能とは言えないのでしょうか?
>
> というわけで具体的な処理を説明いただかないと私には判断できません。
具体的な説明ではないのですが、上記の例は
「処理11」は「選択」の値に応じて「処理111」「処理112」等の処理をする
という処理です。
「ある値に応じて処理をする」という意味で「1つの機能」であると言えるのかな?
という疑問でした。Functionの場合より「1つの機能」の意味が分かり辛いです。

>
> > > また、例えば、この中で処理111は処理1の中の処理11から呼び出されるわけですが、
> > > 処理111は処理1や処理11に依存した内容でしょうか?
> > > 依存しない内容であれば、処理1_処理11_処理111という名前にする必要はなく、
> > > 単に処理111でよいはずです。
> >
> > 上記のように選択肢で分岐してますので、依存した内容です。
>
> 依存しているというのはわかりましたが、上記のイメージだけを見ると
> 処理11メソッドは必要なくて、処理1にSelect Caseをそのまま書くという選択肢も
> 考えられます。(あくまで上記のコードイメージを見ての判断ですが)
>
> > このような場合に、他のメソッドに依存しないように作るにはどのように
> > すればいいのでしょうか?
>
> #本質的に依存するものであれば切り出せない場合もあります
> よくある蜜に結合されているメソッド群は、メソッドの引数を通じてデータを
> やりとりせず、モジュールレベルの変数にデータを持たせて、
> そのモジュールレベルの変数を介して連携しているものがあります。
> こういう場合では、モジュールレベルの変数を介して処理をするのを
> やめてメソッドの引数、及び、戻り値を使うようにすれば、そのメソッドの
> 独立性が高まります。

今回のケースは、それに当たる気がします。モジュールレベルでの変数によって
全ての処理が決定されてしまいます。
「メソッドの独立性」とは、別の箇所で使いまわしする為に必要な事ですよね。
今回は、使いまわしはしない予定で、逆に関係ない部分からアクセスすることが
できないようにしたいので、「蜜に結合されている」状態だと思います。
>
> > 自己レスで入れたように、クラス単位で分割を試みていますが、
> > 手続き的な処理の本質は変えられないのですが、こういうのはまずいのでしょうか?
>
> クラス単位に分けることを先ほどは提案しましたが、今回話題にしているメソッド群が
> 一連の手続きなのであれば、それらはすべて1つのクラスの中のメソッドにしか
> ならないかもしれませんので、無理にクラスに分けるのはお勧めできません。

クラス分けしようとしていましたが、非常に混乱して「にっちもさっちも」
という感じになっていました。
今回は「すべて1つのクラスの中のメソッド」にしたいと考えてますので、
クラスの使用をあきらめてみます。

漠然とした質問に、丁寧にお答えいただきありがとうございます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。