Re: 関数・サブルーチン・メソッド (No.1) [スレッド一覧へ] |
- 日時: 2007/07/03 15:08
- 名前: よねKEN
- 一般掲示板ということで少々雑談的な内容も含んでおります。
>・VB6での「関数・サブルーチン」はVB.netで「メソッド」に置き換わったと思っていいですね?
これらの用語は場面により意味が異なるのでなかなか返答の難しい質問ですね。
まず一般用語として意味合いでの話し。 関数、サブルーチン、メソッド、手続きなどはどれも 同じような意味合いで使われるのが実情かと思います。 本来は関数は戻り値があるものを指し、手続きは戻り値のないものを指します。 サブルチーンはある一塊の処理という程度の意味で使われており、 どのように呼び出されるか?といったことまで意識せず使われることが多いです。 メソッドはオブジェクト指向を前提とした言い方で、オブジェクトに対する操作 という点だけに着目しているので、戻り値があるのか?ないのか?といったことは表現していません。
VB6以前の用語としての話。 厳密にはVB6以前(というか実際は旧時代のBASICで)のサブルーチンは Gosub 〜 Returnを使用した共通部品を指します。 しかし実際はFunctionプロシージャとSubプロシージャを両方指した言葉として使われていることも少なくありません。 ダンボさんのおっしゃっている「関数・サブルーチン」は、 このFunctionプロシージャとSubプロシージャのことですね。 メソッドについてはかなり古いVBからあります。 少なくとも私の知るVB4以降はクラスモジュールもありますので、メソッドも存在します。
メソッド = クラス(オブジェクト)に属しているFunctionプロシージャ(関数)、Subプロシージャ(サブルーチン)
という位置づけかと思います。
VB.NET以降としての話。 VB6以前と特に変わっていません。 VBにはModuleが存在しており、この発想は非オブジェクト指向な機能として残っています。 Moduleに存在するものであれば「関数・サブルーチン」と言えなくもありません。 ただし、Moduleを使わない、あるいは、静的なクラスと同等である、と考えることで、 これらもまたメソッドであると呼称することは特に問題ないと思っています。
後、Microsoft.VisualBasic.dllに存在するものは互換性の点からヘルプでは 関数として記載されていますね。それ以外にも組込のCInt関数などの 型変換関数は「関数」と呼ばれていますね。これらは所属するクラスがありませんので、 関数としか呼びようがない気もします。
>・言語仕様も、Function,Subを捨てて > Private Method DrawPic(ByRef FNAME As String) As Image >のように統一することも、やればできた?統一した方が素直だった?
やろうとすればもちろん可能だと思います。 こっちの方がキレイではありますね。
ただ、VBの大前提として過去の資産を最大限活かす必要がありますから、 言語としてのキレイさの追求のために、無用な修正工数の発生するような 言語仕様の変更は通常されないでしょうね。
|
Re: 関数・サブルーチン・メソッド (No.2) [スレッド一覧へ] |
- 日時: 2007/07/03 17:34
- 名前: ダンボ
- よねKENさん、いつもお世話になっております。
>厳密にはVB6以前(というか実際は旧時代のBASICで)のサブルーチンは >Gosub 〜 Returnを使用した共通部品を指します。
をぉ、そうだったんですか。実はダンボは今でも極まれにGosubを使います。 ・極少量のルーチン(5〜10行程度) ・多数(10以上)の引数で受け渡すより実変数を直接アクセスするほうが楽 ・そのルーチン内だけで使われ他所からは呼ばれない。
>ダンボさんのおっしゃっている「関数・サブルーチン」は、 >このFunctionプロシージャとSubプロシージャのことですね。
そうなんです。不正確なのかもしれません。 ちなみにダンボはSubプロシージャは使いません。C言語の影響もありSubはvoid型の Functionだし、Functionとして設計しておけば使い回しが利くし。
>メソッド = クラス(オブジェクト)に属しているFunctionプロシージャ(関数)、Subプロシージャ(サブルーチン) >VBにはModuleが存在しており、この発想は非オブジェクト指向な機能として残っています。 >Moduleに存在するものであれば「関数・サブルーチン」と言えなくもありません。 >ただし、Moduleを使わない、あるいは、静的なクラスと同等である、と考えることで、 >これらもまたメソッドであると呼称することは特に問題ないと思っています。
ここですね。「VB.Netはクラスのお化け」みたいな感じがします。
>それ以外にも組込のCInt関数などの型変換関数は「関数」と呼ばれていますね。これらは所属するクラスがありませんので、
おや、VB.Netにもクラスに所属しない関数があるのですか!!
全般としては、私の理解は誤っておらず更にいろいろの補足を与えてくださってありがとうございました。
|
Re: 関数・サブルーチン・メソッド (No.3) [スレッド一覧へ] |
- 日時: 2007/07/03 19:21
- 名前: 魔界の仮面弁士
- >> メソッドについてはかなり古いVBからあります。
>> 少なくとも私の知るVB4以降はクラスモジュールもありますので、メソッドも存在します。 メソッド等は VB1 の頃からあったと思います。(VB for MS-DOS の事は知らない) ただし VB4 未満では、組み込みのメソッドがあるだけで、自作はできなかったかと。
たとえば、VB2 だと、Call Form1.Sample() として使えるようなメソッドを、 Form1 上に追加することができませんでした。
そのため VB3 以下のバージョンでは、(メソッドではなく)「Sub プロシージャ」などの 呼ばれ方が一般的であったと記憶しています。
> 実はダンボは今でも極まれにGosubを使います。 でも、VB2005 では使えないんですよね。
> ・極少量のルーチン(5〜10行程度) > ・多数(10以上)の引数で受け渡すより実変数を直接アクセスするほうが楽 > ・そのルーチン内だけで使われ他所からは呼ばれない。 それらの要件であれば、VB9(or VB10?) でラムダ式(あるいはせめて匿名メソッド)が 使えるようになれば、GoSub の代用になるかも……?
|