- PR -

VBの日付型と暗黙の型変換

投稿者投稿内容
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-04-12 00:49
引用:

objectさんの書き込み (2002-04-12 00:12) より:
VB6と同じ初期化方法しかないんですか?


「しかない」とはどこでも一言も言ってませんよ。川俣さんが対比で使われていた例では、両者は同じだと言っているだけです。

引用:

それでは、次の様なコーディング

Dim d2 As Date
d2 = New DateTime(2002, 4, 1, 0, 0, 0, 0)
Trace.WriteLine(d2)
Trace.WriteLine(d2.ToString("yyyy'年'MM'月'dd'日'"))

はどうなんですか?。
私には、こちらの方がスッキリ来ます。


どうなんですかって言われても。

コード:

Dim d2 As Date
Trace.WriteLine(d2)
d2 = New DateTime(2002, 4, 1, 0, 0, 0, 0)
Trace.WriteLine(d2)


これも実行して見られることをお勧めします。

[ メッセージ編集済み 編集者: NothingBut.NETFX 編集日時 2002-04-12 01:05 ]
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-04-12 13:05
 念のために書きますが。
コード:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim d1, d2 As DateTime
        d1 = New DateTime(2001, 1, 1)
        d2 = "2001/01/01"
        Trace.WriteLine(d1 = d2)
    End Sub


 VB.NETで結果はTrueです。d1とd2への代入行の結果は等価です。前者はVB.NETに固有の記述方法ではありません。
かおく
会議室デビュー日: 2002/02/14
投稿数: 10
投稿日時: 2002-04-12 13:52
引用:

autumnさんの書き込み (2002-04-12 13:05) より:
 VB.NETで結果はTrueです。d1とd2への代入行の結果は等価です。前者はVB.NETに固有の記述方法ではありません。



わたしの環境では False です。ま、それはそれとして、Option Strict はお嫌いですか?
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-04-12 16:27
引用:

わたしの環境では False です。


 当たり前すぎると思って書いていませんでしたが、日付の書式設定によっては一致しないはずです。

引用:

ま、それはそれとして、Option Strict はお嫌いですか?


 私としては好きでも嫌いでもありません。使いたい人は使えばいいんじゃないでしょうか? ただ、すべてのVBプログラマに使用を強制するのは無理だと思います。
かおく
会議室デビュー日: 2002/02/14
投稿数: 10
投稿日時: 2002-04-12 18:08
引用:

autumnさんの書き込み (2002-04-12 16:27) より:
 当たり前すぎると思って書いていませんでしたが、日付の書式設定によっては一致しないはずです。



当たり前すぎ、ですか。文字列を日付型の変数に代入する意図もわかりませんが、暗黙
の型変換、予想外の日付変換は、結構はまりやすいポイントのひとつだったりします。

引用:

 私としては好きでも嫌いでもありません。使いたい人は使えばいいんじゃないでしょうか? ただ、すべてのVBプログラマに使用を強制するのは無理だと思います。



そうなんですか。今までの連載で紹介されていないようなので、何か使いたくない理由
があるのかと、深読みしてしまいました。確かに、デフォルトでOffになっていることも
含め、すべての人が使うようにはならないでしょうね。

とはいえ、暗黙の型変換などのあいまいさを残した部分が、今までのVBの問題点だった
とすれば、今後はしっかりと型の管理をすべきだと、わたしは思います。

[ メッセージ編集済み 編集者: かおく 編集日時 2002-04-12 18:12 ]
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-04-13 02:35
引用:

文字列を日付型の変数に代入する意図もわかりませんが、暗黙
の型変換、予想外の日付変換は、結構はまりやすいポイントのひとつだったりします。


 結果が明らかに静的に一意に決まる暗黙変換と、そうではない変換は、話が違うと思います。
 暗黙変換に曖昧さが無いように書けば、VBでも、そう簡単に訳の分からない挙動は示しません。

引用:

今までの連載で紹介されていないようなので、


 まだ数えるほどしか掲載されていないのに、それで決められては困ってしまいますよぉ。
 簡単に連載の流れを言えば、サンプルソースが読めるように先行して文法細部の相違を説明してから、継承などの大きなトピックを説明することになります。ですので、現在は文法細部の相違を説明する段階です。
 Option Strictは文法細部の相違を説明した後その知識でサンプルソースを書いて説明するトピックになると思います。
かおく
会議室デビュー日: 2002/02/14
投稿数: 10
投稿日時: 2002-04-13 12:53
引用:

 暗黙変換に曖昧さが無いように書けば、VBでも、そう簡単に訳の分からない挙動は示しません。



で、現実に日付変換で環境に依存するコードだったわけですが。わたしが言いたかった
のは、「VBの挙動がおかしい」ではなく「それはコード次第」ということです。それを
踏まえて、「VBだからといって適当なコードを書くのではなく、しっかりしたコードを
書こう」というのがあるべき姿かな、と。

#少なくとも、VBのコミュニティでもそういう流れだと感じますし、わたし自身が記事
#を書くときはそうしています。


引用:

 まだ数えるほどしか掲載されていないのに、それで決められては困ってしまいますよぉ。 (^_^;)



確かにそうですね。失礼しました。今後に期待します。
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-04-13 13:19
引用:

わたしが言いたかったのは、「VBの挙動がおかしい」ではなく「それはコード次第」ということです。


 そうです。ですから、VBコードの改善は、VB6とVB.NETの相違を解説する原稿とは別次元で語られるべきものだと思っています。
 「VB6とVB.NETの相違の解説」は、既に書かれてしまった悪いコードを理解して、それをVB6からVB.NETに移行するための情報という側面があるので、実際にVB6で通るコードなら、どんなに悪いコードも扱うつもりです。
 当然、自分でコーディングするときは書かないような危ない書き方も含みます。

スキルアップ/キャリアアップ(JOB@IT)