R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

if 文怖い

http://blogs.wankuma.com/yaju/archive/2008/11/05/160491.aspx
空のIF文を書きますか?(やじゅ@アプリケーション・ラボ わんくま支局)より

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47060&forum=7
空のIF文を書きますか?(@IT会議室)より

そもそも

僕は if 文が怖い

if 文が多い、あるいは複雑になるほど、バグの含有率は高くなると思っている。
だから、その if 文を上手に使って、わかりやすい表現をするという発想すらない。


if (isExist && target > 0 && isFlag) {
  // 何もしない
}
else {
  MessageBox.Show("無理!");
}


のように書くくらいなら、複雑な条件をメソッドアウトするなりして


if (is無理()) MessageBox.Show("無理");


と書いて、なるべく if 文を短く簡潔に書いている。

だから、僕のコードには if 文そのものが殆どない。
あっても else は使わない。
更に 1 行で書かれているものが殆どだ。

投稿日時 : 2008年11月5日 13:16

Feedback

# re: if 文怖い 2008/11/05 13:32 ネタ好き未記入

if文とswitch文を避ける田中さんの方針正しいと思います。
というのも、ある程度それを避けるためにオブジェクト指向機能があるのですから。
if文とswitch文を多用しすぎたら「不吉の匂い」がします。
オブジェクトの設計が間違っているかもしれません。

# re: if 文怖い 2008/11/05 13:33 ネタ好き未記入

補足
switch文については明記していませんでしたが、if文を避けるのならばこれも避けると思って書きました。

# re: if 文怖い 2008/11/05 13:38 NAL-6295

全く同じ意見です。
条件のメソッドアウトはよく使います。

# re: if 文怖い 2008/11/05 14:08 みきぬ

なんか論理のすりかえをされているような気がする。
複雑な条件をメソッドアウトするのって、本題とは関係ないですよね?

if (!isValid())
{
  MessageBox.Show("Error!");
}

と書けるところを、

if (isValid())
{
  // do nothing
}
else
{
  MessageBox.Show("Error!");
}

と書くことが許容できるかどうか、ですよね?

それと「if文を簡潔に書く」と「if文を避ける」ってだいぶ違うと思うんですが、if文を避ける話はどこにあるんですか?

# re: if 文怖い 2008/11/05 14:19 みきぬ

> if文を避ける話はどこにあるんですか?
補足すると、Rさんがその話をどこでしているのか? です。
でないと「だから、僕のコードには if 文そのものが殆どない。」へ話が繋がりません。

# re: if 文怖い 2008/11/05 14:52 NyaRuRu

>僕は if 文が怖い

やっぱ if は式であるべきですよねー
あと,パターンマッチ/パターンガード重要.

# re: if 文怖い 2008/11/05 21:10 じゃんぬねっと

以前、ガード句がらみで R さんとはスレで意見を交し合ったことがあったような気がします。
けっこう同じ方針だったような。

# re: if 文怖い 2008/11/06 0:44 やじゅ

>以前、ガード句がらみで R さんとはスレで意見
>を交し合ったことがあったような気がします。

if~elseの書き方
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=26940&forum=3&start=0

複雑な条件をメソッドアウトもするけど
まー最悪3個くらいまでの条件ならIF文のままだな。

# re: if 文怖い 2008/11/06 13:06 R・田中一郎

ネタ好き未記入 さん

>というのも、ある程度それを避けるためにオブジェクト指向機能があるのですから。

そうですね。
実際、オブジェクト指向な設計をするようになってから if 文を使う機会が大幅に減りました。

>switch文については明記していませんでしたが、if文を避けるのならばこれも避けると思って書きました。

はい。その通りです。
例えば、A の値が 1 の時に「何か」をしなさい、の「何か」を A に含めれば判定する必要がなくなりますもんね。

------------------------------
NAL-6295 さん

>条件のメソッドアウトはよく使います

変数や実数を比較演算子で結ぶだけの式って、意外に後でわかりにくくなりますよね。

------------------------------
みきぬ さん

>なんか論理のすりかえをされているような気がする。

それは気のせいです。

僕のエントリの文章は、以下の意味を含んでいます。

・if 文が多い、あるいは複雑になるほど、バグの含有率は高くなると思っている。
・だから、その if 文を上手に使って、わかりやすい表現をするという発想すらない。
・やむを得ず使う場合は、できる限り簡潔に書く。

僕の言いたいことは、それだけです。
もちろん、空のIF文は否定派です。

------------------------------
NyaRuRu さん

>やっぱ if は式であるべきですよねー

ですねー

>あと,パターンマッチ/パターンガード重要.

有用性が高いのはわかっているのですが、苦手なんですよね。これが orz

------------------------------
じゃんぬねっと さん

>以前、ガード句がらみで R さんとはスレで意見を交し合ったことがあったような気がします。

コーディングスタイルに関する考え方は、比較的似ていますね。
初めて絡んだばかりの頃も、じゃんぬねっとさんのサイトを見て「僕と同じだ」と思った記憶があります。

------------------------------
やじゅ さん

>if~elseの書き方
>http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=26940&forum=3&start=0

僕が .NET を始めたばかりの頃ですねぇ。

