- PR -

VBでcontinueの代わりって…

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-01-24 14:06
引用:

出入口が1つ



これは、人それぞれってのがありますよね...
統一していれば見やすいけども...
逆で、ブロックしちゃうのを見難いという人もいますよね。
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
skulker
ベテラン
会議室デビュー日: 2004/06/08
投稿数: 67
投稿日時: 2005-01-24 14:34
引用:

ぼのぼのさんの書き込み (2005-01-24 13:17) より:
「関数に限らず、ブロックの入口も出口も一つの方が読みやすい。」とは、下記の@よりAの方が読み易いということでしょうか?


あなたの言うとおりの意図です。
そのくらいの大きさのサブルーチンであれば実際には問題になりませんが。

長いサブルーチンを短くする方が先か、出入り口を一つにするのが先かは場合によりけり?
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-01-24 15:38
引用:

長いサブルーチンを短くする方が先か、出入り口を一つにするのが先かは場合によりけり?


 あくまで私見ですが、ポイントは出口というより、出口直前の処理にあると思います。C言語のような、Try…Catch…Finallyの機構が無い言語でreturnいっぱいの関数を作ると、開いたファイルを閉じてない、ヒープに確保したメモリを解放してないといった、重度の高い不良の温床になりやすい。だから、出口を一つにすることの意図は、出口直前の処理を一箇所に固めることにあるのではないかと。
 一方、VB.NETのような、Try…Catch…Finallyの機構が使える言語では、Finallyブロックを使うことで、returnいっぱい使っても出口直前の処理を一箇所に固めることができます。こうなると、上記の問題が解消されて、

引用:

菊地さんの書き込み(2005-01-21 14:57)より:
 で、ガード句に話を戻しますが、ガード句は続くコードを読む(書く)ときに意識しないですむ状況の列挙になります。コードが意識する状況が減れば減るほどコードは簡単になり理解しやすくなります。
 ネストが減るという見かけでなく、状況を制約する事で本質的にコードは簡単になるのです。


 これがものすご〜く効いてくる。なので、VB.NETのようなTry…Catch…Finallyの機構が使える言語では、私はやっぱりガード句推進派です。

#余談ですが、以前Cでファイル処理のプログラム作ってた時、
#returnを検索してfclose(fp);って書き足してたのを思い出しました(^^;
#javaや.NETからプログラミング始めた人の中には、
#「ヒープ」という単語自体知らない人もいるのでしょうね…
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-01-24 18:56
unibon です。こんにちわ。

「ガード句」という言葉は知らなかったのですが、Google で検索してもあまりヒットしません(4件だった)。どういうのを指すのかがあまりピンと来ないです。また、英語だとなんと言うのでしょう("Guard Clause" ?)。
あと、こういう話題で思うのは、「昔聞いたことがある」、「以前読んだ本に書いてあった」というなんとも都市伝説みたいになりがちかなと思います。出典があいまいなのがいけない、ということは毛頭言うつもりはないです。出典が分からないというのも、それは情報だと思います。私も、こういうのは経験で覚えているだけで、なぜそうなのかはあまりはっきりと覚えていないです。
しかし、もし出典が分かるかたは書いていただけると、それは貴重な情報としてありがたいと思います。
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2005-01-24 19:19
引用:

unibonさんの書き込み (2005-01-24 18:56) より:

もし出典が分かるかたは書いていただけると、それは貴重な情報としてありがたいと思います。


リファクタリング:プログラミングの体質改善テクニック(P250)
「ガード節による入れ子条件記述の置き換え」
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-01-25 11:24
ども、ぼのぼのです。

引用:

もし出典が分かるかたは書いていただけると、
それは貴重な情報としてありがたいと思います。


 すみません、実は私も「ガード句」という単語はこのスレで初めて知りました(^^; ただ、菊池さんの説明で、自分の中であまりにもすんなり受け入れられてしまったので、けっこう一般的な単語なのかな、と思い、そのまま使ってしまいました。

引用:

リファクタリング:プログラミングの体質改善テクニック(P250)
「ガード節による入れ子条件記述の置き換え」


 この書籍、読んだことはないのですが、ループ内のcontinueも一種のガード句(節?)なのかなと勝手に解釈してしまいました。ループ内の処理って、一回しか使わない&&あまり長大でない場合はサブルーチン化しないですけど、そういう時continueは同じ役割を果たしてくれますよね。

#今のところVS2005の購入予定なし…
#当分Continueは使えなさそうです(;_;
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-01-31 22:03
unibon です。こんにちわ。

[quote]
ぽんさんの書き込み (2005-01-24 19:19) より:
引用:

リファクタリング:プログラミングの体質改善テクニック(P250)
「ガード節による入れ子条件記述の置き換え」


ありがとうございます。遅れ馳せながら、読みました(以前も読んだのですが、記憶に残っていませんでした)。
そこには、「ガード節[Beck]」とありましたので、"Kent Beck" で探すといろいろヒットしますね。
なお、当該ページの前後には、出口が複数あることについて肯定的な記述もありました。もっとも、この書籍(「リファクタリング」)は、「せいてはことを仕損ずる」と「時は金なり」の両方を併記しているので、だからどう、ということではありませんが。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-02-01 10:07
単語の ガード節なら、
GHC プログラム
の2語の検索で多数出ます。古語ですね

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