[[20110331005535]] 『構造化された・・・とは?』(ム所暮らし十年) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『構造化された・・・とは?』(ム所暮らし十年)
 エクセルについての質問ではなく、プログラミング一般の質問ですので
 場違いかもしれません、もしそうならお詫びのうえ、捨て置くか、管理人権限で
 削除していただくようお願いいたします。

 HelpでGoSubの項をよんでいましたら、終りのほうに、これを使用しないほうが
 より構造化された云々、とありましたが、構造化の意味がわかりません。
 当方、フォートランをコーディングシートに鉛筆舐め舐め書いて、次は、出始めの
 ベーシックを我流で使っていた程度のレベルです。(ロータス123は、サンプルコードを
 寄せ集めて、当座を凌いでおりました。)
 適当な参考書を教えていただくだけでもよいのですが、お願いいたします。

 >これを使用しないほうが
 >より構造化された云々、とありました
 VBAでは、Gosubステートメントはあまり使いません。
 何故なら、これより洗練されたステートメントCall があるからです。
 でも、VBAより、はるか昔のN88-Basicの時代では、
 このGosub を使わないと構造化プログラミングの体をなさなかったのです。
 Gosubは、その名残だと解釈してください。

 >構造化の意味がわかりません
 これは、構造化プログラミングという言葉があるということが前提での
 構造化された というワードだと思います。

 では、この構造化プログラミングとは・・・。

http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/Intro2Basic/Structure.html

 リンク先にあるようにダイクストラという人が40年以上前に提唱した理論です。

 構造化プログラミングの詳細は、リンク先を見ていただくとして・・・。

 この構造化プログラミングの定義の一つに

 階層構造を作る

 というのがあります。

 Sub ichinoseの認証()
    Dim a, b, c, d
    a = Application.InputBox("あんた名前は?")
    If a = "ichinose" Then
       b = Application.InputBox("としは?")
       If b = "函館で死んだ" Then
          c = Application.InputBox("昨日、何してた?")
          If c = "生きてた" Then
             Range("a1").Value = "おかえり"
          Else
             MsgBox "お前誰だ?"
          End If
       Else
          MsgBox "年齢じゃあねえ、土方のことを聞いたんだよ"
       End If
    Else
       MsgBox "おとといきやがれ"
    End If
 End Sub

 これ、If 〜 Then 〜 Else 〜 end if の階層構造になっています。

 でも、階層も三つも四つもとなると、要するに何をしたいのかがわかりませんよね?
 昔は、この要するに何をしているのかをわかりやすくするために
 Gosub ステートメントを使いました。

 Sub ichinoseの認証2()
    Dim a, b, c, d
    Dim 判定 As Boolean
    a = Application.InputBox("あんた名前は?")
    If a = "ichinose" Then
       GoSub ichinoseであるかの細かいチェック
       If 判定 = True Then Range("a1").Value = "おかえり"
    Else
       MsgBox "おとといきやがれ"
    End If
    Exit Sub
'
'
ichinoseであるかの細かいチェック:
'Out 判定  true ichinoseである false ichinoseじゃあない
    判定 = False
    b = Application.InputBox("としは?")
    If b = "函館で死んだ" Then
       c = Application.InputBox("昨日、何してた?")
       If c = "生きてた" Then
          判定 = True
       Else
          MsgBox "お前誰だ?"
       End If
    Else
        MsgBox "年齢じゃあねえ、土方のことを聞いたんだよ"
    End If
    Return
 End Sub

 プロシジャーichinoseの認証より、ichinoseの認証2の方が

 同じ事をするのにステップ数が多いですが、それでもわかりやすいプログラムを
 書きなさい ということを私は、教えられました。

 が、前述したように今では、この役をGosubより、Callで行った方がより、
 わかりやくなるので・・・、

 Helpには、

 >GoSub...Return ステートメントを使うよりも、独立した 1 つのプロシージャ (Sub プロ
 >シージャまたはFunction プロシージャ) を作成して呼び出す方が、より構造化された方
 >法といえます。

 とあるのです。
 その理由は、また他の場面で機会があったらね
 ちゃんとあるんですよ、理由は・・・!!

 人のコードが読めないと困るので Gosubの機能は確認していただいて、
 ご自分のコードには、同じ事象では、Call を使うようにしてください。

 同じように古いステートメントに

 While...Wend ステートメント というのがあります。

 今では、 Do 〜 Loopを使うのが一般的です(機能が豊富)。

 追伸
 >フォートラン
 私もプログラミング言語の最初がこれでした。
 フォートラン 77というのでした。 
 もう30も前なので印象だけですが、構造化しにくい言語だったなあ

 ichinose


 ご教示、ありがとうございます。さっそくダイクストラの本を注文しました。
 プログラミングはすべて我流で、自分が使うためだけの小さなプログラムを組むことが
 ほとんどで他人が使用するための見やすさ、使いやすさなど考えたことがありません。
 今回、会社の人間が使うためのプログラムを組むことになり、結果をだす部分より
 表示の仕方や入力ミスの対応やら、操作のわかり易さ等々、周辺部分でずいぶんと長く
 なったうえに、管理は他人がするという事態で、いまごろ「わかりやすいプログラム」
 とは、などと考えこんでしまっています。

 前回、教えていただいたコードを複数列に対応させることに成功しました。
(私にとっては画期的)
 今日は、名簿に追加をするさいに、検索用の表に直接、入力しないようにするための
 追加、訂正用のコードを組む予定です。そのほうが、安全でわかり易いという意見がで
 たからですが、どの端末でも使えるようにするのか、変更した結果の同期をど
 うするか、プログラミング以前の問題に悩んでいます。きっとプロはコード自体より
 このような問題に時間を食っているのでしょうね

 >女流小説家の作品で新撰組をネタにしたものはあったかな・・・

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.