じゃんぬのどっとてきすと

雑記とネタと時々プログラミング

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  982  : 記事  4  : コメント  16093  : トラックバック  277

ニュース

My Website

初心者向けのサイトです。

C# と VB.NET の入門サイト

最近のできごと

少し前に女のコが生まれました。家事と育児と仕事にと奮起しています。めちゃくちゃかわいいです。あと Blog の更新は全然してませんが、Twitter とかでアホなこと呟いています。見つけることができたら、ぜひフォローしてあげてください。けっこう喜びます。

Sponsored Link1

Sponsored Link2

Archive

書庫

さて、今回もアホくさい取り組みをしようと思います。

皆さんもご存知のように、C# では以下のように空ブロック ({ }) を定義することができます。

C# - 空ブロック使用例

private static System.Collections.ArrayList GetWankumaList() {
    System.Collections.ArrayList wankumaList = new System.Collections.ArrayList();

    {
        System.Collections.DictionaryEntry item = new WankumaItem();
        item.MemberId   = 1;
        item.MemberName = "中博俊";
        item.Competency = "C#"
        wankumaList.Add(item);
    }

    {
        System.Collections.DictionaryEntry item = new WankumaItem();
        item.MemberId   = 2;
        item.MemberName = "じゃんぬねっと";
        item.Competency = null;
        wankumaList.Add(item);
    }

    {
        System.Collections.DictionaryEntry item = new WankumaItem();
        item.MemberId   = 3;
        item.MemberName = "Jitta";
        item.Competency = "ASP.NET"
        wankumaList.Add(item);
    }

    {
        System.Collections.DictionaryEntry item = new WankumaItem();
        item.MemberId   = 4;
        item.MemberName = "やねうらお";
        item.Competency = "DirectX"
        wankumaList.Add(item);
    }

    {
        System.Collections.DictionaryEntry item = new WankumaItem();
        item.MemberId   = 5;
        item.MemberName = "επιστημη";
        item.Competency = "C++"
        wankumaList.Add(item);
    }

    return wankumaList;
}

あまり良い例ではないですが、上記は WankumaItem を複数格納した ArrayList のインスタンスを返すコードです。このように、同名の変数 'item' をブロック単位で別物にすることができます。

