質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

1回答

1573閲覧

VBScriptでコード量を減らしたい

natsuki_yamamo

総合スコア10

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2020/08/18 04:24

VBScriptでコード量を減らしたいです。
以下に現在の状況の疑似コードを示します。
同じ変数名の部分は同じものが記述されると思ってください。

function main() a() if hoge fuga b() if hoge fuga c() if hoge fuga

以上のようなものをうまく処理するためには高階関数というのを用いればよいということが
分かりました。しかし、VBScriptはそれを使うための条件である第一級関数ではないため、使えないようです(第一級関数のWikipedia参照)。そこで、他に同様のこどができる方法があれば教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/08/18 04:31

fugaの実行回数も結果に影響する、という状況でしょうか?
guest

回答1

0

ベストアンサー

そのコードからは本当に高階関数が必要なのかどうかが判断できないので,
とりあえず VBScript で高階関数を実現する方法についてだけ書きます.

実は VBScript は本格的なオブジェクト指向言語に比べれば非力ですが,
クラスを作成することができ, 同じメソッドを備えていれば多態もできます.

VBScript

1Option Explicit 2 3Class CHogeA 4 Public Sub Fuga() 5 MsgBox "A" 6 End Sub 7End Class 8 9Class CHogeB 10 Public Sub Fuga() 11 MsgBox "B" 12 End Sub 13End Class 14 15Dim I 16Dim hogeArray(5) 17 18Set hogeArray(0) = New CHogeA 19Set hogeArray(1) = New CHogeB 20Set hogeArray(2) = New CHogeB 21Set hogeArray(3) = New CHogeA 22Set hogeArray(4) = New CHogeB 23 24For I = 0 To 4 25 hogeArray(I).Fuga() 26Next

これを使って高階関数を再現することができます.
3種類の関数を作り, 関数そのものを変数に入れる代わりに,
3種類の「同じメソッドを持つ」クラスを作り, オブジェクトを変数へ入れるのです.
すると同じメソッド呼び出しで, 入れられたオブジェクトに応じたメソッドが呼び出されるので高階関数の代わりとすることができます.

投稿2020/08/18 06:37

kagilinn

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

natsuki_yamamo

2020/08/18 23:39

やっていることは理解できました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問