fumieval fumieval 2012-08-01 20:02:53

[VBA] それ、If使う必要ないから!!! このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

result = a = bで書けます 追記: result = (a = b)のほうがいいみたいです

If a = b Then
    result = True
Else
    result = False
End If

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(29)

#1 mather314 mather314 2012-07-31 19:16:45  

他の言語やってるとresult = a = bの方が気持ち悪いのでは…?(VBA知らないけど

#2 kefir_ kefir_ 2012-07-31 21:15:03  

良いコードだと思います。

#3 tsurushuu tsurushuu 2012-07-31 21:24:10  

うーん。こうやって短くしようとしたがる人いるけど、、実際には、「条件判定と、それによる処理とは別もの」っていう意味では、気持ち悪いな。

#4 Temarin_PITA Temarin_PITA 2012-08-01 01:57:52  

根本的に if文がbool値で判定してることをわかってない人がよくやるコードです。

#5 15my 15my 2012-08-01 06:48:36  

VBの「=」が代入ではなく比較演算子になるのはIf文の中だからと思ってたので、あやうくやりかねないとこだった。

#6 mattarijinsei mattarijinsei 2012-08-01 07:55:47  

result=a=bなんてやめてくれw

#7 ishisaka ishisaka 2012-08-01 08:45:17  

result = a = bのほうが微妙な感じだなー。代入演算子と比較演算子に区別が無いので見た目わかりにくいなーと。短く書けばいいという物でも。

#8 naga3 naga3 2012-08-01 14:09:22  

これは元ソースのほうが良いと思う

#9 DrunkenDad_KOBA DrunkenDad_KOBA 2012-08-01 14:26:32  

「出来ること」と「やっていいこと」は違う。これは元ソースのままでいい

#10 DrunkenDad_KOBA DrunkenDad_KOBA 2012-08-01 14:26:43  

「出来ること」と「やっていいこと」は違う。これは元ソースのままでいい

#11 rhosoi rhosoi 2012-08-01 14:42:23  

短くすればいいというものではない。a = b のとき別の処理も入る可能性を考えると・・・

#12 NumAniCloud NumAniCloud 2012-08-01 22:09:54  

いっそのこと関数とかを使って、result = Equal( a, b )と書くのがスマートかなと思った。VBAは知らないけれど・・

#13 egtra egtra 2012-08-03 01:12:34  

Cの条件演算子?:みたいなIIF関数使ってresult = IIf(a = b, True, False)とも書けますね。これはこれでウンコードのような気がしますが。

#14 mugyu mugyu 2012-08-04 10:14:50  

このあと、result で何がしたいんだろう?

#15 ikumimashiba ikumimashiba 2012-08-14 14:26:32  

このままでよいとおもいます。 どうしても短くしたい場合


result = False
If a = b Then
    result = True
End If
#16 Fushihara Fushihara 2012-08-14 15:54:43  

result =(a=b)

#17 InternalServerE InternalServerE 2012-08-14 23:00:30  

Fushiharaさんに一票。 元ソースは冗長すぎるし、result = a = b は違和感が強い。

#18 oe_roel oe_roel 2012-08-15 00:10:55  

私もresult = (a = b) のほうがいいかな。VBAに慣れていても a = b = c は違和感感じます。 Set構文などあるので、一番左の=が特別なのは体感的にあるにはありますけどね。

#19 ayuina ayuina 2012-08-15 16:48:33  

変数名がもう少し意味のある名前なら IF 文書かなくてもでもいいんじゃないかな。 notchanged = ( old = new ) みたいな。

#20 jkr_2255 jkr_2255 2012-08-15 22:30:34  

Let result = (a = b ) とすれば読み誤りはなさそう…でもLetは見たことがなくて逆にイミフになるかも

#21 hardtimes777 hardtimes777 2012-08-21 03:52:25  

これはVBAの仕様がうんこなんじゃないの?

#22 y_a_m_a_s_a_n y_a_m_a_s_a_n 2012-08-22 22:45:34  

そもそもresult 自体が不要ではないでしょうか… 利用箇所に直接条件文を書き下せばいいような

全体が見えないので推測になってしまいますが

#23 InternalServerE InternalServerE 2012-08-22 23:09:58  

自分に限った話だけど、VBAのFunctionで値を返す際の

Function hogehoge() As Long

    If 条件 Then
        hogehoge = 何某
    Else
        hogehoge = 何某
    End If

End Function

↑みたいな記法(Function名と同名の変数に値を代入する)に妙な違和感を感じてしまうため、 resultという名称で変数を定義しといて、

Function hogehoge() As Long

    Dim result as Long

    If 条件 Then
        result = 何某
    Else
        result = 何某
    End If

    hogehoge = result

End Function

と書くようにしてる。冗長なんだけどね。。

#24 b1396819 b1396819 2013-01-16 23:47:59  

うーん。こぅするかな。

Function hogehoge() As Boolean
    Dim result As Boolean
    result = 条件
    If result Then
        ' 副作用
    End If
    hogehoge = result
End Function
#25 sharo0331pc sharo0331pc 2013-01-16 23:51:47  

やり方いろいろあるだろうけど・・・うんこではないと思う

#26 se_ino se_ino 2013-01-20 16:42:24  

比較を行った後の挙動を明示的に書いているだけでうんこじゃない。 1行に1つの意味しか持たせないことによって分かりやすさを生んでると思う。

#27 harunoshirayuki harunoshirayuki 2013-12-04 00:41:04  

冗長だとは思うけれどソースとしてはある意味美しいかと。まあ、パフォーマンスを考えるとインタープリタ型のVBAでやる事ではないけどね。

#28 inqbus9 inqbus9 2014-04-22 23:22:26  

うんこってほどじゃないなぁ

#29 miryuukotone miryuukotone 2014-08-08 13:34:56  

Boolean datatypeで結果を出力するんだからIF文でやるのは基本なんだけれどスマートじゃないかもFushiharaさんのがスマート

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[Java] 内部的にunicodeだから日本語つかえ...

このエントリーをはてなブックマークに追加

これを書いた先輩に「英語で書きましょうよ...

class 会員 {
    private int 会員番号;
    p...

鑑賞する »

[その他] HOW TO ABC..

このエントリーをはてなブックマークに追加

実際にあった某システムの超重要なマスター...

create table item_master (
 A varchar(2...

鑑賞する »

[Java] 以前のコードが残されていて、何がなんだか...

このエントリーをはてなブックマークに追加

バージョン管理しているのに、バージョン管...

/* --- 2007.06.21 故障-ST-001 start --- */...

鑑賞する »