C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■86251 / 5階層)  バイナリデータの途中から切り出して出力する方法
□投稿者/ 魔界の仮面弁士 (1528回)-(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
解決済み
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[4]: バイナリデータの途中から切り出して出力する方法 /へなちょこ →Re[6]: バイナリデータの途中から切り出して出力する方法 /へなちょこ
 
上記関連ツリー

バイナリデータの途中から切り出して出力する方法 / へなちょこ (18/01/01(Mon) 19:46) #86230
Re[1]: バイナリデータの途中から切り出して出力する方法 / Azulean (18/01/01(Mon) 22:20) #86233
│└ Re[2]: バイナリデータの途中から切り出して出力する方法 / へなちょこ (18/01/01(Mon) 22:40) #86234
Re[1]: バイナリデータの途中から切り出して出力する方法 / 魔界の仮面弁士 (18/01/01(Mon) 23:20) #86235
  └ Re[2]: バイナリデータの途中から切り出して出力する方法 / へなちょこ (18/01/02(Tue) 12:53) #86236
    └ Re[3]: バイナリデータの途中から切り出して出力する方法 / 魔界の仮面弁士 (18/01/02(Tue) 20:44) #86237
      └ Re[4]: バイナリデータの途中から切り出して出力する方法 / へなちょこ (18/01/02(Tue) 22:35) #86238 解決済み
        ├ Re[5]: バイナリデータの途中から切り出して出力する方法 / 魔界の仮面弁士 (18/01/05(Fri) 13:46) #86250 解決済み
        │└ Re[6]: バイナリデータの途中から切り出して出力する方法 / へなちょこ (18/01/09(Tue) 21:01) #86262
        └ バイナリデータの途中から切り出して出力する方法 / 魔界の仮面弁士 (18/01/05(Fri) 14:48) #86251 解決済み ←Now
          └ Re[6]: バイナリデータの途中から切り出して出力する方法 / へなちょこ (18/01/09(Tue) 21:09) #86263

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信