>複雑な条件をメソッドアウトもするけど
>まー最悪3個くらいまでの条件ならIF文のままだな。

複雑なアルゴリズムを書く時は、if がネストすることもありますかねぇ。
速度を出したい時とか。
でも、そういうものを書く機会も最近は殆どないや。

# re: if 文怖い 2008/11/06 13:26 みきぬ

・if 文が多い、あるいは複雑になるほど、バグの含有率は高くなると思っている。
・だから、僕のコードには if 文そのものが殆どない。
・やむを得ず使う場合は、できる限り簡潔に書く。
こういう流れなら理解できるんですが…。

R さんが if文を避けるというのが、例えばどんな場合を指すのかわからないので、これ以上の話はやめておきます。

# if 文怖い(その2) 2008/11/06 13:49 R.Tanaka.Ichiro's Blog

if 文怖い(その2)

# re: if 文怖い 2008/11/06 14:18 R・田中一郎

まー、文章的には、ちょっとわかりにくい表現だったかもしれませんね。
基本的には、if 文でごにょごにょすることが嫌いってことだけで、そんなに深い意味はないです。

# re: if 文怖い 2008/11/08 15:21 Gates

if文とか関係なしに、
分岐条件や構造が複雑になるほど、バグの含有率は高くなるのはあたりまえでは?
elseを使わないことによりバグがなくなるというのは、
議論のすり替えでしかない。

# re: if 文怖い 2008/11/10 13:18 R・田中一郎

>議論のすり替えでしかない。

このテーマで議論するつもりはありません。

# re: [Tips][Visual Studio]Visual Studio 2008で、ソースコードの行数をカウントする方法 2017/09/29 10:01 chenlina

http://www.polo-ralphlaurenoutlet.in.net
http://www.nfljerseysfromchina.us.com
http://www.cheapralphlaurensale.co.uk
http://www.toryburchoutletoff.us.com
http://www.uggoutletsonline.us.com
http://www.uggsoutletstore.org
http://www.poloshirt.in.net
http://www.uggsonline.in.net
http://www.truereligion-jeans.us
http://www.uggbootsclearanceoutlet.com.co
http://www.air-jordanpascher.fr
http://www.katespadehandbagsoutlet.us.org
http://www.uggbootsaustralia.us.org
http://www.jordanretro.us
http://www.blackhawksjersey.com
http://www.mlbjerseys.org
http://www.michael-kors-outlet.eu.com
http://www.timberlandoutlet.name
http://oakley.sunglassescheap.us.com
http://www.cheaplouboutinshoesuk.org.uk
http://www.north-face-outlet.in.net
http://www.cheapairjordans.us.com
http://www.cheapjerseysnflwholesale.us
http://www.adidastore.co.uk
http://www.burberry.us.org
http://www.nikeairforce1.net
http://www.ugg-bootscheap.com.co
http://www.uggbootsoutlets.org
http://www.pandora-rings.net
http://www.michaelkorsukoutlet.me.uk
http://www.uggsslippers.com.co
http://www.coach-factoryoutletusa.com
http://www.outletuggboots.com.co
http://www.adidastrainersuk.uk
http://www.raybans-sunglassesoutlet.us.com
http://www.the-northfaceoutlet.net.co
http://www.coachfactory-outletonline.org
http://www.oakleysungalsses.nom.co
http://www.cheap-ugg-boots.us.org
http://www.christianlouboutinoutletusa.us.com
http://www.christianlouboutindown.com
http://www.northfaceclearance.us.com
http://www.burberryscarfsale.in.net
http://www.nikerunningshoes.co.uk
http://www.canadagoosecanada.name
http://www.ray-banaviatorsunglasses.org.uk
http://www.katespade-outlet.in.net
http://www.nike-air-huarache.org.uk
http://www.outletlongchamp.us.org
http://www.uggoutletstore.net.co
http://www.jordanshoes.us.org
http://www.giuseppe-zanotti.us.com
http://www.uggoutlets.com.co
http://www.montblanc-pens.name
http://www.ferragamoshoesoutlet.us.com
http://www.thenorthface-outlet.in.net
http://www.longchamp-handbags.us.org
http://www.uggs-outlet-online.us
http://www.uggbootsonsale75off.in.net
http://www.replica-watches.us.com
http://www.pradaoutletonlinestore.us.com
http://www.montblanc.com.co
http://www.uggboots70off.com.co
http://www.cheapraybansunglasses.net.co
http://www.basketballshoesstore.us.com
http://www.uggbootscheaponline.in.net
http://www.saleuggboots.co.uk
http://www.adidasyeezy-boost.us.com
http://www.adidasshoesforsale.in.net
http://www.nikefootballbootsuk.org.uk
http://www.pandora-jewelry.me.uk
http://www.coachwallets.us.com
http://www.coachfactoryoutlet-onlinestore.us.com
http://www.michaelkorstotehandbags.us.com
http://www.uggbootsoutlets.in.net
http://www.thenorthfaceclearance.us.com
http://www.outletuggs.net.co
http://www.hermesbags.me.uk
http://www.michael--kors.us.org
http://www.canadagooseclearance.us.com
chenlina20170929

タイトル  
名前  
Url
コメント