さて、VB.NET には、空ブロックの機構が備わっていないため、このような書き方はできません。しかし、何らかのブロックを作ってしまえば、代用することができます。(C# でも、同じことが言えますが)

極端に言えば、

VB.NET - 空ブロックを If ステートメントで代用する

Private Function GetWankumaList() As System.Collections.ArrayList
    Dim wankumaList As New System.Collections.ArrayList()

    ' 意味のない If ステートメント
    If True Then
        Dim item As New WankumaItem()
        item.MemberId   = 1
        item.MemberName = "中博俊"
        item.Competency = "C#"
        wankumaList.Add(item)
    End If

    ' 意味のない If ステートメント
    If True Then
        Dim item As New WankumaItem()
        item.MemberId   = 2
        item.MemberName = "じゃんぬねっと"
        item.Competency = Nothing
        wankumaList.Add(item)
    End If

          :
          :
          :

    Return wankumaList
End Sub

このように、If True Then ... End If といった、無意味なブロックを作ってしまえば良いわけです。

インスタンス メンバ内のプロシージャであれば、次のように With Me を使うことができます。

VB.NET - 空ブロックを With Me で代用する

Private Function GetWankumaList() As System.Collections.ArrayList
    Dim wankumaList As New System.Collections.ArrayList()

    ' 意味のない With ステートメント
    With Me
        Dim item As New WankumaItem()
        item.MemberId   = 1
        item.MemberName = "中博俊"
        item.Competency = "C#"
        wankumaList.Add(item)
    End With

    ' 意味のない With ステートメント
    With Me
        Dim item As New WankumaItem()
        item.MemberId   = 2
        item.MemberName = "じゃんぬねっと"
        item.Competency = Nothing
        wankumaList.Add(item)
    End With

          :
          :
          :

    Return wankumaList
End Sub

VB.NET になってから、使用価値がなくなった With ステートメントを利用するとはオツなものです。

しかしながら、静的なメンバ (Shared | 共有メンバ) では、Me を利用することはできません。そのような場合も考えると、以下のような実装が究極と言えそうです。

VB.NET - 空ブロックを With Block で代用する

' 意味のない定数定義 (せっかくだから、俺はそれっぽい名前を付けるぜ)
Private Const Block As Object = Nothing

Private Function GetWankumaList() As System.Collections.ArrayList
    Dim wankumaList As New WankumaItem()

    ' 意味のない With ステートメント
    With Block
        Dim item As New WankumaItem()
        item.MemberId   = 1
        item.MemberName = "中博俊"
        item.Competency = "C#"
        wankumaList.Add(item)
    End With

    ' 意味のない With ステートメント
    With Block
        Dim item As New WankumaItem()
        item.MemberId   = 2
        item.MemberName = "じゃんぬねっと"
        item.Competency = Nothing
        wankumaList.Add(item)
    End With

    ' 無論、Nothing でも同じことです (こっちの方が色がついていいかも)
    With Nothing
        Dim item As New WankumaItem()
        item.MemberId   = 3
        item.MemberName = "Jitta"
        item.Competency = "ASP.NET"
        wankumaList.Add(item)
    End With

          :
          :
          :

    Return wankumaList
End Sub

このように、'With Block' という下りで「ブロックであること」が、明示化できています。もちろん、この 'Block' は、Nothing とイコールなのですから、'With Nothing' という書き方でも構いません。


さて、今回のような実装は「ブロックを作らなくとも、別の変数名を定義すれば回避できる」でしょう。しかし、ブロック レベルの変数を使用することで得るメリットがあります。

まず、他のブロックから参照できない (安全な) のは利点のひとつでしょう。他人の改変によって、勝手に触られてイライラすることが少なくなります。他のブロックから参照できないと同時に、他のブロックから「参照されていないことが一目でわかる」ことも大きな利点です。メソッドのコード量が多くなることは普通はないわけですが、使い捨て変数 (COBOLer 的には Work 変数w) であることが一目でわかります。

個人的には、「'同名の' 安易な変数名」が、使えることが最も有効な利点だと思います。普通、変数名には厳密な名前を付けるべきです。しかしながら、あまり重要でない (広い範囲でない) 変数には、むしろ安易な名前をつけるべきだと考えています。

今回の例で考えると、'item' に対して別々の名前をつけた場合、

  • 他の変数名が際立たなくなる
  • 大した意味はないのに、意味があるかのように見えてしまう

という副作用を生みます。これは、for を使って、配列を取り出す場合の 'ループ変数' に厳密な名前を付けた時の副作用と同じですね。

そういった理由で、使い捨て変数を利用する時に「ブロック変数」を使いたくなることがあります。

それでも、アホくさいとしか思えない方は「メソッドに切り出せばいいだろう」という考えをお持ちだと考えられます。しかし、何でもかんでもメソッドに切り出すと、返って可読性が悪くなることもあります。

そういうわけで、こういうアホくさい記事をたまには書かせてください。(ムリヤリ締めくくりました)

投稿日時 : 2006年11月7日 9:53

コメント

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 10:26 R・田中一郎
With Block 、いいですねw
VB で書く時は、是非利用してみようと思いますw

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 10:49 ognac
先日のコメントでも頂きました、この「With me」 はすこぶる気にいって多用してます。局所限定(C#の無名Delegateに似た感じ)になりますね。


# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 11:18 Blue
下の2つ、End If→End Withではないでしょうか?

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 11:30 じゃんぬ
ごめんなさい、コピペミスです。
修正しました。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 11:33 NAKA Hirotoshi.
>なぜアホくさく見えるか、それはもちろん「ブロックを作らなくとも、別の変数名を定義すれば回避できる」からでしょう。

あほくさくないよぉ。
普通に使うし

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 11:40 じゃんぬ
使う場面は限られているわけで、人によってはアホくさいかと思っていたんですよね。
トリッキーといえば、トリッキーだとも思いますし。

C の typedef みたいなのが使えれば良いのですが...

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 12:16 とっちゃん
スコープによる局所化ってアホくさいですかね?

おいらは、C(もちろんC++ではないほう)のころからやってましたけどw


# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 13:14 黒龍
なるほど~With MeとWith Blockは目から鱗です。あったまいいなぁ

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 13:23 藤代千尋
ブロックスコープの無い言語をずうっと使っている身からすると、「1つの変数をブロックごとに再初期化すればいい」と思ってしまいます。(^^;
でもブロックスコープの利点はやっぱり享受すべきで、だとすると、With Block は秀逸だと思いますよ。(^^)

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 14:08 じゃんぬ
予想以上に共感者が多くてビックリしました。
"アホくさい" 云々については反論を想定して、免罪符にしようかと思っていたのでした。(ずるい)

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 14:30 trapemiya
というかC#の空ブロックを知らなかったあたしは"アホくさい"以下か・・・Orz 出直しだ!
役に立ったよ~、この記事。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 15:17 じゃんぬ
それ、アホくさいというか、ウソくさいです。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 17:13 じゃんぬ
人によっては、

  With Nothing
    Dim item As New WankumaItem()
    item.MemberName = "ぽぴ王子"
    item.Competency = "お笑い"
    wankumaList.Add(item)
  End With

の方が色がついていいかもしれませんね。
(色までは考慮していませんでした)

このあたりはお好みです。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 19:07 はつね
同じ事を考えている方がいて、ちょっとうれしい気分でございます。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 21:19 アクア
あぁ、ゴメンなさい。理解度不足ですのでチョコッと質問です。
この時のIfステートメントや、Withブロックには書かれているように、特に意味が無いで良いという認識でいいのですか?
(と言うか、一読の限りでは意味が見出せない…>_<;

中さんのコメントの
>普通に使うし

そんなものですか…orz

そんな使い方は今までしなかったもので(経験不足もありますが)目から鱗と言うより違和感の方が強かったりします。

違和感を感じるのは、私がC#とかVB以外の知識が無い事も理由としてあるのでしょう。

ご紹介頂いている事が多言語(複数の言語)を扱うプログラマの可読性を考慮してのエントリ…という理解で宜しいのですか?

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 21:28 アクア
なんか私自身System.Collections.ArrayListクラスの使い方を間違って理解しているような気がしてきました。

ちょっと勉強しなおしてきます。_| ̄|〇

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/07 22:56 ひろれい
じゃんぬさんの能力は「不定」、つまり「何でも来い!」ってことですね(違!

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 8:40 未記入
> この時のIfステートメントや、Withブロックには書かれているように、特に意味が無いで良いという認識でいいのですか?
> (と言うか、一読の限りでは意味が見出せない…>_<;

 同名の変数が使えるという事実がわからないのでしょうか?そのあたりについても、しっかり解説されているかと思うのですが・・・。利点についても書いてありますし。

 こちらの記事で反対意見がないのでは、利点をうまく説明できているからだと思います。この説明がなければ、メソッドか別名の変数でという意見が出たのではないかと思っています。というより、私がそう書いていたかもしれません。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 8:46 未記入
 ピンと来ないようであれば自分で試されると良いかと思います。上記のVBのコードを、無意味だと思われるステートメントを外して、コンパイルが通るようにしてみてください。

 そうすれば、同名の変数がなぜ使うことができるのかなどがわかると思います。その時の可読性(スコープの狭さによる)も実感できるのではないかと思います。

 それでも意味がわからなければ、大変失礼かと思いますが、VB.NETのマイグレーションが先でしょうね。ブロック範囲の変数の意味がわからないことになりますから。

 この記事の利点がわからない方は、変数宣言をプロシジャの先頭でまとめてやっているでしょうね・・・個人的には、そういう方は嫌ですね。COBOLERでVBに移行してきた時と同じような現象に見えてしまいますから。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 10:20 中博俊
先頭宣言は最悪です
言語や環境によってそうしなくちゃいけなかったりするわけですが。

ステハンのようにA->B->Cと変換するためのBのようなごみ変数は
obj c;
{
obj b = a.toB();
c = b.toC();
}

これでbの存在は隠蔽できます。
デバッグも楽だし、スタックもすぐに開放されるし。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 11:00 アクア
未記入さんありがとうございます。
アドバイス頂いたとおり、まずは試してみる事にしようと思っています。

なぜ同名の変数を使う事ができるのか?ではなく
なぜ同名の変数を使う必要があるのか?という疑問です。
いや、疑問ではなく違和感かな?←何か別の方法があるかも…みたいなそんな印象を覚えたもので…

ブロック内で宣言されたprivateな変数のスコープの適用範囲がそのブロック内だけ…というのは理解しているつもりです。
ですが、ここら辺りも検証の中で再度復習してみます。

繰り返し読み直している中で、同名の変数をここのブロックで再帰的に宣言、使用する事でどの様な処理を連続的に行っているか、その可読性を高めるTipsという事なのかな?と今は感じていますが…

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 11:48 はつね
ブロックを使わなかった場合、Private変数のスコープは最小でもSubとかFunctionとかになります。
この場合、先頭で変数宣言するのは「あり」だと思います。
問題は、では本当にそれだけの適用範囲が必要かということになります。
途中で宣言した場合、使い始めは判りますが、使い終わりが判らないですし、ブロック化する事で、その変数が使われる範囲を局所化する事は非常に重要な事ではないでしょうか。
その副産物として、ほんのちょっとだけ使う変数について、先頭で宣言して使いまわすのではなく、ブロックごとに同名だけれど別扱いで、それぞれ使うという方が、ちょこっとだけ使うという意味も含めて明示的であると思います。

# ちょこっと使う変数名を真剣に考えなくてもいいし;-p


# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 11:51 未記入
> なぜ同名の変数を使う事ができるのか?ではなく
> なぜ同名の変数を使う必要があるのか?という疑問です。

 そのメリットについては、後半に書かれているかと思いますよ。

> いや、疑問ではなく違和感かな?←何か別の方法があるかも…みたいなそんな印象を覚えたもので…

 その別の方法についても、後半に書かれているかと思いますよ。その方法を採用しない方が良い場合もあるということも書かれています。

> 繰り返し読み直している中で、同名の変数をここのブロックで再帰的に宣言、使用する事でどの様な処理を連続的に行っているか、その可読性を高めるTipsという事なのかな?

 うーん。おそらく合ってると思います。なぜ同名の捨て変数を使った方が良いのかを理解すれば、もっと核心につけるんじゃないでしょうか?

 ちなみに、私もこういう場合は厳密に名前をつけないで、itemとか使い捨てっぽい名前で実装していますよ。確かにVBには今まで存在しなかったものですから、実感できない人もいるかもしれないですね。

 あ、捨て変数をプロシジャ全体で使うのはダメです。VBやCOBOLERの人に多いのですが、workとかwkとか、意味不明な変数を使う場合はブロック変数にしてください。と声を大にして言いたいですね。その前にworkとかじゃなくて、itemとかnodeにしなさいと言いたいですけど。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 11:56 未記入
入れ違いになってしまいました。

> ブロックごとに同名だけれど別扱いで、それぞれ使うという方が、ちょこっとだけ使うという意味も含めて明示的であると思います。

 同意です。(じゃんぬさんが書かれているように)同じ名前だからこそ同じように使っていることがわかりやすいです。そして、そのブロックだけを見れば良く、他から干渉されないのは利点だと思いますね。さらに、それが明示化できることで可読性が良くなります。

> # ちょこっと使う変数名を真剣に考えなくてもいいし;-p

 そうですね。それだけでなく、名前を真剣に考えてつけちゃうと、結局他の意味のある変数がみえにくくなることが多いです。今回のような使い捨て変数は、目立たないようにしておくのが吉でしょうね。

 なんだか、じゃんぬさんが書かれていることを繰り返しているだけのような気がしてきました。というか、こういうことまで考えてプログラミングしている人が意外と多いことにビックリしました。そういう方と一緒に働きたいなぁ・・・(泣

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 15:04 アクア
はつねさん、未記入さん、アドバイスありがとうございます。

ご丁寧に解説を頂いたおかげで、おおよその事については納得できました。
しかしながら、まだ検証が完了しているわけでも無いので、じゃんぬさんのサンプルで示されているメリット、或いはそれに関わる事象について、私の検証をいずれどこかに晒しておきたいと思います。
もしも、目に留まることがあれば、色々とご指導ください。


>なんだか、じゃんぬさんが書かれていることを繰り返しているだけのような気がしてきました。
たしかにしっかり書かれているようですね(汗

# 私自身、プログラムコードの読解力よりも日本語の読解力の方が怪しいようです。
# へこむなぁ…(^_^;

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 15:33 じゃんぬ
>ひろれい さん
> じゃんぬさんの能力は「不定」、つまり「何でも来い!」ってことですね(違!

いえ、何も能力がないという意味で Nothing と書いています。(;^-^)

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 15:36 じゃんぬ
>アクアさん
> なんか私自身System.Collections.ArrayListクラスの
> 使い方を間違って理解しているような気がしてきました。

ArrayList の使い方については、普通の使い方をしていると思いますよ。
というより、ArrayList は、本題じゃなかったりしますし。
たまたま、今回のサンプルで格納するのに使っているだけです。

> 私自身、プログラムコードの読解力よりも日本語の読解力の方が怪しいようです。

多分、私の記事の書き方がまずいのだと思います。
文章を書く能力に長けてないんですよね > 私

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 16:09 eternia
>なんか私自身System.Collections.ArrayListクラスの使方?>を間違って理解しているような気がしてきました。

なんのことだろうと思ってよく見てみたら。。。
Dim wankumaItem As New System.Collections.ArrayList()

実は宣言間違ってたりします?
(多分wankumaItem ではなくwankumaList?)

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 16:12 じゃんぬ
うわーそういうことですか... orz

その前もいろいろと間違っていて、直したのですが、
まだコピペ修正漏れがあったとは...

アクアさん、ごめんなさい。

というか、記事を書く前にコンパイルくらいチェックすべきですね。
フリーハンドでコードを組む時は、気をつけます。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/08 17:59 倉田 有(UNYORA)
うわー
今回すごい勉強になるな~

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/09 5:38 BLUEPIXY
Do

Loop While false
でもいいような気がします。
あと、無名ブロックが作られても、
ブロックの外側で既に使われている名前を使うとエラーになります。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/09 8:39 もげ
>Do
>…
>Loop While false

最初に空ブロックかどうかがわかりづらいので、あんまりイケてないね。とりあえず、With Nothingや、With Blockの方が絶対いいね。Do~Loopより可読性がいいし、劣る点は何も見つからない。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/09 11:50 じゃんぬ
Do ... Loop While False を見て、R・田中一郎さんの投稿を思い出しました。
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28521&forum=7&start=16

なつかしいスレッドですね。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/10 22:13 BLUEPIXY
>あんまりイケてないね…劣る点は何も見つからない。
Do ... Loop While を使うというのは、もちろん優れているとかいう主張ではないです。
(Cのマクロでブロックを作るのにこういうのがあったなぁなんてちょっと思いました)
あと、For Next もブロックとして使用可能ですが、さすがにこれはイケてないと思って書きませんでした。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/12 22:41 じゃんぬ
これまでの流れからして、要望は多いみたいですね。
VB9.0 に向けて、これも Wish してみようかな。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/13 19:49 とりこびと
コメントいただきましてありがとうございます。
遅ればせながら御礼に参りました。

>これまでの流れからして、要望は多いみたいですね。
>VB9.0 に向けて、これも Wish してみようかな。

どういったWishになるんでしょう♪ひそかに楽しみにしております。
新しいブロック構文ということなら C#の{}空ブロックのように、直感的な感じがいいですね。


# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2006/11/13 19:53 じゃんぬ
やはり、VB 的には、

  Block

  End Block

あたりになるのではないでしょうか?

# re: なぜ for 文に使うループ変数は i なのか? 2007/01/25 8:48 何となく Blog by Jitta
re: なぜ for 文に使うループ変数は i なのか?

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2007/02/17 2:56 とおりすがり
CatchなしのTryはいかがでしょう?

Try
 ∫
Finally
End Try


# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2007/02/17 12:01 じゃんぬ
別に何を使ってもできますよ、という意味で記事の最初に If True Then の例を出しています。

しかし、Try ~ End Try はやめておくべきでしょう。
ブロックを作るにあたり 1 行ムダになっています。
何より、例外機構は非常に重要なもので、こういう使い方が混在していると非常に可読性を損ないます。
ということで、最も良くない選択だと思います。

この記事の趣旨は、

 何を使ってもブロックは表現できますが、
 本来使われないものでかつ、
 "意味がないことを明示化できる" ものを選択すべき

です。

With に至る結論はここにあります。
そして、最初に If True Then の例を出した理由もここにあります。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2007/07/16 11:38 けん
何でもない事なのにすごく深い記事だなぁと感動しました!

ただ With Nothing だと次の例みたいにコンパイルエラーを
すり抜けて実行時エラーが出る可能性があるちゃぁあります!

With Nothing
Debug.Print(.ToString)
End With

そこでUsingを使うってのはどうでしょう?

Using Nothing
  :
End Using

より安全確実で「意味がないことを明示化できる」にピッタリきてませんか?



# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2007/07/16 22:23 じゃんぬねっと
> Debug.Print(.ToString)

こういうコーディングをすること自体が想定外なので考えておりませんでした。Using は私にとっては (皆さんにとっても?) 非常に重要な意味を持ちますので、これまた私にとって無意味である With で代用すべきだと思って記事を書きました。

# re: VBのスコープわがんね 2008/08/12 15:14 東方算程譚
re: VBのスコープわがんね

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2009/09/14 10:22 通りすがり
この例ぐらいの処理なら別にブロックでもいいと思うんですが、基本的にはブロック分けするくらいなら別関数にすべきかとw

実際の業務でこんなことやったらかなりの痛い子扱いですね。
つい最近ですが大手の社内システムでこちらのサイトのサンプルコードのコピペそのものを発見して驚愕しました。
システム担当の方に聞いて見たら「よくわからんけど動いてるからいいんじゃない?」とのこと・・・
恐ろしいです。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2014/12/21 20:54 Yossy
With Nothingは素晴らしい!
VB6からアップグレードされた何百行もあるメソッドをリファクタリングして切り出すときには使えます。
と言うか、変数が使い回しされているメソッドを分割するのにはありがたいテクニックと思います。
目からうろこ、なるほどでした。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2015/06/09 4:58 一過性
VBでブロック分け探しててたどり着きました。
可読性重視という視点は共感します。
関数分けすりゃ良いんじゃね?という意見もありましたが、1箇所からしか呼ばれない小さな関数を作るのは、関数名考えて(それだけじゃ足りなくて)コメント付けて視線移動(とスクロール)させて…とコストが上がる割にメリット無しなので私は好みません。
どれか選ぶとすればWith Nothingですかね。Do...Until True はExitでGotoするためのブロックだし、他の意味ありげで意味の無いコードは読み手が少々混乱するし。
LabViewのスパゲティコード(見た目もスパゲティw)を整理する際に無効化ストラクチャで囲って色分けしたことを思い出しました。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2015/12/02 16:14 yyyyy
fxgfchgchg

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2015/12/02 16:53 yyyyy
http://www.canada-goose.co.nl/
http://www.barbour.us.org/
http://www.ugg-australia.in.net/
http://www.michael-kors-outlet.us.org/
http://www.michaelkorsoutletonline-sale.us.com/gfxg

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2016/10/21 11:59 ぽっぽ
>ただ With Nothing だと次の例みたいにコンパイルエラーを
>すり抜けて実行時エラーが出る可能性があるちゃぁあります!
>With Nothing
> Debug.Print(.ToString)
>End With

これは確かに問題ですね。
想定外のコードだからこそコンパイルが通ってしまうのは絶対にNGですよね。
同じ理由でWith BlockもNGです。

そのリスクを考えたらIf True やUsing Nothingの方が余程まし。

この記事はコンセプトは良いですが、結論が良くないですね。

# re: 無意味なコメント(前回ソースゴミのエントリーの延長線) 2017/07/24 11:44 zzzzz
http://www.nbajerseys.us.org/
http://www.pandorajewelryoutlets.in.net/
http://www.uggboots-forwomen.in.net/
http://www.nikeshoes2017.us.com/
http://www.michaelkors-handbags.org.uk/
http://www.nikeshoesoutlet.us.org/
http://indianapoliscolts.jerseyscheap.us.com/
http://www.louisvuitton-sacpascher.fr/
http://www.dolceandgabbana.in.net/
http://www.cheapray-banssunglasses.us.com/
http://chicagobears.jerseyscheap.us.com/
http://www.coachoutlet-storeonline.com.co/
http://www.fitflopssale-clearances.us.com/
http://www.uggsforwomen.eu.com/
http://www.kate-spadehandbags.us.com/
http://www.true-religionoutlets.us.com/
http://www.eccoshoesoutlet.us/
http://www.nikehuarache2017.in.net/
http://www.montblancpensoutlet.com.co/
http://www.nikestores.org.uk/
http://www.chaussurelouboutinpas-cher.fr/
http://atlantafalcons.jerseyscheap.us.com/
http://www.christianlouboutinoutlets.us/
http://www.nhljerseyswholesaler.us.com/
http://www.fitflopsclearancesale.us.com/
http://www.polo-outlets.us.com/
http://newenglandpatriots.jerseyscheap.us.com/
http://www.nikeoutlet-stores.us.com/
http://www.nikeblazerlow.fr/
http://www.nikefactorystore.us.com/
http://www.prada-shoes.us.com/
http://www.replicawatchesforsale.us.com/
http://www.redvalentino.in.net/
http://www.ugg-slippers.de.com/
http://www.uggs-forwomen.de.com/
http://www.conversetrainer.org.uk/
http://www.uggs-onsale.eu.com/
http://sanfrancisco49ers.jerseyscheap.us.com/
http://www.cheapjordanshoes.in.net/
http://neworleanssaints.jerseyscheap.us.com/
http://www.truereligionjeansoutletonline.us.com/
http://www.ugg-slippers.eu.com/
http://www.michaelkors-handbagswholesale.in.net/
http://www.new-balanceshoes.in.net/
http://www.michaelkorshandbagswholesale.in.net/
http://www.ralph-laurenoutlets.us.com/
http://miamidolphins.jerseyscheap.us.com/
http://www.coachoutletstore-online.eu.com/
http://www.raybanssunglasses.net.co/
http://www.oakleysunglassesoutlete.us.com/


# yezi20160620@163.com 2017/09/27 18:39 wwwww
http://www.nhljerseys.us.org
http://www.nikepolo.us
http://www.cheap-airjordans.us.com
http://www.curry4shoes.us.com
http://www.kobeshoes.uk
http://www.outletlongchamp.us.com
http://www.yeezy-shoes.us
http://www.adidasultra.us.com
http://www.hermes-belt.co.uk
http://www.michaelkors-outletstore.us.com
http://www.boostyeezy.us.com
http://www.pandorabracelet.in.net
http://www.nikerosheone.co.uk
http://www.michaelkors-outletsonline.us.com
http://www.kyrie4shoes.us.com
http://www.michaelkors-outletfactory.us.org
http://www.jordan-retro.us.com
http://www.air-max.us.com
http://www.vans-outlet.us.com
http://www.louboutinshoes.uk
http://www.outletlacoste.us.com
http://www.michael-kors-handbags.com.co
http://www.cheapretro-jordans.com
http://www.jordan12.us.com
http://www.yeezyboost.in.net
WWW

# re: [Tips][Visual Studio]Visual Studio 2008で、ソースコードの行数をカウントする方法 2017/09/29 9:52 chenlina
http://www.oakleysunglassessport.us.com
http://www.longchampoutlet-online.com
http://www.uggbootsclearances.com.co
http://www.truereligionjeans-outlet.us.com
http://www.truereligionsale.com.co
http://www.ray-bansunglassesoutlets.us.com
http://www.ugg.com.co
http://www.louisvuitonnoutlet.com
http://www.hollisterclothing.us.org
http://www.northfaceoutletstore.us.org
http://www.hermesoutlets.us.com
http://www.outletugg.com.co
http://www.canadagoosesale.com.co
http://www.cheap-jordan-shoes.us.com
http://www.newbalance-shoes.us.com
http://www.pololaurenshirts.com
http://www.michaelkorsoutletsonlinesale.us.com
http://www.wwwuggaustralia.co.uk
http://www.pandora-charms-canada.ca
http://www.swarovski-jewelry.name
http://www.ugg-outlets.com.co
http://www.coachoutlet70off.us.com
http://www.truereligion-jeans.com.co
http://www.michaelkorsoutletoff.us.com
http://www.fitflops.org
http://www.coachoutletonlineshopping.us.org
http://www.baseballjerseys.us.com
http://www.toryburchoutletsonline.us.com
http://www.northfacejacket.us.com
http://www.ugg.me.uk
http://www.ray-bansunglassesoutlet.com.co
http://www.ray-bansunglasses2017.us.com
http://www.ralphlaurenoutlet-poloshirts.us.com
http://www.oakleysunglassesofficialsite.us.com
http://www.ralphlauren.eu.com
http://www.poloralphlaurenoutletoff.us.com
http://www.uggboots-onsale.us
http://www.oakleysunglasses2017.us.com
http://www.nikeblazers.us
http://www.pandorajewelryoutlet.us.org
http://www.cheapjordansshoes.us.com
http://www.nikeairjordans.co.uk
http://www.uggbootsaustralia.in.net
http://www.salomon-shoes.in.net
http://www.uggsaustraliaboots.us.com
http://www.uggsclassicboots.us.com
http://www.ugg-italia.it
http://www.hermesbirkinhandbags.us.com
http://www.christianlouboutin.name
http://www.tommy-hilfiger-canada.ca
http://www.uggsadd.com
http://www.mlbjerseyswholesale.us.com
http://www.nikerosherunsale.co.uk
http://www.officialcoachfactoryoutletonline.us.com
http://www.canadagoose.com.co
http://www.michaelkorsuk.me.uk
http://www.raybanpascher.fr
http://www.nikeoff.com
http://www.ferragamooutlet.us.com
http://versace.sunglassescheap.us.com
http://www.ray-ban-sunglasses.com.au
http://www.jordans-fusion.com
http://www.coach-outlet.nom.co
http://www.adidasoutletstore.net
http://www.wholesale-nfl-jerseys.us
http://www.adidasstansmith.co.uk
http://www.oakley-sunglassesonsale.us.com
http://www.michaelkors--outlet.us.org
http://www.ukuggboots.co.uk
http://www.outletthenorthface.us.com
http://www.pandoracharmjewelry.us.com
http://www.coachoutletstoreonlineofficial.us.com
http://www.burberryoutlet-canada.ca
http://www.uggsaustralia.it
http://www.northface-clearance.us
http://www.fitflopssaleclearance.us.org
http://www.uggfactoryoutlet.com.co
http://www.redbottoms.org.uk
http://www.michaelkorshandbags.nom.co
http://www.burberryusa.us.com
chenlin20170929

Post Feedback

タイトル
名前
Url:
コメント: