プログラミング: 2020年9月アーカイブ

そうか(笑)

VB.NET で DBNull を String 変数に代入するときは、ToString() でよかったのか(^^;;;
(あ、もともと DB からも文字型として読み込んだデータの話ね。もちろん数値型のデータは ToString してたよ)

例えば、dt As DataTable に DB から取得した値が入っているとして、それを a As String な変数に代入する際、例外発生を回避するために、

Dim a As String = if (IsDBNull(dt(cnt)("namae")), String.Empty, dt(cnt)("namae"))

とかやりよったわぁ。

Dim  a As String =  dt(cnt)("namae").ToString()

でよかったのね(笑)

ToString メソッドは、DBNull だったら空文字に変換してくれるのか。なぜか、Nothing を渡すものだと思ってた。

ということで、わざわざ If 文で置換してやらなくても、とりあえず(元の変数が String 型だろうが関係なく)ToString() して代入というのがコーディングも簡単でいいね。

早く教えてくれなきゃ(笑)
VisualBasic は文字列補間(変数補間、変数置換)の機能がないので、ある文字リテラルの中に別の変数の値を埋め込もうとすると、

Dim day  As String = "13"
Dim text As String = "死の数字は" & day & "です"

のように、&(+ でもいいのか)で変数を連結してやる必要があったのだが、今のバージョンだと、

Import System.Text
Dim day  As String = "13"
Dim text As String = $"死の数字は{day}です"

のように、文字列内に変数を埋め込むことができる。
文字列を囲むダブルクオーテーションの前に、$(ダラーマーク)を置くことで変数を挿入できるようになる。(System.Text のインポートを忘れずに(笑))

他の言語(C, Perl, PHP, Python...)だと文字列補間はできて当たり前なので、どうにも VisualBasic が使いづらいと考える理由のひとつだったのだが、いつの間にか解決してたのね。

ちなみに Perl なら、

my $day  = "13";
my $text = "死の数字は$dayです";

である。

VB.NET で $ をつけ忘れたら文字列補間は使えないが、これは Perl で文字列をシングルクオーテーションで囲んでしまった場合と同じだ。

[VB.NET]
a = $"これは{b}です"
[Perl]
$a = "これは$bです";

上の二つは同じ意味(文字列補間可能)だし、

[VB.NET]
a = "これは{b}です"
[Perl]
$a = 'これは$bです';

は同じ意味だ。文字列補間はできない。

下の例だと、VB.NET では「これは{b}です」とそのまま出力されるし、Perlでも「これは$bです」とそのまま出力される。

「VB.NET 使いの人」から見たら、「何をいまさら」なんだろうけど、俺のように色々な開発言語の現場を流れ歩き、ひとつの言語を突き詰めて勉強する機会がないと、例えば & で連結するなど(不格好だが)他の手段を知っていればそれを使うし、なかなか知識のアップデートができないのよね。これもそのひとつ。

コーディング基準・規約などできちんと「可読性向上のため、補間文字列を積極的に使用する」などと明記されていれば気づくけど。

このアーカイブについて

このページには、2020年9月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2020年7月です。

次のアーカイブはプログラミング: 2020年10月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら