PCだい「ちゅき」

気がつけば庶事手伝い

目次

Blog 利用状況

ニュース

・H24/01/02
 Microsoft MVPを受賞しました
・H23/11/18
 MCTの憂鬱さんと相互リンクを張っていただきました^^
・H23/09/10
 プログラミング生放送でスピーカーさせていただきました^^ ・H22/12/18
 わんくま同盟でスピーカしました^^
さて、来年はどんな年になるかな。予想が当たるといいなぁ。
・H22/07/17
 わんくま同盟でスピーカしました^^
技術系のセッションは久しぶり。VB! VB!
・H22/03/13
 Tech FieldersでLTのスピーカしました^^
・H21/12/12
 わんくま同盟でスピーカしました^^
最近はずっとLT担当だったので、ちょっと新鮮でした^^
・H20/11/18
 Tech Fielders セミナー 大阪の
 Lightning Talkで優勝しました^^
・H20/8/23
 わんくま同盟で2回目のスピーカしちゃいました
 WCFと戯れてみました^^
・H20/5/17
 わんくま同盟でスピーカしちゃいました^^
 ちゃんとスピーカー持参しましたよんw
・H20/2/22
 なめ猫の参加証もらいました^^
・H20/1/22
 テンプレートを変えてみました^^
・H19/7/23
 ACEプログラムで、ナップサックをもらった上、工具セットももらえることになりました^^
・H19/1/11
 1が並ぶ縁起の良い日に投稿開始!。今後ともお付き合いよろしくお願いします
・H18/10/29
 参加させていただきました^^
ド・初心者ですがどうぞよろしくお願いします。

↓うーん、仕事しろ^^;
Chukiの脳内メーター

Chukiの脳内メーター

書庫

日記カテゴリ

ギャラリ

コミュニティ

相互リンク

なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw)

元ネタ:VBのブロックって何なんでしょうな^^; (自作自演じじゅう汁)

上記のネタで取り上げていた、ローカル変数が、プロシージャ内で一意の名前を持つ必要がある理由の一つと私が勝手に考えているのは、「VBにはラベルがあって好きなとこに飛ばせるんだお」ということです。

たとえば、以下のようなへチョイコードを書いたとき、元の意味が変わっていたり、値が消えていたら困るんですねw

元のネタ元で指摘を受けたので下線部を修正。ありがとうございます。】
スコープ→可視範囲なのでブロック内でしか見えない仕様は当然
記憶域期間→VBの場合、プロシージャ内


Dim i As Integer
Dim
j As Integer

i = 0
j = 0

If i = 0 Then
    Dim
k As Integer

LabelX:'ブロックの中に呼んでみます(うへ、きめぇw)

    k = 2
    Console.WriteLine(k)
End If

j = j + 1'永久ループを防ぐためだけに使用する変数w
If
j <= 1 Then
    GoTo
LabelX'ジャーーーンプw
End
If

【実行結果】
2
2

投稿日時 : 2008年8月12日 15:28

Feedback

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 15:34 Ognac

うそー!!

うそじゃなかった。実行でけた!!!

# なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 15:37 東方算程譚

なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw)

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 15:37 Ognac

GoTo LabelX
If i = 0 Then
Dim k As Integer

k = 2

LabelX: 'ブロックの中に呼んでみます(うへ、きめぇw)
Console.WriteLine(k)
End If
これでも OKやん
宣言文の解釈は領域確保のみ?
ローカル変数宣言は、実行文と同格だと思ってた

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 15:50 鶏唐揚

ブロック内からブロック外へ・ブロック外からブロック内へ
のジャンプは禁止されてるはずです。口頭で(何

できてしまうVBタンもどうかと思いますけど、
禁止と言われてることをやるプログラマが悪いと思います。

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 15:59 はつね

ラベルを言語仕様からそろそろ外してもいいころですね。
使う必要なもの。

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 16:02 ちゅき

>ローカル変数宣言は、実行文と同格だと思ってた
VBの宣言って、なんか良く分からんですよね^^;なくても良いくらいだし...orz。
実行文ほど意味があるように思えませんでした^^;

>禁止と言われてることをやるプログラマが悪いと思います。
うん、スパゲッティ製造装置なんて言われるような構造を作るのはひとえにプログラマが...。
でも、今までできたのに突然できなくなるのもチトこまるかもです。
#ある意味ざまぁみろwですが^^;

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 16:04 ちゅき

>ラベルを言語仕様からそろそろ外してもいいころですね。
そろそろ真剣に考えないといけない頃かもしれませんです。
最近スパゲッティなソース見ませんし^^
#でも、動作検証死ねそうだからOption hogehogeみたいにスイッチで変更できるようにして欲しいなぁ。

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 16:09 みきぬ

>ラベルを言語仕様からそろそろ外してもいいころですね。
VB.NETにContinueがなかった頃は便利だったけど、
VB2005(だっけ?)で導入されてからはいらない子?

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 16:19 ちゅき

>VB.NETにContinueがなかった頃は便利だったけど
このころのコードをまっぺんいじる気になれないので要る子^^;

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 16:20 Ognac

>禁止と言われてることをやるプログラマが悪いと思います。
これは、どうでしょう。
「できるけとやっちゃだめ」を求めるのは現実的でないと思います。多くの開発者を対象とするなら、コンパイラでひっかけるべきだと思うのですが。

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/12 17:17 ちゅき

>多くの開発者を対象とするなら、コンパイラでひっかけるべきだと思うのですが。
こちらも同意。ただ、今まで通ってたのでコンパイラオプションで変更できるといいなぁ、なんて思ってます。

# re: なぜ、VBのローカル変数はこんなに面妖なのか(いわゆるマッチポンプw) 2008/08/14 11:23 ちゅき

>ブロック内からブロック外へ・ブロック外からブロック内へ

ブロック内からブロック外へのジャンプは禁止してないや^^;。
Forのネストから強制脱出させるときとか、IF文の嵐などの時、ジャンプの方が見やすくなることもあるので...
#このあたりは宗教論争っぽくなってしまいますね^^;

タイトル
名前
Url
コメント