tagCANDY CGI VBレスキュー(花ちゃん)の雑談用掲示板
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の雑談用掲示板
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の大前提として過去の資産を最大限活かす必要がありますから、
言語としてのキレイさの追求のために、無用な修正工数の発生するような
言語仕様の変更は通常されないでしょうね。



 [スレッド一覧へ] [親スレッドへ]