投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/10/28 04:23:16
> 今回「With」を知り、これを使うと見やすくなると感激し、全部ソレにしたのです。
VB4 の頃は、With キーワードも持て囃されたのですけれどね。
当時はパフォーマンス面でのメリットもあったのですが…。


> ●本職の皆さんは、どういう方法を使ってるのでしょうか…?
.NET 世代の With は元々、デバッガとの相性があまり良くなかったこともあり、
.NET 版の With については、自分はほとんど使わなくなってしまいました。
オブジェクト初期化子の With ならば使いますけれどね。


> 変数値をチェックしようしても、値が表示されない?
ありますね、そういうこと。

VB2015 以降は、.NET Compiler Platform (いわゆる “Roslyn”) に置き換わったせいか、
開発環境の振る舞いが以前とは微妙に異なる点があったりして、個人的には使いにくい面も。
https://social.msdn.microsoft.com/Forums/ja-JP/1bd0b1c4-3189-40bf-b7e0-60f78ccd78d4/vs201712398124521253112486125221247512531124731239512388123561239?forum=vbgeneralja
https://social.msdn.microsoft.com/Forums/ja-JP/81c0ed52-6474-4c30-ab6c-28985cdf7c00/if259911239824460123981230012301123983535236848124181242812434?forum=vbgeneralja

今回の件以外でも、特定バージョン下における不具合によって、開発環境の動作が
不自然になったり、あるいは気づきにくい仕様変更が突然組み込まれたりと、
バージョンごとに細かい差異があったりします。
https://social.msdn.microsoft.com/Forums/ja-JP/c921790c-93a7-4b2c-8316-feee0faeb500/if25991123982083712428233761236412362123631237512356823065311?forum=vbgeneralja
https://social.msdn.microsoft.com/Forums/ja-JP/4045eb6d-3837-4813-89ec-23b3585f921e/12304vs2019123052599123383259681239112399123941236721015259681239?forum=vsgeneralja
https://social.msdn.microsoft.com/Forums/ja-JP/9eebe940-ac62-407f-b21f-cab8737ea718/compiler-bug-vs2008?forum=csharpgeneralja


> C# には With がありませんし、あまり需要がない機能なのかもしれません。

C# 版にも with が欲しいというニーズはあるのですが、反対意見も多くあります。
今のところ採用には至っていませんし、その意見を覆すほどの有効性も提示されていないようです。
https://docs.microsoft.com/en-us/archive/blogs/csharpfaq/why-doesnt-c-have-vb-nets-with-operator
https://github.com/dotnet/csharplang/issues/2355

ちなみに JScript.NET には with ステートメントがあるのですが、
VB と違って「.」を使わない構文ゆえ分かりにくくなるので、私は使わないです。
https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc427941%28v=msdn.10%29


> たしか「Structure」は、自作VB6で「Type」を使ってて
VB4~VB6 のユーザー定義型(Type)に相当するのは、確かに構造体(Structure) です。

しかし、VB6 からの単純な置き換えではなく、.NET の流儀にそって再設計した場合、
Structure ではなく Class にすることが望ましいケースが往々にしてあります。
クラスと構造体のどちらで設計するべきかは、下記のガイドラインが参考になるでしょう。
https://dobon.net/vb/dotnet/beginner/whenusestruct.html


> ・悪い方では(ワタシにとって)「プロシージャ名を日本語から始めてはダメ」
> 例:Sub ■…の明示■() とか
ローマ字も日本語の一種であるという無粋なツッコミはさておき。

名前に平仮名や常用漢字を使うことは問題ありません。
しかし記号については、使える文字と使えない文字があります。
ただ、使用可能な文字種の話は結構ややこしくて…明確に説明できません。orz

'これは NG (記号の丸) 
'Public Sub ○() 
'End Sub 

'これは OK (漢数字のゼロ) 
Public Sub 〇()
End Sub

'こんなメソッド名にもできます 
Public Sub ゚あ゙か゚ːゝゞヽ⁀ヾ〱‿〲〳〴〵()
    
    '下記は、掲示板だと見た目が崩れて見えるかも知れません。 
    'この変数名は、不可視文字を含んだ 7 文字で構成されています。 
    'ae という 2 文字でも無ければ、abcde という 5 文字でもありません 
    Dim a‮bcd‭e As String = "test"
    'MsgBox(ae)   'これは NG (未定義変数) 
    'MsgBox(abcde)   'これは NG (未定義変数) 
    MsgBox(a‮bcd‭e)   'これは OK 
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  'それぞれの文字の Unicode カテゴリを調べてみる 
  Dim p As Func(Of CharString) = Function(c) $"{c}{vbTab}{Char.GetUnicodeCategory(c)}"
  Dim s As String = "■▲〇○◎…アAアAΠΨあ゙か゚あ゛か゜"
  ListBox1.DataSource = s.Select(p).ToArray()
End Sub