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

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

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  982  : 記事  4  : コメント  17228  : トラックバック  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

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2018/01/04 13:00 chenlina
http://www.michaelkorsinc.us.com
http://www.adidaswings.name
http://www.outletcanadagoosesale.us.com
http://www.louboutin.uk
http://www.timberland.us.org
http://www.ferragamooutlet.us.com
http://www.nikeairmax.me.uk
http://www.swarovski-jewelry.us
http://www.ralphlaurencom.us.com
http://www.pradabags.in.net
http://www.christian--louboutin.us
http://www.cheapreplicawatches.us.com
http://www.rayban.in.net
http://www.thenorthfaceoutlet.ca
http://www.oakleysunglassescom.us.com
http://www.uggbootssaleoutlet.us.com
http://www.michaelkorsoutlet.us
http://www.pandoracharmjewelry.us.com
http://www.montblanc.com.co
http://www.thenorthfaceuk.co.uk
http://www.truereligionsale.com.co
http://www.doudounecanadagooseenfant.fr
http://www.michaelkorsoutlet70off.us.com
http://www.ugg.com.co
http://www.michaelkorsonline-outlet.us.com
http://www.raybansunglassesoutlet.net.co
http://www.timberlandoutlet.us.org
http://www.converseshoesoutlet.us.com
http://www.ralphlauren-poloshirts.co.uk
http://www.uggcanadaoutlet.ca
http://www.toryburchoutletoff.us.com
http://www.uggoutletinc.us.com
http://www.truereligionoutletjeans.us
http://www.ralphlaurenoutletofficial.us.com
http://www.truereligion-jeans.us
http://www.wholesaleoakleysunglasses.us.org
http://www.fitflops.org
http://www.soccerjersey.us.com
http://www.pandorajewelrycanada.ca
http://www.coachhandbagsfactoryoutletonline.us.com
chenlina20180104

# otKsclwRUnZTqxOA 2018/06/01 19:16 http://www.suba.me/
k7JOn7 You have a special writing talent I ave seen a few times in my life. I agree with this content and you truly know how to put your thoughts into words.

# rIgUAfLjdQfgTjw 2018/06/04 0:12 https://topbestbrand.com/&#3588;&#3619;&am
Really informative article post. Want more.

# FlssfjbMIDuFNrfLUX 2018/06/04 0:44 https://topbestbrand.com/&#3629;&#3633;&am
Spot on with this write-up, I actually feel this site needs a great deal more attention. I all probably be back again to read more, thanks for the information!

# VBdlNIhGAOjGQy 2018/06/04 2:41 http://www.seoinvancouver.com/
I really liked your article.Much thanks again. Fantastic.

# wbEHKGuNkvyz 2018/06/04 5:57 http://narcissenyc.com/
You definitely ought to look at at least two minutes when you happen to be brushing your enamel.

# RFEsJlzbkbD 2018/06/04 6:28 http://www.seoinvancouver.com/
Perfect just what I was looking for!.

# ztQUHyorumaUhABIS 2018/06/04 23:26 http://www.narcissenyc.com/
Some truly choice blog posts on this site, saved to fav.

# GQAtXNmuUTVgUxoQhFC 2018/06/05 1:21 http://www.narcissenyc.com/
You are my aspiration , I possess few blogs and occasionally run out from to brand.

# fWzhwpjIAoe 2018/06/05 14:38 http://vancouverdispensary.net/
Very good article. I certainly appreciate this website. Keep writing!

# qpFkayHZtbOAaIhTWX 2018/06/05 16:30 http://vancouverdispensary.net/
This very blog is no doubt educating additionally factual. I have discovered a lot of handy tips out of it. I ad love to come back again soon. Thanks a bunch!

# ddVtRFiwQvKGfpSAYEP 2018/06/05 22:16 http://closestdispensaries.com/
You could certainly see your expertise within the work you write. The arena hopes for more passionate writers like you who are not afraid to say how they believe. At all times go after your heart.

# boHICfrwCDiHEoBd 2018/06/08 19:27 https://altcoinbuzz.io/south-korea-recognises-cryp
Wow! This could be one particular of the most helpful blogs We ave ever arrive across on this subject. Basically Excellent. I am also an expert in this topic therefore I can understand your effort.

# VWibisapWTkQYVP 2018/06/08 20:46 https://www.youtube.com/watch?v=3PoV-kSYSrs
The Birch of the Shadow I feel there may be considered a few duplicates, but an exceedingly helpful list! I have tweeted this. Numerous thanks for sharing!

# ligKrQglsTx 2018/06/08 23:14 https://topbestbrand.com/&#3593;&#3637;&am
Well I truly enjoyed reading it. This post procured by you is very effective for correct planning.

# hbgssAQamloCj 2018/06/08 23:49 https://www.hanginwithshow.com
This blog is obviously entertaining and besides amusing. I have found many useful stuff out of this amazing blog. I ad love to visit it again and again. Thanks a lot!

# WMLhGKWgchSDO 2018/06/09 3:40 https://www.prospernoah.com/nnu-income-program-rev
make my blog jump out. Please let me know where you got your design.

# cYklQzLorang 2018/06/09 4:13 https://topbestbrand.com/&#3626;&#3636;&am
I?d need to examine with you here. Which isn at one thing I normally do! I get pleasure from studying a submit that can make folks think. Additionally, thanks for permitting me to remark!

# wkDxwoNnSBMzuCHKUZ 2018/06/09 6:33 http://www.seoinvancouver.com/
Outstanding story there. What occurred after? Thanks!

# LoWVLqzgWqfLaoOBgh 2018/06/09 10:26 http://www.seoinvancouver.com/
Pretty! This has been an extremely wonderful article. Many thanks for providing these details.

# nZJggYRNDIx 2018/06/09 12:23 https://greencounter.ca/
Pretty! This has been a really wonderful post. Many thanks for providing these details.

# ZiUnnbqMKEkHApH 2018/06/09 14:17 http://www.seoinvancouver.com/
This website has lots of really useful stuff on it. Thanks for informing me.

# xOMkltxqxUAeskcs 2018/06/09 16:10 http://www.seoinvancouver.com/
It as not that I want to copy your internet site, but I really like the layout. Could you let me know which theme are you using? Or was it custom made?

# cWDFwpDPEFKCrTVGw 2018/06/09 21:57 http://surreyseo.net
Whoa. That was a fantastic short article. Please keep writing for the reason that I like your style.

# gswskAakzYtQw 2018/06/09 23:52 http://www.seoinvancouver.com/
You are my inspiration , I possess few web logs and rarely run out from to post.

# CtSTnRZFgixyS 2018/06/10 1:46 http://iamtechsolutions.com/
I think this is a real great article. Keep writing.

# RnJNrfYeVXCyPyUJnD 2018/06/10 11:16 https://topbestbrand.com/&#3594;&#3640;&am
I value the blog post.Much thanks again. Awesome.

# szcRIPbtZTsKVe 2018/06/10 12:28 https://topbestbrand.com/&#3624;&#3641;&am
Wonderful article! We are linking to this particularly great post on our website. Keep up the good writing.

# cwCVSFBpLqnre 2018/06/10 13:03 https://topbestbrand.com/&#3610;&#3619;&am
Its hard to find good help I am forever saying that its difficult to procure good help, but here is

# rrUYUMVlVOe 2018/06/13 0:46 http://naturalattractionsalon.com/
Wonderful work! This is the type of information that should be shared around the web. Shame on Google for not positioning this post higher! Come on over and visit my website. Thanks =)

# kEQoSmTpjLxB 2018/06/13 6:41 http://www.seoinvancouver.com/
This page definitely has all the info I wanted concerning this subject and didn at know who to ask.

# IRMVAkhIKP 2018/06/13 9:25 http://www.seoinvancouver.com/
what you have beаА а?а?n dаА аБТ?аА а?а?aming of.

# DdwlALTovyqJC 2018/06/13 11:20 http://www.seoinvancouver.com/
I went over this web site and I think you have a lot of great info, saved to fav (:.

# oFpyYGyfewSSWO 2018/06/13 13:15 http://www.seoinvancouver.com/
I will immediately grasp your rss feed as I can not find your e-mail subscription link or newsletter service. Do you have any? Kindly let me recognize in order that I could subscribe. Thanks.

# edPExvLIZlj 2018/06/13 15:12 http://www.seoinvancouver.com/
I\ ave had a lot of success with HomeBudget. It\ as perfect for a family because my wife and I can each have the app on our iPhones and sync our budget between both.

# VjQQkYbZcGHmHnfCghb 2018/06/13 19:54 http://hairsalonvictoriabc.ca
If you are concerned to learn Web optimization techniques then you should read this article, I am sure you will obtain much more from this article concerning SEO.

# cKWctQdcUhYt 2018/06/14 0:30 https://topbestbrand.com/&#3605;&#3585;&am
Just Browsing While I was surfing today I noticed a excellent article concerning

# bXUEnhsdSC 2018/06/14 1:09 https://topbestbrand.com/&#3650;&#3619;&am
Well I really liked studying it. This article offered by you is very constructive for correct planning.

# xVHvIVVScBHc 2018/06/15 13:35 http://die-leichte-kocherei.de/?option=com_k2&
Latest Pre Paid Mastercard Auctions PrePaid Mastercard

# abMLdTKJRloOp 2018/06/15 20:13 https://topbestbrand.com/&#3648;&#3623;&am
Wow, awesome weblog structure! How lengthy have you been running a blog for? you make running a blog look easy. The total glance of your website is magnificent, let alone the content!

# wpfTpeUAnWZ 2018/06/16 4:52 http://signagevancouver.ca
Very good blog.Much thanks again. Great.

# AXVrXTJJvVRX 2018/06/18 15:27 https://www.techlovesstyle.com/about
This particular blog is no doubt cool additionally factual. I have picked up a bunch of helpful advices out of this amazing blog. I ad love to come back again and again. Thanks a lot!

# LAlbTaEjbMSCqIoxW 2018/06/18 17:28 https://topbestbrand.com/&#3593;&#3637;&am
out there that I am completely confused.. Any recommendations?

# KBolCKQgPcbm 2018/06/18 18:07 https://topbestbrand.com/&#3619;&#3633;&am
Look advanced to far added agreeable from

# TTWXvhlQlG 2018/06/19 1:35 https://disqus.com/by/disqus_s6i8FV8Wx7/
Major thanks for the blog post.Much thanks again. Awesome.

# IqwETnmWmGGOcVQA 2018/06/19 3:39 https://vimeo.com/wannow
It as nearly impossible to attain educated inhabitants in this exact focus, but you sound in the vein of you identify what you are talking about! Thanks

# peZYyuSVUqJCIeNMAp 2018/06/19 4:20 https://food52.com/users/1479792-peter-fleming
Regards for helping out, great information.

# TicNqjGyhuFUkyd 2018/06/19 5:01 http://tweakboxapp.bravesites.com/
I truly appreciate this blog article.Much thanks again. Awesome.

# hkTDemEYxftqp 2018/06/19 5:42 https://freesound.org/people/jimmie01/
Very good blog! Do you have any tips and hints for aspiring writers?

# jKulENgjIoUE 2018/06/19 7:04 https://www.graphicallyspeaking.ca/
You ave received representatives from everywhere in the state right here in San Antonio; so it only generated feeling to drag everybody with each other and start working, he reported.

# CCDKOBAWsWbsRTZ 2018/06/19 9:05 https://www.graphicallyspeaking.ca/
Im grateful for the article.Much thanks again. Great.

# DupboDzDhCQTPcP 2018/06/19 11:06 https://www.graphicallyspeaking.ca/
Wow! This blog looks closely in the vein of my older one! It as by a absolutely different topic but it has appealing a great deal the similar blueprint and propose. Outstanding array of colors!

# fXxoehERCzxhJ 2018/06/19 11:45 https://www.graphicallyspeaking.ca/
You can certainly see your skills within the work you write. The arena hopes for even more passionate writers like you who are not afraid to mention how they believe. At all times follow your heart.

Post Feedback

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