if文について

タグの編集
投稿者 (削除されました)  () 投稿日時 2009/8/18 18:56:09
(削除されました)
投稿者 るしぇ  (社会人) 投稿日時 2009/8/18 19:05:34
単一行形式ですね。ヘルプ(MSDN)に載ってます。
[If...Then...Else ステートメント (Visual Basic)]
http://msdn.microsoft.com/ja-jp/library/752y8abs(VS.80).aspx
投稿者 よねKEN  (社会人) 投稿日時 2009/8/18 19:11:42
> ある雑誌のサンプルに上記のようなソースをみつけたのですが

雑誌の場合、紙面の都合でコンパクトな記述スタイルを使用したのでしょう。
通常は可読性に配慮してIf-Else文を1行で書くことはあまりしないと思います。

※ If文単体なら1行で書く形式も使うことはあります。(ガード句としてIf文を使う場合)
※ むかーしむかしのBASICではIf-Elseを1行形式で記述することはよくありました。
投稿者 (削除されました)  () 投稿日時 2009/8/18 19:32:42
(削除されました)
投稿者 るしぇ  (社会人) 投稿日時 2009/8/18 19:41:18
>通常は可読性に配慮してIf-Else文を1行で書くことはあまりしないと思います。
ボクの場合、修正が入った時に一部だけコメントにすることができないという
理由からも本当に単純な判定文でしか使っていません。
Else が付いた時点で使わないかなぁ。。。

まぁ、雑誌なら5行→2行へ変更できる事は結構重要ですからそう書いたのかも。

>   if ○○  then ●●●
>  <ステートメントブロック>
>    else ★★★
>    end if     
細かいことを言えば<ステートメントブロック>があるのに
●●●は何?っていうか構文エラーですよね。
★★★の位置もこのままではだめですね。実際にコーディング
してみるとコロンで補完されるようですが、改行が必要です。

ボクは、こういう説明は自分で書かずにヘルプ(MSDN)を転記
しちゃいます。要らぬ間違いを起こさなくていいです。
>  If condition [ Then ]
>      [ statements ]
>  [ ElseIf elseifcondition [ Then ]
>      [ elseifstatements ] ]
>  [ Else
>      [ elsestatements ] ]
>  End If
投稿者 流れ者  (社会人) 投稿日時 2009/8/18 19:42:55
こんにちは

可読性の面から考えて、通常は複数行形式で書いた方が、適宜コメントを入れられるので良いと思います。
但し、サンプルは、呼び出す関数を変えているだけなので、コメントさえしっかり入れていれば、ありかなとは思いますが、こればかりは、コーディング規約次第ですね。
投稿者 るしぇ  (社会人) 投稿日時 2009/8/18 21:15:41
デフォルトさんの記述ミスから、どんな書き方に対応してるのか興味が沸いて書いてみた。
まぁ、実際にプログラムでは使わないであろう書き方ですが。
むしろ、コンパイラ作成とか、無茶な入力への対応といった発想です。

EE
        Dim a As Integer

        '[OK] 半角スペースを自由に入れられるなら、可読性を向上できる可能性も見えなくは無いなと。 
        If a = 0 Then : a = 1
        ElseIf a > 0 Then : a = 2
        Else : a = 3
        End If

        '[OK] 
        If a = 0 Then a = 1 Else a = 3

        '[OK] Else以降に複数のステートメントを許可してるからこうなるのか... 
        'ただ、複数コロンを入力しても自動編集されるので1つだけ残すのは謎。 
        'ひそかに半角スペースが1個追加されるのも謎。 
        If a = 0 Then a = 1 Else  : a = 3

        '[構文エラー] 
        If a = 0 Then : a = 1 Else  : a = 3
        ~~~~~~~~~~~~~         ~~~~



余談として気になるところ
> VBの文法書に掲載されていないようなので
Microsoftが出してる書籍だとヘルプ(MSDN)を使いまわしていて全部載ってることが多いと思います。
じゃあ、今対象とする文法書って何なのか?入門本レベルなら抜けてる(抜かしてある)内容は多いでしょう。
(質問文に上がっていた If の文でも、ElseIf が丸っきり抜け落ちてるようですし)文法というからには
定義されているものが全て載っているべきだと思いますが、入門本は文法書とは言えないでしょう。
文法を気にするなら定義までは最低限調べて欲しいです。

おみくじ、じゃんけん、タイピングときて次はルーレットなんでしょうか。。。
http://books.google.co.jp/books?id=TuOuXpcEG7YC&printsec=frontcover#v=onepage&q=&f=false
この本を見てるなら、3.3 分岐処理で一通り解説されてるようですね。読みましたか?
投稿者 (削除されました)  () 投稿日時 2009/8/18 22:09:49
(削除されました)
投稿者 るしぇ  (社会人) 投稿日時 2009/8/18 22:59:32
> ただ、この本はすべてオブジェクト指向で書かれているので
> 慣れていない私には、正直やっかいな面もあります。
違うと思うけどなぁ。。。

ざっと読んだ限り、VB2008 がオブジェクト指向を基本としているっていう
1.4の概要紹介だけで、2章3章は基礎文法の習得を目的としていて
オブジェクト指向は関係ありません。

4章のじゃんけんゲームで「4.6クラスをオブジェクトとして扱う」が
やっと導入部。それを考えるとオブジェクト指向の入門本にもなってます。
オブジェクト指向を言い訳においしいゲームのコードしか読んでないだけ
なのでは?

この掲示板でも何回かオブジェクト指向の話題があったけど、デザイン
画面でフォームにテキストボックスを貼り付ける。実行したらテキストの
入力に関してはフォームは何もせず、テキストボックスが処理してしまう。
まさにこれだけでオブジェクト指向ですよね。

