■86251 |
Re[5]: バイナリデータの途中から切り出して出力する方法 |
□投稿者/ 魔界の仮面弁士 -(2018/01/05(Fri) 14:48:07)
| 情報過多になるかもしれませんが、さらに補足。
■No86238 (へなちょこ さん) に返信 >>> 「タプル」というのを始めて見たのが原因です.....。
タプル(tuple、順組、組)は比較的新しい言語機能なので、 発行年の古い書籍等などでは触れられていないかもしれません。
英語で言うところの倍数詞に当たるものと説明されることもあります。 1-タプルが Single 2-タプルが Double 3-タプルが Triple VB においては、名前の無い構造体型のようなものをイメージすると良いかも。
具体例で言うと…たとえば Dim Sei As String = "福澤" Dim Mei As String = "諭吉" という 2 つのデータがあった場合、姓と名は別々に管理するよりも 一組のデータとして取り扱ったほうが分かりやすいですよね。
そこでたとえば、Class あるいは Structure を自作して Dim data As New MyStructure() 'MyStructure は自作のデータ型 data.Sei = "福澤" data.Mei = "諭吉" のようにしてまとめる様にするわけです。
これにより、「姓」と「名」という関連性のある 2 つのデータを data という 1 つの変数にまとめることができます。
ところが、局所的にしか使わない変数のために、わざわざクラスや構造体を 用意するのは煩わしいこともあります。そこで、特に型名をつける必要が無いものに対しては、 タプル、すなわち System.Tuple および System.ValueTuple を利用できるようになりました。
.NET 4 以降では、「1〜8 個の要素を組み合わせたデータ」を「タプル」として 'Dim data As New Tuple(Of String, String)("福澤", "諭吉") Dim data = Tuple.Create("福澤", "諭吉") MsgBox(data.Item1) MsgBox(data.Item2) のようにして利用することができます。
しかしこの手法では、メンバー名が Item1〜Item8 と固定的であったため、 VB2017 以降においては言語機能を拡張して Dim data = (Sei:="福澤", Mei:="諭吉") MsgBox(data.Sei) MsgBox(data.Mei) のように、メンバー名を指定できるタプル構文が追加されています。
なお、これと似たようなことは、「匿名型」でも実現できます。 匿名型は VB2008 以降で追加された構文であり、たとえば下記のように書きます。
Dim data = New With {.Sei = "福澤", .Mei = "諭吉"} MsgBox(data.Sei) MsgBox(data.Mei)
しかし匿名型は、ローカル変数として使う分には良いのですが、 「メソッドの戻り値」や「引数」として使うのには向いていません。
'型名を明示できないので、As Object にするしか無い Function Sample() As Object Return New With {.Sei = "福澤", .Mei = "諭吉"} End Function
タプルを使えば、戻り値や引数として使うことができるというメリットがあります。
Function Sample() As (Sei As String, Mei As String) Return ("福澤", "諭吉") End Function
> 「モジュール」も分かっていない始末です.....。
VB6 などでは良く使われていた機能ですが、今となっては、どちらかといえば 限定的な場面(たとえば下記の URL)でしか使われない機能なので、 初心者のうちは、習得すべき優先度としては、やや低いと思います。 https://code.msdn.microsoft.com/windowsdesktop/9-0a98f2cd
ただ、新規プロジェクトの作成時に「コンソール アプリケーション」を選んだ場合には 自動的に Module が組み込まれますので、先の例ではそのまま貼り付けていました。 (なお、Module を使わずとも、コンソール アプリケーションを作ることはできます)
なお、VB.NET で「モジュール」というと Module ステートメントの事を指します。 https://code.msdn.microsoft.com/windowsdesktop/14-Visual-Basic-Module-2c407099
ところが上記の URL では、 ≫ 「モジュール」 (標準モジュール) と呼ばれるもの という表記が使われています。
これは .NET 以前の VB(VBA / VB6 など)では、VB.NET の Module に相当する機能が 「標準モジュール」と呼ばれていたためです。
VB4〜VB6 の頃は *.vb ファイルが無く、 標準モジュール (VB.NET で言う所の Module Module1 などにあたる)の *.bas ファイル クラス モジュール (VB.NET で言う所の Class Class1 などにあたる)の *.cls ファイル フォーム モジュール (VB.NET で言う所の Class Form1 などにあたる)の *.frm ファイル のように、複数の「モジュール」が存在していましたので、それらを区別するために 「標準モジュール」という用語が使われていたことによる名残です。
それと .NET Framework において「モジュール」というと、.netmodule というファイルの事を 指す場合がごく稀にあります。主に C++ 向けであり、VB / C# で使われることはまず無いですけれどね。 https://code.msdn.microsoft.com/windowsdesktop/18-netmodule-c96b3411 https://msdn.microsoft.com/ja-jp/library/aa719660.aspx https://msdn.microsoft.com/ja-jp/library/0zyh2sf2.aspx |
|