- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-02-19 16:51
引用: |
|
R・田中一郎さんの書き込み (2006-02-18 15:12) より:
僕が VB6 の頃によく使っていた手も有効かも知れません。
(snip)
後始末が必要な場合は、大体この書き方でした。
|
ちょっと例となるコードの意味合いが判らなかったのですが、
後始末についてはこれではダメだと思います。
VB6 の場合は On Error GoTo Finally みたいにして Close を保証します。
独自のクラス モジュールであれば、デストラクタ (参照カウントのデクリメント) である、
Terminate イベントで解放するのが安全かと思います。(ローカル スコープでないと危険ですが)
この場合には、Set obj = Nothing による参照の解放は不要です。
メソッドの最後にまとめてやってあるソースを見ますが、無駄以外何者でもないです。
なぜならば、スコープを抜ければ自動で参照カウントはデクリメントされるからです。
スコープを抜ける直前にそんなことされても... (すぐ同じことをなされるというのに)
もし、Set obj = Nothing を書くのであれば、
それはメソッドの途中で「なるべく早く Terminate したい」時だけです。
引用: |
|
きくちゃんさんの書き込み (2006-02-18 15:38) より:
ドットで始まらないと、メンバなのかどうかが判別できないような気が…。
|
これは、With ブロック内は最初に指定したオブジェクトに属するメンバ以外は、
一切記述できないようにしてくれれば解決できそうですよね。
むしろ、With ステートメントの役割としてはそれが正しい気がします。
VB でも Wish したいんですが、過去の遺産との互換性で却下されるでしょうね。(;_ _)
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- R・田中一郎
- ぬし
- 会議室デビュー日: 2005/11/03
- 投稿数: 979
|
投稿日時: 2006-02-20 09:14
引用: |
|
きくちゃんさんの書き込み (2006-02-18 15:38) より:
R・田中一郎さん、こんにちは。
引用: |
|
しかし、With の何が嫌って .Width のように . から始まるところです。
なので、
|
ドットで始まらないと、メンバなのかどうかが判別できないような気が…。
#ドットを打つと同時にインテリセンスが働いてくれるので、入力が楽だったりしますね。
|
僕もそう思ったのですが、これは
コード: |
|
ParentProperty (this.TextBox1) {
Name = "名前"
Width = 256
Text = "テキスト"
Font = Me.Font
}
#むしろ、PropertySetting (this.TextBox1) の方がしっくりくるかな・・・
|
の前フリなのでOKとして下さいw。
引用: |
|
じゃんぬねっとさんの書き込み (2006-02-19 16:51) より:
引用: |
|
R・田中一郎さんの書き込み (2006-02-18 15:12) より:
僕が VB6 の頃によく使っていた手も有効かも知れません。
(snip)
後始末が必要な場合は、大体この書き方でした。
|
ちょっと例となるコードの意味合いが判らなかったのですが、
|
すみません。例として分かりにくかったです。
結局、 do〜loop while false でブロック化してたと言いたかっただけなのでしたorz
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-02-20 09:24
引用: |
|
R・田中一郎さんの書き込み (2006-02-20 09:14) より:
すみません。例として分かりにくかったです。
結局、 do〜loop while false でブロック化してたと言いたかっただけなのでしたorz
|
それだったら、With Me の方が「意味がない」ことを強調できると思いますよ。
Do 〜 Loop While False だと、先頭を見ただけでは意味があるものに見えません。
しかし、VB に空のステートメントによるブロック機構が生まれるとしたら、どういうスタイルになるんだろう...
何かにつけて、End 〜 (End Sub, End Function, End If, End While) なので、
とか? (イヤーw)
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- なちゃ
- ぬし
- 会議室デビュー日: 2003/06/11
- 投稿数: 872
|
投稿日時: 2006-02-20 09:45
引用: |
|
じゃんぬねっとさんの書き込み (2006-02-20 09:24) より:
しかし、VB に空のステートメントによるブロック機構が生まれるとしたら、どういうスタイルになるんだろう...
何かにつけて、End 〜 (End Sub, End Function, End If, End While) なので、
|
もちろん、
Begin
End Begin
でしょう…
|
- mio
- ぬし
- 会議室デビュー日: 2005/08/25
- 投稿数: 734
- お住まい・勤務地: 神奈川県
|
投稿日時: 2006-02-20 09:45
VBのWithは、けっこう使いました。
もっとも、頻繁に呼び出されるような処理でなければ、速度的なメリットはどうでもいいと思いますが。
とりあえず「楽ができるのはVBだけ」とか考えて、他では無くてもいいと思っていました。
言語が離れてしまいますが、JavaScriptのwithは、ピリオド要らないんですよね…。
with (fooObject.style) {
left = "10px";
top = "10px";
display = "block";
}
ピリオドがあるほうが、まだ分かりやすいと思うんですが…。
ついでに、JavaScriptのwithは、実行速度にさほど影響しないようで。
分かりづらさもあり、JavaScriptでは大抵一時変数です。
|
- きくちゃん
- ぬし
- 会議室デビュー日: 2003/08/01
- 投稿数: 854
- お住まい・勤務地: 都内某所
|
投稿日時: 2006-02-20 13:57
引用: |
|
じゃんぬねっとさんの書き込み (2006-02-19 16:51) より:
これは、With ブロック内は最初に指定したオブジェクトに属するメンバ以外は、
一切記述できないようにしてくれれば解決できそうですよね。
|
引用: |
|
R・田中一郎さんの書き込み (2006-02-20 09:14) より:
|
ああ、左辺限定、って事ですね?
そうすると、こういう書き方↓は使えなくなりますね。
コード: |
|
With Hoge
.Text = "hogehoge"
.ToolTip = .Text
End With
|
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-02-20 14:21
引用: |
|
なちゃさんの書き込み (2006-02-20 09:45) より:
もちろん、
Begin
End Begin
でしょう…
|
えー、旧 VB のアレに習ってですか。
コード: |
|
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 495
Left = 6240
TabIndex = 19
Top = 6240
Width = 2295
End
|
確かに「End」だと「End ステートメント」と区別が付きませんねw
でも、Begin End って...
引用: |
|
きくちゃんさんの書き込み (2006-02-20 13:57) より:
ああ、左辺限定、って事ですね?
そうすると、こういう書き方↓は使えなくなりますね。
コード: |
|
With Hoge
.Text = "hogehoge"
.ToolTip = .Text
End With
|
|
そうですね。
コード: |
|
With Hoge
.Text = "hogehoge"
.ToolTip = Hoge.Text
End With
|
コード: |
|
Dim tempText As String = "hogehoge"
With Hoge
.Text = tempText
.ToolTip = tempText
End With
|
うーん... (~_~;)
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- R・田中一郎
- ぬし
- 会議室デビュー日: 2005/11/03
- 投稿数: 979
|
投稿日時: 2006-02-20 16:46
引用: |
|
じゃんぬねっとさんの書き込み (2006-02-20 09:24) より:
それだったら、With Me の方が「意味がない」ことを強調できると思いますよ。
|
そうなんですよね。
意味がないことを強調させることが意味のあることなんですよね。
引用: |
|
じゃんぬねっとさんの書き込み (2006-02-20 09:24) より:
とか? (イヤーw)
|
仕方ないです。End ○○ とした時から運命は決まっているのです。
引用: |
|
なちゃさんの書き込み (2006-02-20 09:45) より:
もちろん、
Begin
End Begin
でしょう…
|
End Begin って表現は個人的には嫌いじゃないですw
引用: |
|
mioさんの書き込み (2006-02-20 09:45) より:
ピリオドがあるほうが、まだ分かりやすいと思うんですが…。
|
分かりやすさの点では、 .Width の方が良いことは賛成です。
でも、何か気持ち悪いです。書きかけのコードみたいな・・・
引用: |
|
きくちゃんさんの書き込み (2006-02-20 13:57) より:
ああ、左辺限定、って事ですね?
そうすると、こういう書き方↓は使えなくなりますね。
コード: |
|
With Hoge
.Text = "hogehoge"
.ToolTip = .Text
End With
|
|
それで良いと思います。
と言うか、そもそもの発端は、省略した変数がそこかしこに記述されるのは、あまり
好ましく無いんじゃないかという点でしたから。
引用: |
|
じゃんぬねっとさんの書き込み (2006-02-20 14:21) より:
コード: |
|
With Hoge
.Text = "hogehoge"
.ToolTip = Hoge.Text
End With
|
コード: |
|
Dim tempText As String = "hogehoge"
With Hoge
.Text = tempText
.ToolTip = tempText
End With
|
うーん... (~_~
|
コード: |
|
With Hoge
Text = "hogehoge"
ToolTip = Hoge.Text
End With
|
これで良い気がします。
# そもそも何故 With という言葉なんでしょう。
|