オブジェクト指向が分からないとか言ってる人も、実は普通にオブジェクト
指向を使ってますよ。VBやってるならデザイン画面でやるのと、全てコード
からコントロールを追加するのと、どちらを選ぶか?デザイン画面からの方が
楽に感じるなら思いっきりオブジェクト指向の恩恵にあやかってます。日常生活
でも多々使っていると思います。人間が物を整理して覚える日常的な考え方を
取り入れただけなんだから。

問題はオブジェクト指向ではなくて、物事を整理する能力の不足なのでは?
論理的な考え方、同じ話題をまとめて理路整然と説明することができれば、
同じ目的をまとめてクラス化するのに苦労するはずが無いと思います。
投稿者 (削除されました)  () 投稿日時 2009/8/20 02:22:27
(削除されました)
投稿者 るきお  (社会人) 投稿日時 2009/8/21 22:08:47
VBの言語仕様上If文のThenは省略可能ということはみなさんご存知でしたか?

次のプログラムは有効にコンパイルできます。
Imports System.Windows

Public Class Test

    Public Shared Sub Main
        Dim x As Integer
        x = InputBox("数字を入力してください。", 0)

        If x Mod 2 = 0
            MsgBox ("偶数ですね")
        Else
            MsgBox ("奇数ですね")
        End If

    End Sub

End Class


このプログラムをコンパイルするには、
①このプログラムをメモ帳で書いて、C:\vb\Test.vbという名前で保存し、
②コマンドプロンプトで以下のコマンドを実行します。
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\vbc.exe C:\vb\Test.vb /TARGET:WINEXE
③C:\vb\Test.exeが作成されるので、ダブルクリック等して実行できます。

パスは環境に合わせて変えて下さい。
たとえば、C:\WINNT は C:\Windows のケースの方が多いと思います。


投稿者 るしぇ  (社会人) 投稿日時 2009/8/21 23:14:08
> VBの言語仕様上If文のThenは省略可能ということはみなさんご存知でしたか?
はい。ヘルプ(MSDN)を転記した時点で
>[ Then ]
と角括弧(大括弧)で書かれていたので気づいていました。

それもあって構文エラーを調査した書き込みの時点で、VisualBasic統合開発環境(IDE)
上では未入力でも補完されることを確認しました。
直接コンパイルの話までは必要ないかな?と思って説明も省略しました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/8/22 00:41:33
> 単一行形式
これは、マルチステートメントをサポートしていなかった時代の、旧き BASIC の名残ですね。


> VBの言語仕様上If文のThenは省略可能ということはみなさんご存知でしたか?
はい。ただしそれは、VB7.0 (VB.NET 2002)以降においてのみですよね。

6.0 以下のバージョンにおいては、Then は省略できず、
構文エラーとみなされてしまう事に注意が必要です。


一方、6.0 以下のバージョンにおいては、「End If」を「EndIf」と
続けて書いても良い事になっています。

しかし .NET バージョンになってからは、「EndIf」の構文が廃止されており、
 『'EndIf' ステートメントは現在サポートされていません。'End If' を使用してください。』
というコンパイルエラー(BC30826)となってしまいます。

とはいえ、開発環境のコードエディタを使うと、VB6 でも VB.NET でも、
「EndIf」を「End If」に自動修正してくれますので、通常は
この違いを意識する必要は無いのですけれどね。


# なお、VBScript の場合には、Then を省略することはできませんし、
# End If を EndIf と記述する事もできません。
投稿者 (削除されました)  () 投稿日時 2009/8/22 07:06:10
(削除されました)
投稿者 neptune  (社会人) 投稿日時 2009/8/22 07:07:45
>> VBの言語仕様上If文のThenは省略可能ということはみなさんご存知でしたか?
>はい。ただしそれは、VB7.0 (VB.NET 2002)以降においてのみですよね。
知らんかった。。。。まぁ省略するつもりもないですが。

一人ぐらい知らん人も現れても良いかなと思いまして。^ ^;

自分の事を言いますと、スキルの低い人間が、殊更、可読性の悪い書き方はしない方が
バグが少なくなると思ってますので、自分にとって可読性の良い書き方を心掛けてます。


>開発環境のコードエディタを使うと、VB6 でも VB.NET でも、
>「EndIf」を「End If」に自動修正してくれますので
私の手は時々勝手にendifと叩いてしまうんで、この機能はありがたいです。
投稿者 流れ者  (社会人) 投稿日時 2009/8/22 20:39:55
こんにちは。

>自分の事を言いますと、スキルの低い人間が、殊更、可読性の悪い書き方はしない方が
>バグが少なくなると思ってますので、自分にとって可読性の良い書き方を心掛けてます。
そうですね。慣れてない人は多少見栄えは悪くなっても、可読性を優先すべだと思います。

もっとも、仕事でプログラムを作成するのであれば、可読性が最優先事項になりますね。
趣味のプログラムは、「自分が作成し、自分が修正し、自分が使う」ですが、
仕事のプログラムは、「自分が作成し、他人が修正し、他人が使う」ですから。

>> VBの言語仕様上If文のThenは省略可能ということはみなさんご存知でしたか?
>はい。ただしそれは、VB7.0 (VB.NET 2002)以降においてのみですよね。
私も知りませんでした。^^;)
仲間がいて良かった。。。のか?
投稿者 デフォルト  (社会人) 投稿日時 2009/8/24 22:20:30
投稿文を自分の都合で勝手に削除したことを深くお詫びします。
お許し下さい。