HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

■14286 / ResNo.20)  Re[11]: 加工開始日を求めたい
  
□投稿者/ ONnoji -(2024/04/12(Fri) 12:40:45)
    2024/04/12(Fri) 14:05:39 編集(投稿者)
    2024/04/12(Fri) 13:10:32 編集(投稿者)

    >>つまり、&i &j &k ですが、これはプログラミングに慣れている人には違和感がありません。
    > これば疑問に思っていました。
    > ネットでプログラムの事を見ている時に i って頻繁に目にしました。
    > これも過去からの流れなんですね!
    > 但し、 j と k は初めて知りました。

    歴史的にそうなんですよ。アルゴリズムの書籍などを読むと必ず出てきますよ。

    > &count でも良い けど 3文字のレガシーで &cnt
    > なんでもない事かもしれないですが、変数名は自由にしていいのに
    > 何故英語? 何故3文字? (?_?)
    > 過去からの流れで 英語 を使用した方がトラブル回避になる、項目に代入する時は 見た目に分かりやすい方が良い。
    > (結果 漢字を使用する or 一般的に理解出来れば 3文字英語 そうでなければ 素直に英単語 にした方が分かりりやすい)

    &count ⇒ &cnt は、いわゆる母音抜きなんですよ。だいたい通じますね。AKIBA ⇒ AKB とかね (*^^)ok

    ところが、既出の &dom1 &dom2 では、「なんじゃコレ〜」になるわけですよ。アハハha

    >  &msg =      "Start"
    >  &msg = &msg + "\n\nこれはテスト用のメッセージボックスです"
    >  &msg = &msg + "\n\n不要になったらコメントアウトしてください"
    >  メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
    >
    > &msg = &msg + "\n\n文字列"
    > の意味が非常に良く分かりましたm(__)m

    ご明察です。

    &msg = "Start\n\nこれはテスト用のメッセージボックスです\n\n不要になったらコメントアウトしてください"

    でもいいのですが、実際にメッセージボックスに表示されるイメージで代入しているわけです。

    視覚的にも良好だし、書き直す際に便利なんですよ。

    > 自分で完璧に作れるかは怪しいですが、
    > 私の理解が正しければ・・・
    >
    >  ジャンプ 行番号 = 先頭 ←最初は先頭行にジャンプする
    >  繰り返し ( .not #eof ) ←このプログラム以下から 最終行 になるまで繰り返す
    >    :
    >    :
    >   やりたい事の命令
    >    :
    >    :
    >   ジャンプ 行番号 = 次行 ←これは ジャンプ 行番号 = 先頭 に対して 次行なので 2行目 最終行になるまで加算させる。
    >
    > だから注釈の様に ジャンプ 行番号 = 次行 を忘れると 永遠に 先頭行 を繰り返す事になる
    > という事だと認識していますm(__)m

    桐では基本が日本語なので[終端行]と呼んでいますが、一般的には eof( end of file )いうものがファイルにはあります。

    桐の表(.tbx)の場合には、最終行レコード(行)の次の行です。もしも、レコードがひとつも無ければ、最終行とeof( 終端 )は同じです。

    桐では特に明記していないと思いますが、桐のようなデータベースの場合には、レコードポインタというものがあります。

    表ウィンドウの行セレクタにある右向き黒▲がレコードポインタです。

    [ジャンプ]コマンドは、レコードポインタを移動させるものです。

    だから、

     ジャンプ 行番号 = 先頭
     繰り返し ( .not #eof )

      ジャンプ 行番号 = 次行
     繰り返し終了

    という恰好が頻繁に表れるんですよ。

    #終端行が関数の本名ですが、私の場合には(さすがにダサく見えるので)別名の #eof を使用しています。

    #eof は0ゼロ(偽)または1イチ(真)のどちらかの値(論理値)を返す関数です。

    なので、繰り返し ( .not #eof ) を

    繰り返し ( .not #eof = 1 ) や 繰り返し ( #eof <> 1 ) や 繰り返し ( #eof ≠ 1 ) や 繰り返し ( #eof = 0 ) とは書きません。

      30.3 条件式の書き方|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
      http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section30-3

    > 昨日プログラムを見ていて気付いた事があります。
    >  多重化
    >  &multiTblNum = #is表  /* 多重化した表の表番号を取得 */
    >   :
    >   :
    >  行訂正 [加工日1] = &加工日1, [加工日2] = &加工日2
    >   :
    >   :
    >  終了 表 &multiTblNum  /* 多重化した表を閉じる */
    >  編集表 &hwindow
    >
    > これを見ると、 多重化 した表に 求めたいデータを最終行まで代入していると理解しています。
    > 最終行までいって繰り返しが終了しらたら 多重化 した表を閉じて、編集対象表に戻る。
    > これ自体は理解の通りであれば、納得出来るのですが
    > 代入している表が 多重化 した表です。
    > それが何故編集対象表に求めた結果があるのか??
    > これは、 多重化した表 と 編集対象表は リンクしていると言う事なのでしょうか??

    多重化がどんなものか見た事がないのでリンクかな?と思われたのでしょう。

    リンクではありません、そのまま多重化です。つまり、多重人格と同じです。(@ @)

    具体的には、表ウィンドウで[メニューバー]→[ウィンドウ]→[新しいウィンドウを開く]を実行してみてください。

    その後、同じく[メニューバー]→[ウィンドウ]→[重ねて表示]などを実行してみてください。

    ほらね。見た通りですから。アハハha。

    この時に、[メニューバー]→[表示]→[ファイルパレット]を実行してみてください。

    そして、[ファイルパレット]の大きめのアイコンの一番右の[編集表]を実行してください。

    すると同じファイル名の表が2つ開いていることが分かるでしょう。

    ちなみに、私は普段から[ファイルパレット]は一切使いませんが、多重化の時だけは確認のために使いますよ。

    これは手続きで多重化した表を、うっかりで閉じ忘れる事があるからですよ。アハハha

    多重化に関してはヘルプも読んでみてください。

    > このツリーは本当に私の財産です。
    > 初級者に対しての講義と言っても過言じゃないと思っています。

    成り行きで公開講義みたいになってしまいましたね。アハハha。

    実は、執筆中の「(仮題)目からウロコのデータベース桐プログラミング」のよい取材源にもなっているんですよ。

    なので、お気楽にどうぞ。v(^^)v

    p.s.

    他にも気が付いたことがありますので、当方は追加投稿すると思います。

    しばらくはこの掲示板を見に来てください。(@^^)/~~~



引用返信 [メール受信/OFF] 削除キー/
■14288 / ResNo.21)  Re[12]: 加工開始日を求めたい
□投稿者/ ジェタイの桐 -(2024/04/12(Fri) 19:07:22)
    ONnojiさん


    > 多重化がどんなものか見た事がないのでリンクかな?と思われたのでしょう。
    >
    > リンクではありません、そのまま多重化です。つまり、多重人格と同じです。(@ @)
    >
    > 具体的には、表ウィンドウで[メニューバー]→[ウィンドウ]→[新しいウィンドウを開く]を実行してみてください。
    >
    > その後、同じく[メニューバー]→[ウィンドウ]→[重ねて表示]などを実行してみてください。
    >
    > ほらね。見た通りですから。アハハha。
    >
    > この時に、[メニューバー]→[表示]→[ファイルパレット]を実行してみてください。
    >
    > そして、[ファイルパレット]の大きめのアイコンの一番右の[編集表]を実行してください。
    >
    > すると同じファイル名の表が2つ開いていることが分かるでしょう。


    びっくり仰天でした(@_@)
    解説だけでも、何となくは理解出来たのですが、実際に 新しいウインドウ で開き 重ねて表示 させました。
    そして、文字を入力したり消してみたら、どちらの表も同じ結果になっていました。

    驚き以外の何ものでもありません…
    実際に試す事は重要ですね^_^


    > 多重化に関してはヘルプも読んでみてください。


    こちらに関してはまだ読めてないので、月曜日に確認します!


    > p.s.
    >
    > 他にも気が付いたことがありますので、当方は追加投稿すると思います。
    >
    > しばらくはこの掲示板を見に来てください。(@^^)/~~~


    はい!
    勿論チェックします!


    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇


    昔は要領の関係で、文字数制限があったと言われていました。
    プログラムを考える上で縛りがある分良く考えなければいけなかったじゃないでしょうか?

    と言う事は、文字数縛りのない現在と違い、発想力が凄く質の高いプログラマーが
    生まれやすい環境だったのかな??

    キャメルケースも知恵の1つですよね^_^


    等と勝手に推測してみましたm(_ _)m
引用返信 [メール受信/OFF] 削除キー/
■14293 / ResNo.22)  Re[13]: 加工開始日を求めたい
□投稿者/ ONnoji -(2024/04/15(Mon) 16:55:49)
    2024/04/15(Mon) 18:46:45 編集(投稿者)

    ジェタイの桐さん

    自然人間知能の ChatONnoji の生成結果だよ。幻覚(=ハルシネーション)じゃないからご安心ください。(^^ゞ

    >>多重化がどんなものか見た事がないのでリンクかな?と思われたのでしょう。
    > びっくり仰天でした(@_@)
    > 驚き以外の何ものでもありません…
    > 実際に試す事は重要ですね^_^

    その通りです。頭で考えるのではなく Use the Table. Feel it. です。

    時々、何の確認も取らずに仮説を立てて、思い込みだけで、独り相撲を取る人がいますが、それを避けられます。

    プログラムの制御構造というのが普通に当たり前に常識としてありますので・・・簡単に。

    それは次の3つです。 ※構造化プログラミング フリー百科事典『ウィキペディア(Wikipedia)』より

     1.順次(sequence)  部分プログラムを順々に実行する。
     2.選択(selection)  条件式が導出した状態に従い、次に実行する部分プログラムを選択して分岐する。
     3.反復(repetition) 条件式が導出した特定の状態の間、部分プログラムを繰り返し実行する。

    たぶん↑これで意味内容を理解できる初級者はまず居ないですよね。

    ということで、意味を噛み砕いて説明しますね。

    1.順次(sequence)

    順次(sequence)とは、プログラムは先頭の行から順番に実行されるように記述することです。
                       ・・・・・・・・・・・・・・・・・・・
    部分プログラムとは桐の場合では、[名札 メイン]・[一般手続き]・[イベントハンドラ]です。

    「先頭の行から順番に実行するって当たり前じゃん」と思う人が多いと思いますが、これにも歴史的な経緯があるんですよ。

    実は、初期のプログラミング言語では、プログラムの途中から実行したり、上から下へ順番に実行しないで、途中まで行って上に戻ったり、途中を飛ばして下へ進んだり、

    ありとあらゆる勝手気まま(恣意的)にプログラムの流れを作っていたんですよ。

    これはカオス(混沌)状態と同じで、いわゆるスパゲッティなプログラムなわけです。

    だから、「どげんかせんといかん」と考えた人達が現れたんですね。

    そうして、「プログラムは上から下へ流れるように書きましょう」という共通認識が培われたというわけです。

    2.選択(selection)

    選択(selection)とは、ある条件を満たしている時に実行する範囲と、条件を満たしていない時に実行する範囲を分けて作りましょうということです。

    これはWin桐ではお馴染みの if ( 条件 ) ... else ... end です。※実はDOS桐には if else end がありませんでした。これホント

    似た物としては、ケース開始 ケース( 条件 ) ... ケース その他 ... ケース終了 があります。※これはDOS桐にもありました。

    ということで、DOS桐時代の一括処理を見ると、[ケース開始 ... ケース終了]がたくさん書いてありますよ。

    ところが、DOS桐には[分岐]と[名札]コマンドがあるので、[ケース開始 ... ケース終了]を使うべきところで、

    [条件 分岐]と[名札]コマンドでプログラムの流れを選択していた初級者も居たと思います。

    さらに、DOS桐では初級者によって[条件 分岐]と[名札]コマンドを使いスパゲッティなプログラムが大量生産されていたと思います。

    DOS桐の時代は、MS-DOSのバッチファイルや、NEC 9801のBASIC言語の全盛期でしたが、

    どちらもスパゲティなプログラムが自由自在に作れるので、DOS桐の利用者も全然気にしていなかったと思いますね。

    しかし、当時すでにスパゲッティなプログラムが作れない、または原則禁止のプログラミング言語もありまして、※dBASE言語には分岐命令がありません

    そういうプログラミング言語を使っている人たちからみると、DOS桐は恐ろしく見えたかもしれませんね。

    かくゆう私( ONnoji )が初めて桐ver.2の一括処理を見せてもらった時には、あまりにもスパゲッティなプログラムが多いので腰を抜かしましたよ。

    3.反復(repetition)

    反復(repetition)は、同じ範囲を繰り返して実行することです。

    Win桐では、[繰り返し ... 繰り返し終了]コマンドが相当します。

    これは難しくないので、すぐに理解出来るでしょう。

    一番のキモは、[繰り返し ( 条件 ) ... 繰り返し終了]の場合には、 if ( 条件 ) ... else ... end の場合と同じように、

    ( 条件 )に記述する条件式が最終的に論理値を生成している点を理解することです。

    つまり、 条件式の結果(これは評価とも)が1イチ(真)か0ゼロ(偽)のどちらかということです。

    これさえ理解すればOKです。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    以上がプログラムの制御構造と制御構文ですが、関連することを・・・

    to be continued

引用返信 [メール受信/OFF] 削除キー/
■14294 / ResNo.23)  Re[14]: 加工開始日を求めたい
□投稿者/ ONnoji -(2024/04/15(Mon) 16:56:38)
    以上がプログラムの制御構造と制御構文ですが、関連することを・・・

    実は、スパゲッティにならなければ何でもよいのか?というわけではないのです。

    もう一つ重要なポイントは、ブロック化です。

    分かり易く言えば、ブロック玩具のレゴ(LEGO)みたいにプログラムを作るということです。
             ・・・・・・・・・・・・・・・・・・・・・・・・

    以下のイベント処理(.kex)は何度も見ていると思います。

    1.[名札  メイン ... *]
    2.[手続き定義開始 cmdテストClick( ) ... 手続き定義終了]
    3.[手続き定義開始 prc加工日探索( ) ... 手続き定義終了]

    ↑この3つが機能のブロックですね。

    しかし、単に範囲という意味ではなくて[機能]という視点からのブロックです。
                      ・・・・・・・・・・・・・・・・
    つまり、このイベント処理(.kex)には、3個の機能(ブロック)があるということです。

    そして、機能のブロックを[モジュール]と呼びますよ。

      ┌名札  メイン
      │
      │ ** フォームが開かれる時に必ず実行される機能のブロック
      │
      └*

      ┌手続き定義開始 cmdテストClick( )
      │ 変数宣言 自動,文字列{ &title = "cmdテストClick( )", &msg }
      │ 変数宣言 自動,日時 { &加工日1, &加工日2 }
      │ 変数宣言 自動,整数 { &multiTblNum }
      │ 変数宣言 自動,長整数{ &recordNum }
      │
      │
      │ &msg =      "Start"
      │ &msg = &msg + "\n\nこれはテスト用のメッセージボックスです"
      │ &msg = &msg + "\n\n不要になったらコメントアウトしてください"
      │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
      │
      │ 多重化
      │ &multiTblNum = #is表  /* 多重化した表の表番号を取得 */
      │
      │ 解除 *
      │ 絞り込み [休日]{ [休日] = #u }
      │ ジャンプ 行番号 = 先頭
      │┌繰り返し ( .not #eof )
      ││
      ││ &recordNum = #行番号
      ││ 手続き実行 prc加工日探索( &加工日1, &加工日2 )
      ││ ジャンプ 行番号 = &recordNum
      ││
      ││ トレース出力 _[日付], "  ", _&加工日1, "  ", _&加工日2
      ││ 行訂正 [加工日1] = &加工日1, [加工日2] = &加工日2
      ││
      ││ ジャンプ 行番号 = 次行 /* これを忘れると無限ループになります */
      │└繰り返し終了
      │
      │ 終了 表 &multiTblNum  /* 多重化した表を閉じる */
      │ 編集表 &hwindow
      │
      │ &msg =      "Finish"
      │ &msg = &msg + "\n\nこれはテスト用のメッセージボックスです"
      │ &msg = &msg + "\n\n不要になったらコメントアウトしてください"
      │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
      │
      │ *手続き定義終了
      │
      └end

      ┌手続き定義開始 prc加工日探索( 参照 日時 &加工日1, 参照 日時 &加工日2 )
      │ 変数宣言 自動,文字列{ &title = "prc加工日探索( )", &msg }
      │ 変数宣言 自動,長整数{ &recordNum }
      │
      │ &加工日1 = #u /* 参照引数を初期化 */
      │ &加工日2 = #u /* 参照引数を初期化 */
      │
      │ &recordNum = #行番号
      │ ジャンプ 行番号 = &recordNum
      │┌if ( &recordNum > 5 )
      ││ ジャンプ 行番号 = -5
      ││ &加工日1 = [日付]
      │└end
      │
      │ ジャンプ 行番号 = &recordNum
      │┌if ( &recordNum > 7 )
      ││ ジャンプ 行番号 = -7
      ││ &加工日2 = [日付]
      │└end
      │
      └手続き定義終了

    もうひとつ大事なことは、3個の機能(ブロック)のうち2つの機能

     cmdテストClick  ← 上位の機能(モジュール)
     │
     └ prc加工日探索 ← 下位の機能(モジュール)

    は、実行するタイミングで、上位の機能(モジュール)と下位の機能(モジュール)と呼びます。

    これは、呼び方が違うだけでメインルーチンとサブルーチンと全く同じものですよ。

    上位モジュール:cmdテストClickの機能

     ・多重化した表の先頭から最後までジャンプすること

    下位モジュール:prc加工日探索の機能

     ・加工日を探索して、変数に格納して、呼び出し元へ値を返すこと。

    ということです。

    このように、各モジュールで仕事分担をしています。

    そして、ひとつのモジュールはひとつの機能を分担しています。
        ・・・・・・・・・・・・・・・・・・・・・・・・

    実は、初級者の場合このような機能の分割・分担の切り分けが上手に出来ません。

    だって、慣れていないのですから当たり前です。

    繰り返しになりますが、ひとつのモジュールはひとつの機能を分担するという事を常に念頭にしていれば、

    上位の機能(モジュール)と下位の機能(モジュール)の関係で手続きが作れるようになりますよ。

    そして、機能(モジュール)は一般手続きですから、同じイベント処理の別の機能(一般手続き・イベントハンドラ)からも呼び出せます。

    また、一度作った一般手続きは、別のイベント処理でも再利用しやすくなります。

    cmdテストClickの機能とprc加工日探索の機能を合体させた、ひとつの一般手続きを例示しようと思っていましたが、説明が長くなったので割愛します。

    でも、合体させた場合には、プログラムが複雑にってしまって分かりにくくなるということはイメージできると思います。

     <参考>
     8.4 一般プロシージャをサブルーチンとして呼び出す|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
     http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section8-4

    p.s.

    今回話題にした[プログラムの制御構造]や[モジュラー設計]というのは、いわゆる[構造化プログラミング]と呼ばれるものです。

    [構造化プログラミング]は、はるか昔から提唱されてきた考え方ですので、現代では特に[構造化プログラミング]が雑誌やネットで騒がれることはありません

    また、[構造化プログラミング]とされる範囲は非常に広いので、今さら[構造化プログラミング]をお勉強される必要はないと思います。

    非常に文章が長くなって恐縮ですが。アハハha (@^^)/~~~


引用返信 [メール受信/OFF] 削除キー/
■14296 / ResNo.24)  Re[15]: 加工開始日を求めたい
□投稿者/ ジェダイの桐 -(2024/04/15(Mon) 17:45:27)
    ONnojiさん


    > もう一つ重要なポイントは、ブロック化です。


    > 1.[名札  メイン ... *]
    > 2.[手続き定義開始 cmdテストClick( ) ... 手続き定義終了]
    > 3.[手続き定義開始 prc加工日探索( ) ... 手続き定義終了]
    >
    > ↑この3つが機能のブロックですね。



    > もうひとつ大事なことは、3個の機能(ブロック)のうち2つの機能
    >
    >  cmdテストClick  ← 上位の機能(モジュール)
    >  │
    >  └ prc加工日探索 ← 下位の機能(モジュール)
    >
    > は、実行するタイミングで、上位の機能(モジュール)と下位の機能(モジュール)と呼びます。


    ブロック化の考え方、私に合っていると思います。
    1つずつ分けて考えた方が分かりやすいからです。

    ただ一つ疑問が・・・

    今回は cmdテストClick(上位機能) prc加工日探索(下位機能)だけでした。
    もし 後から prc加工日探索(下位機能) を使いまわしたくなった場合、


    cmdテストClick  ← 上位の機能(モジュール)
     │
     └ prc加工日探索 ← 下位の機能(モジュール)
     │
     └cmdテスト2Click← 後から追加した上位の機能(モジュール)


    上機能 → 下機能 → 上機能 の順番になると思うのです。

    であれば、明らかに汎用性の高い 下位機能 と分かっている場合は 別のイベント処理(.kex) を作成して 代入 させた方が 上位下位の整合性が保ち易いのではないかと思ってしまいました。

    物凄く見当違いな意見かもしれませんが・・・


    詳しい解説有難うございましたm(__)m
引用返信 [メール受信/OFF] 削除キー/
■14297 / ResNo.25)  Re[16]: 加工開始日を求めたい
□投稿者/ ONnoji -(2024/04/15(Mon) 17:59:24)
    2024/04/15(Mon) 18:08:38 編集(投稿者)

    > ただ一つ疑問が・・・
    >
    > 今回は cmdテストClick(上位機能) prc加工日探索(下位機能)だけでした。
    > もし 後から prc加工日探索(下位機能) を使いまわしたくなった場合、
    >
    >
    > cmdテストClick  ← 上位の機能(モジュール)
    >  │
    >  └ prc加工日探索 ← 下位の機能(モジュール)
    >  │
    >  └cmdテスト2Click← 後から追加した上位の機能(モジュール)
    >
    >
    > 上機能 → 下機能 → 上機能 の順番になると思うのです。
    >
    > であれば、明らかに汎用性の高い 下位機能 と分かっている場合は 
    > 別のイベント処理(.kex) を作成して 代入 させた方が 上位下位の整合性が保ち易いのではないかと思ってしまいました。

    上機能 → 下機能 → 上機能 というのは、A機能 → B機能 → A機能 という考えた方が良いと思いますよ。

    つまり、上とか下はあまり重要ではありません。

    外しているかもしれませんが、いや当たりかなぁ〜???

    ひょっとして[再帰呼び出し]のことでしょうかね?????

     <参考>
     38.2 再帰呼び出し|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
     http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section38-2

    しかし、当方は部品展開や逆展開で使うと便利かなぁ〜程度の認識ですが、ウルトラ難度の頭の回転技を必要としそうですよ。

    時々[再帰呼び出し]が得意な人を見かけますが、当方は詳しくないので聞かないでね。m(__)m

    p.s.

    最初から汎用性を追求する必要性はありませんよ。

    たくさん、手続きを作っていくうちに、汎用性がある機能というのが浮かび上がってくるものなんですよ。
                      ・・・・・・・・・・・・・・・・・・・・・・

    そうしたら、汎用性を持たせた内容で、新しく作り直した方が早いですよ。
                      ・・・・・・・・・・・・
    ローマは一日してならず。

引用返信 [メール受信/OFF] 削除キー/
■14298 / ResNo.26)  Re[15]: 加工開始日を求めたい
□投稿者/ ONnoji -(2024/04/15(Mon) 18:09:28)
    2024/04/15(Mon) 18:31:45 編集(投稿者)

    > cmdテストClickの機能とprc加工日探索の機能を合体させた、ひとつの一般手続きを例示しようと思っていましたが、説明が長くなったので割愛します。
    >
    > でも、合体させた場合には、プログラムが複雑にってしまって分かりにくくなるということはイメージできると思います。

    上位モジュールと下位モジュールを合体させてみました。

    複雑さが増して、その結果分かりにくくなっているでしょう??

    最初はこれでもいいのですが、だって動くんだモン♪

    でもね、モジュール化をしないと、一か月後、数か月後、一年後と時間が経てば経つほど、

    記憶もあいまいになって、さらに複雑さも加わり、謎のプログラムに変容していくのです。アハハ。

    しかし、モジュール化しておけば、記憶が曖昧になっていても、複雑さが軽減されているで、何とかなるのです。アハハ。

    自分で作ったプログラムが解読出来なくて何時間も格闘するするのは無駄でしょう。、

    だから、未来への投資だと思って、後々のことを考えて拙速にならないようにくれぐれも気を付けてください。


      ┌手続き定義開始 cmdテストClick( )
      │ 変数宣言 自動,文字列{ &title = "cmdテストClick( )", &msg }
      │ 変数宣言 自動,日時 { &加工日1, &加工日2 }
      │ 変数宣言 自動,整数 { &multiTblNum }
      │ 変数宣言 自動,長整数{ &recordNumMain } /* 変数名が重複するので &recordNum → &recordNumMain に変更 */
      │ 変数宣言 自動,長整数{ &recordNum }
      │
      │
      │ &msg =      "Start"
      │ &msg = &msg + "\n\nこれはテスト用のメッセージボックスです"
      │ &msg = &msg + "\n\n不要になったらコメントアウトしてください"
      │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
      │
      │ 多重化
      │ &multiTblNum = #is表  /* 多重化した表の表番号を取得 */
      │
      │ 解除 *
      │ 絞り込み [休日]{ [休日] = #u }
      │ ジャンプ 行番号 = 先頭
      │┌繰り返し ( .not #eof )
      ││
      ││ &recordNumMain = #行番号
      ││ **手続き実行 prc加工日探索( &加工日1, &加工日2 ) /* 下位モジュールを読み込んだのでコメントアウト */
      ││
      ││ &加工日1 = #u /* 参照引数を初期化 */
      ││ &加工日2 = #u /* 参照引数を初期化 */
      ││
      ││ &recordNum = #行番号
      ││ ジャンプ 行番号 = &recordNum
      ││┌if ( &recordNum > 5 )
      │││ ジャンプ 行番号 = -5
      │││ &加工日1 = [日付]
      ││└end
      ││
      ││ ジャンプ 行番号 = &recordNum
      ││┌if ( &recordNum > 7 )
      │││ ジャンプ 行番号 = -7
      │││ &加工日2 = [日付]
      ││└end
      ││
      ││ ジャンプ 行番号 = &recordNumMain
      ││
      ││ トレース出力 _[日付], "  ", _&加工日1, "  ", _&加工日2
      ││ 行訂正 [加工日1] = &加工日1, [加工日2] = &加工日2
      ││
      ││ ジャンプ 行番号 = 次行 /* これを忘れると無限ループになります */
      │└繰り返し終了
      │
      │ 終了 表 &multiTblNum  /* 多重化した表を閉じる */
      │ 編集表 &hwindow
      │
      │ &msg =      "Finish"
      │ &msg = &msg + "\n\nこれはテスト用のメッセージボックスです"
      │ &msg = &msg + "\n\n不要になったらコメントアウトしてください"
      │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
      │
      └手続き定義終了

    p.s.

    これは、適切に機能を分割していない例です。

    既出の prc加工日探索 のように、機能を分割するべきです。

    そして、 prc加工日探索 は本来ならば汎用性が求められるものですが、現行のサンプルは見本であって汎用性に欠けていますよ。(^^ゞ

引用返信 [メール受信/OFF] 削除キー/
■14299 / ResNo.27)  Re[17]: 加工開始日を求めたい
□投稿者/ ONnoji -(2024/04/15(Mon) 18:18:06)
    > ただ一つ疑問が・・・
    >
    > 今回は cmdテストClick(上位機能) prc加工日探索(下位機能)だけでした。
    > もし 後から prc加工日探索(下位機能) を使いまわしたくなった場合、

    ↑これ当方は、実はよく理解できないんです。

    もしも、使い回したい機能があれば、それを呼び出す一般手続きまたはイベントハンドラから呼び出せばOKです。

    そういう意味なのでそんなに悩ましいとは思えないのですが・・・

    ただですね、prc加工日探索(下位機能) は、名前は立派ですが、内容は非常にチープなんですよ。

    だって、探索する項目も探索する日数も全部が固定されているでしょう。

    なので、まだまだ改良の余地があるでしょう。

    でも、最初は急ぐよりも、一歩一歩が大事なんですよ。

    急がば回れというでしょう。急いでも何も良い事はありませんよ。


引用返信 [メール受信/OFF] 削除キー/
■14300 / ResNo.28)  Re[17]: 加工開始日を求めたい
□投稿者/ ジェダイの桐 -(2024/04/15(Mon) 18:19:55)
    ONnojiさん


    早速の返信ありがとうございますm(_ _)m

    ちょっと書き方が分かりにくかったかもしれません。

    cmdテストClick  ← 上位の機能(モジュール)
     │
    └ prc加工日探索 ← 下位の機能(モジュール)

    └cmdテスト2Click← 後から追加した上位の機能(モジュール)
    └ prc加工日探索 ← 下位の機能(モジュール)(使い回し。cmdテスト2Clickの中にprc加工日探索を指示しておけば、実際にはcmdテスト2Clickの上にプログラムがあるので、記載しなくて良いと言う認識です。)

    だけど、

    > 上機能 → 下機能 → 上機能 というのは、A機能 → B機能 → A機能 という考えた方が良いと思いますよ。

    と言う考え方なのですね^_^
    気を引き締めて、理解していかないとスパゲッティ迷宮に迷い込みそうです(TT)


    > ひょっとして[再帰呼び出し]のことでしょうかね?????


    私の発想はかなり単純でした。
    上位プログラム と 下位プログラムを最初から分けておいた方が管理がしやすいのかな??
    と思ってしまったんです…

    まさか、こんなにウルトラ難度とも梅雨知らず(TT)


    勉強になりました(^^)/

    >  <参考>
    >  38.2 再帰呼び出し|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
    >  http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section38-2
    >
    > しかし、部品展開や逆展開で使うと便利かなぁ〜程度の認識ですが、ウルトラ難度の頭の回転技を必要としそうですよ。

    本当に本当に上達して、必要がある時のみ、こう言う事が出来ればなぁ とは思いますが、まずはしっかりと基礎固めします^_^
引用返信 [メール受信/OFF] 削除キー/
■14301 / ResNo.29)  Re[18]: 加工開始日を求めたい
□投稿者/ ONnoji -(2024/04/15(Mon) 19:02:22)
    2024/04/15(Mon) 19:40:29 編集(投稿者)

    > ちょっと書き方が分かりにくかったかもしれません。
    >
    > cmdテストClick  ← 上位の機能(モジュール)
    >  │
    >  └ prc加工日探索 ← 下位の機能(モジュール)
    >  │
    >  └cmdテスト2Click← 後から追加した上位の機能(モジュール)
    >  └ prc加工日探索 ← 下位の機能(モジュール)(使い回し。cmdテスト2Clickの中にprc加工日探索を指示しておけば、実際にはcmdテスト2Clickの上にプログラムがあるので、記載しなくて良いと言う認識です。)
    >
    > だけど、
    >
    >>上機能 → 下機能 → 上機能 というのは、A機能 → B機能 → A機能 という考えた方が良いと思いますよ。
    >
    > と言う考え方なのですね^_^
    > 気を引き締めて、理解していかないとスパゲッティ迷宮に迷い込みそうです(TT)


    よ〜く見たら、

    cmdテストClick  ← 上位の機能(モジュール)
     │
     └ prc加工日探索 ← 下位の機能(モジュール)

    cmdテスト2Click ← 後から追加した上位の機能(モジュール)
     │
     └ prc加工日探索

    ↑こういう意味なんでしょうね。

    サンプルはあくまでも見本ですので最小で作ってあるんですよ。

    この場合には、

    cmdテストClick ※メインの機能を 手続き実行 prc多重化して探索( ) に変更
     │
     └ prc多重化して探索 ※cmdテストClickを prc多重化して探索( ) にリネームしたもの
       │
       └ prc加工日探索 ※そのまま 


    cmdテスト2Click ※メインの機能を 手続き実行 prc多重化して探索( ) に変更
     │
     └ prc多重化して探索 ※cmdテストClickを prc多重化して探索( ) にリネームしたもの
       │
       └ prc加工日探索 ※そのまま 

    のように、コマンドボタンから呼び出す一般手続きを2つ作って、

    cmdテストClick と cmdテスト2Click ですが、

     手続き定義開始 cmdテストClick( )

      手続き実行 prc多重化して探索( )

     手続き定義終了

     手続き定義開始 cmdテスト2Click( )

      手続き実行 prc多重化して探索( )

     手続き定義終了

    こんな感じでOKです。

     <参考>
     25.3 プロシージャ(手続き)名の付け方|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
     http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section25-3

    p.s.

    最初のサンプルの時に、3階層で作って置けばよかったですかね?

     cmdテストClick ※メインの機能を 手続き実行 prc多重化して探索( ) に変更
      │
      └ prc多重化して探索 ※cmdテストClickを prc多重化して探索( ) にリネームしたもの
        │
        └ prc加工日探索 ※そのまま 

    でも、いきなり3階層では、消化不良を起こすかもしれなかったので2階層にしましたよ。(^^ゞ


引用返信 [メール受信/OFF] 削除キー/

<前のレス10件 | 次のレス10件>

スレッド内ページ移動 / << 0 | 1 | 2 | 3 >>

このスレッドに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -