- PR -

shared な変数の参照

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-01-15 22:52
引用:

武史さんの書き込み (2009-01-14 13:28) より:


 最初の投稿では、前提として、次のようなものがあると認識しています。

  • VB2003 から VB2005 へのマイグレーション
  • メソッド内で、ローカル変数と共有変数を区別したい
  • "Me.共有変数" としていたが、VB2005 では警告が出る
  • クラス名が長いので、"クラス名.共有変数" では、コードが見にくくなってしまう
  • 出来れば、インテリセンスが使いたい

これを元に、少ない手間で見やすく(見分けやすく)、且つ書きやすい(インテリセンスが使える)ようにするにはどうすればいいか、を考えました。

 VB2005 ということですから、リファクタリング機能が使えます。定義を変えればリファクタリング機能で参照している全ての変数名を変えることができますから、少ない手間で見やすくできると考えました。また、接頭辞を統一すれば、接頭辞の後に [CTRL]+[J] ?で候補一覧が出ますから、Me. やクラス名. ほどの手軽さではないものの、書きやすいようにできる、と考えました。

 ただ、最近になって気づいたのですが、「Me. を消さなければならない」ということを見落としていました。「Me. を消す」という作業が必要なので、上記意見は「少ない手間で」を満たしません。1ページ目にじゃんぬさんが書かれているように、Imports を使うのが一番でしょう。


 で、私の意見としては、8ページ目 2009-01-06 22:36 にも書いていますが、当初より、Shared の使い方を間違っているのではないか?です。それだけをストレートに書くべきでした。不要な混乱を招いて申し訳ない。
 メソッド内で、「ローカル変数と共有変数を見やすいように区別したい」という状況が理解できません。7ページ目の 2009-01-03 22:40 で、じゃんぬさんが「共有メンバを理解できていない人が 'わざわざ' static | Shared というキーワードはつけると?」と書かれていますが、1ページ目の 2008-12-24 16:12 武史さんの「インスタンスメンバと、静的メンバの区別がつく代わりに、ローカル変数と、静的メンバが同じような色で表示されるより、重要でないかと思います。」より、「わざわざ付けている」と、解釈しています。
引用:
コード:
Class Foo
    Shared Private a As Integer
    Private b As Integer
    Sub Bar
        Foo.a = b
    End Sub
End Class



このようなコードを書くことが理解できません。特に、「ローカル変数との区別を付けたい」、「インテリセンスが使いたい」というところから、メソッド中に何度も、他のコードと入り交じって使用していると想像されます。これは、設計ミスだと思います。

 当初の想像は、次のようなものでした。
コード:
Class Foo
    Shared Private a As Integer
    Private b As Integer
    Sub Bar(ByVal c As Integer)
        Dim a As Integer = c + Me.b
        Dim b As Integer = Me.a * c / a
        Me.a = b + d
    End Sub
End Class


これを、次のようにすればいいのではないかと考えました。
コード:
Class Foo
    Shared Private shared_a As Integer
    Private b As Integer
    Sub Bar(ByVal c As Integer)
        Dim a As Integer = c + Me.b
        Dim b As Integer = shared_a * c / a
        shared_a = b + d
    End Sub
End Class


 これにより、意図しないタイミングで shared_a が変更されるというバグが表面化したとき、shared_a が左辺に現れるところが、探しやすくなるでしょう。


 マイグレーションということなので書くのは控えたのですが、設計(あるいはコーディング規約)の見直しが一番ではないかと思います。
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2009-01-17 19:39
静的メンバを更新している例だからよくなかったのですかね?

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