HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
ファイル一覧
検索
過去ログ
[
親記事をトピックトップへ
]
このトピックに書きこむ
入力内容にタグは利用できません。
他人を中傷する記事は管理者の判断で予告無く削除されます。
半角カナは使用しないでください。文字化けの原因になります。
名前、コメントは必須記入項目です。記入漏れはエラーになります。
入力内容の一部は、次回投稿時の手間を省くためブラウザに記録されます。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
URLは自動的にリンクされます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例:
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
■お願い−−−−−−−
質問には、できるだけ「OS・桐 Ver」等ご記入願います
将来ここに掲載されました内容を、桐のファイルへ変換予定です。
できましたら、3,500文字以内位での投稿お願い致します
■ご注意(Comment)−−−−−
通常モード・・・通常文章等
図表モード・・・等幅表示(イベントや数字等を記入したとき:
初期設定
)
■
解決しましたら最下段にチェックを入れてください
■
引用文は、最小限に、お願いいたします
Name
/
E-Mail
/
└> 関連するレス記事をメールで受信しますか?
NO
YES
/ アドレス
非公開
公開
Title
/
メッセージ中には下記URLと同じURLを書き込まないで下さい
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
■No14294に返信(ONnojiさんの記事) > 以上がプログラムの制御構造と制御構文ですが、関連することを・・・ > > 実は、スパゲッティにならなければ何でもよいのか?というわけではないのです。 > > もう一つ重要なポイントは、ブロック化です。 > > 分かり易く言えば、ブロック玩具のレゴ(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 (@^^)/~~~ > >
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.jpeg
/
.png
/.txt/.lzh/.zip/.mid
圧縮ファイル[lzh,zip]は、事前に解凍してご利用下さい。
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
100KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/500KB]
残り:[500KB]
パスワード
/
半角小文字で「ケイ・アイ・アール・アイ」を入力
削除キー
/
(半角8文字以内)
解決済み!
BOX/
解決したらチェックしてください!
プレビュー/
[ トピック内全33記事(1-20 表示) ] <<
0
|
1
>>
■14310
/ inTopicNo.1)
Re[21]: 加工開始日を求めたい
▼
■
□投稿者/ ONnoji
-(2024/04/19(Fri) 18:41:09)
2024/04/19(Fri) 18:42:39 編集(投稿者)
ジェダイの桐さん
後日談拝を読しました。
さらに参考になるかもしれない?ということで、補習授業みたいな??
この【多遊】さんのHPの、もうひとつ別の掲示板「のほか掲示板」に投稿してテキストを添付しました。
・・・・・・・・・・・・・・・・・・・・・
よろしければ、添付のテキストをお読みになってみてください。
《 桐質問以外の話題は、「のほか掲示板」からどうぞ 》
> ■1442 / 親階層) (仮題)目からウロコの「桐プログラミング」入門
> □投稿者/ ONnoji -(2024/04/19(Fri) 18:33:10)
>
> 現在、(仮題)目からウロコの「桐プログラミング」入門という小論を執筆中です。
>
> これは[フォーム+イベント処理]の初級者向けの内容です。
>
> まだまだ執筆途中ですが、ご高覧いただければ嬉しいです。
>
> ご意見・ご感想などフィードバックいただければ幸いです。
>
> よろしくお願いいたします。m(__)m
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14309
/ inTopicNo.2)
Re[20]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ジェダイの桐
-(2024/04/18(Thu) 09:19:37)
ONnojiさん
このツリーで最後の返信にします。
教えて貰った後日談です。
変数の読み方 ブロック構造の考え方 の知識が入った状態で、
ONnojiさん と あこめさんの、プログラム練習をやっている途中です。
以前やった時は 作業 でやったみただけ状態でした。
しかし、今は若干ではありますがプログラムの意味が分かります。
(代入 が省かれて記入されている事と、ブロック構造の考え方を教えて貰ったのが大きいと思います。)
プログラム練習を全部やって、少しずつ自分の業務に応用出来る様に挑戦していきます。
また、新たな壁にぶつかった時は 掲示板に新たな投稿をします。
フォームを感じ、フォームと共に頑張ります(^^)/
今まで本当にありがとうございましたm(__)m
それでは〜(^^♪
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14302
/ inTopicNo.3)
Re[19]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ONnoji
-(2024/04/15(Mon) 21:46:17)
2024/04/15(Mon) 22:08:34 編集(投稿者)
こんなやり取りがありましたね。(^^ゞ
> ■Re[9]: 行制約について
>>正に一番やりたかったイメージの物でした!
>>フォーム+イベント処理は敷居が高く感じますが、乗り越えたらやりたいイメージの物が出来上がりますね!
>>ブログ読ませて頂きます!(直ぐに理解出来ないので何回も読もうと思います)
> 当方のwebページの、
> フォームアプリケーション教書 第1部
> フォームアプリケーション教書 第2部
> は、[フォーム+イベント処理]のガイド・事典として執筆したものです。
> 一応、順番にお読みになることをお勧めしますが、必要な所を拾い読みしていただくのでも構いません。
> なお、著者が認める「悪文」ですので、読み難さについてはご勘弁ください。アハハhe(^^ゞ
> 対象範囲が広いので、例えば「変数って何ですか?」のような初級者向けの事柄は割愛しています。
> つまり、変数の知識は有ることが前提になっています。
> そうしないと、膨大な量の解説を書かなければなりませんがら・・・(^^ゞ
予想をはるかに超えて大きなツリーになってしまいました。
貴殿のような初級者の人に、実際に動作するサンプルを見せて、後は自分で頑張ってね〜(^^)v
なんてね、でもそれはちょっと酷だと思ったのです。
実は当方では「(仮題)目からウロコのデータベース桐プログラミング」という小論を書き始めた時期だったのです。
このようにタイミングが重なったためにかなり長大な投稿を繰り返してしまいました。
最後まで読んでいただいて、丁寧なリプライをいただきまして感謝です。
また、ガントチャートに関しての知見をお聞かせいただいて合わせて感謝です。
ということで、いい加減に終わりですが (^^ゞ
最後にひとつ・・・
ジェダイの桐さんのお仕事は製造業のようなので、加工機械は身近なものでしょう。
この機械(マシン)はハードウェアと言うものですね。
一方、桐の[フォーム+イベント処理]はソフトウェアです。
このソフトウェアという言葉を、[柔らかな機械]と考えていただきたいのです。
見えなくて、実際に触ることも出来ないけれど、それは機械と同じなんだとね。
だから、機能だとかモジュラー設計だとか、まるでハードウェアと同じような言葉が飛び出すのです。
ハードウェアのメンテナンスや故障診断と、ソフトウェアのそれはまったく同じではありませんが、
ソフトウェアが[柔らかな機械]だと考えればイメージしやすくなるでしょう。
では最後に、
ジェダイの桐さんへ
フォームを使え。感じるのだ。 Use the Form. Feel it.
フォームと共にあらんことを。 May the Form be with you.
それでは。(@^^)/~~~
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14301
/ inTopicNo.4)
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]
削除キー/
編集
削除
■14300
/ inTopicNo.5)
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]
削除キー/
編集
削除
■14299
/ inTopicNo.6)
Re[17]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ONnoji
-(2024/04/15(Mon) 18:18:06)
> ただ一つ疑問が・・・
>
> 今回は cmdテストClick(上位機能) prc加工日探索(下位機能)だけでした。
> もし 後から prc加工日探索(下位機能) を使いまわしたくなった場合、
↑これ当方は、実はよく理解できないんです。
もしも、使い回したい機能があれば、それを呼び出す一般手続きまたはイベントハンドラから呼び出せばOKです。
そういう意味なのでそんなに悩ましいとは思えないのですが・・・
ただですね、prc加工日探索(下位機能) は、名前は立派ですが、内容は非常にチープなんですよ。
だって、探索する項目も探索する日数も全部が固定されているでしょう。
なので、まだまだ改良の余地があるでしょう。
でも、最初は急ぐよりも、一歩一歩が大事なんですよ。
急がば回れというでしょう。急いでも何も良い事はありませんよ。
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14298
/ inTopicNo.7)
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]
削除キー/
編集
削除
■14297
/ inTopicNo.8)
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]
削除キー/
編集
削除
■14296
/ inTopicNo.9)
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]
削除キー/
編集
削除
■14294
/ inTopicNo.10)
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]
削除キー/
編集
削除
■14293
/ inTopicNo.11)
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]
削除キー/
編集
削除
■14288
/ inTopicNo.12)
Re[12]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ジェタイの桐
-(2024/04/12(Fri) 19:07:22)
ONnojiさん
> 多重化がどんなものか見た事がないのでリンクかな?と思われたのでしょう。
>
> リンクではありません、そのまま多重化です。つまり、多重人格と同じです。(@ @)
>
> 具体的には、表ウィンドウで[メニューバー]→[ウィンドウ]→[新しいウィンドウを開く]を実行してみてください。
>
> その後、同じく[メニューバー]→[ウィンドウ]→[重ねて表示]などを実行してみてください。
>
> ほらね。見た通りですから。アハハha。
>
> この時に、[メニューバー]→[表示]→[ファイルパレット]を実行してみてください。
>
> そして、[ファイルパレット]の大きめのアイコンの一番右の[編集表]を実行してください。
>
> すると同じファイル名の表が2つ開いていることが分かるでしょう。
びっくり仰天でした(@_@)
解説だけでも、何となくは理解出来たのですが、実際に 新しいウインドウ で開き 重ねて表示 させました。
そして、文字を入力したり消してみたら、どちらの表も同じ結果になっていました。
驚き以外の何ものでもありません…
実際に試す事は重要ですね^_^
> 多重化に関してはヘルプも読んでみてください。
こちらに関してはまだ読めてないので、月曜日に確認します!
> p.s.
>
> 他にも気が付いたことがありますので、当方は追加投稿すると思います。
>
> しばらくはこの掲示板を見に来てください。(@^^)/~~~
はい!
勿論チェックします!
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
昔は要領の関係で、文字数制限があったと言われていました。
プログラムを考える上で縛りがある分良く考えなければいけなかったじゃないでしょうか?
と言う事は、文字数縛りのない現在と違い、発想力が凄く質の高いプログラマーが
生まれやすい環境だったのかな??
キャメルケースも知恵の1つですよね^_^
等と勝手に推測してみましたm(_ _)m
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14286
/ inTopicNo.13)
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]
削除キー/
編集
削除
■14285
/ inTopicNo.14)
Re[10]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ジェダイの桐
-(2024/04/12(Fri) 09:31:19)
ONnojiさん
> 次の1文字の変数名は普通に使いますよ。
>
> それは、アイ、ジェー、ケー つまり i j k です。
>
> 桐の場合には、変数を直接(リテラル)記述する場合には、接頭辞のアンパサンド記号(&)を付けますので
>
> つまり、&i &j &k ですが、これはプログラミングに慣れている人には違和感がありません。
これば疑問に思っていました。
ネットでプログラムの事を見ている時に i って頻繁に目にしました。
これも過去からの流れなんですね!
但し、 j と k は初めて知りました。
> 本当は &count でも良いのですが、やはり3文字のレガシーで &cnt です。アハハha (^^ゞ
初級者目線(私だけかもしませんが・・・)で言えば、正にこういう事がしりたかったのです。
&count でも良い けど 3文字のレガシーで &cnt
なんでもない事かもしれないですが、変数名は自由にしていいのに
何故英語? 何故3文字? (?_?)
過去からの流れで 英語 を使用した方がトラブル回避になる、項目に代入する時は 見た目に分かりやすい方が良い。(結果 漢字を使用する or 一般的に理解出来れば 3文字英語 そうでなければ 素直に英単語 にした方が分かりりやすい)
この知識が前段で無いと、プログラミングの門が狭く感じてしまうのです・・・(^^;
> ところで、&cnt = &cnt + 1 もヘンテコに見えるでしょう。
確かに見えましたが、
↓の開設のおかげで
>
> でもこれは、&cntに1加算した結果を &cnt 自身に代入するという意味です。
>
> つまり、加算(インクリメント)のコマンドになるわけです。
&msg = "Start"
&msg = &msg + "\n\nこれはテスト用のメッセージボックスです"
&msg = &msg + "\n\n不要になったらコメントアウトしてください"
メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
&msg = &msg + "\n\n文字列"
の意味が非常に良く分かりましたm(__)m
> p.s.
>
> [繰り返し ... 繰り返し終了]という繰り返しコマンドはワカリニクイでしょう。
>
> 初級者が最も苦手とするのが、この繰り返し処理なんですよ。
>
> そうそう、サンプルにも繰り返し処理がありましたね。
>
> :
> :
> ジャンプ 行番号 = 先頭
> 繰り返し ( .not #eof )
>
> :
> 分かり易さのために途中のコマンドを省略しています
> :
>
> ジャンプ 行番号 = 次行 /* これを忘れると無限ループになります */
> 繰り返し終了
> :
> :
自分で完璧に作れるかは怪しいですが、
私の理解が正しければ・・・
ジャンプ 行番号 = 先頭 ←最初は先頭行にジャンプする
繰り返し ( .not #eof ) ←このプログラム以下から 最終行 になるまで繰り返す
:
:
やりたい事の命令
:
:
ジャンプ 行番号 = 次行 ←これは ジャンプ 行番号 = 先頭 に対して 次行なので 2行目 最終行になるまで加算させる。
だから注釈の様に ジャンプ 行番号 = 次行 を忘れると 永遠に 先頭行 を繰り返す事になる
という事だと認識していますm(__)m
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
昨日プログラムを見ていて気付いた事があります。
多重化
&multiTblNum = #is表 /* 多重化した表の表番号を取得 */
:
:
行訂正 [加工日1] = &加工日1, [加工日2] = &加工日2
:
:
終了 表 &multiTblNum /* 多重化した表を閉じる */
編集表 &hwindow
これを見ると、 多重化 した表に 求めたいデータを最終行まで代入していると理解しています。
最終行までいって繰り返しが終了しらたら 多重化 した表を閉じて、編集対象表に戻る。
これ自体は理解の通りであれば、納得出来るのですが
代入している表が 多重化 した表です。
それが何故編集対象表に求めた結果があるのか??
これは、 多重化した表 と 編集対象表は リンクしていると言う事なのでしょうか??
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
このツリーは本当に私の財産です。
初級者に対しての講義と言っても過言じゃないと思っています。
本当に助かっています!
ありがとうございますm(__)m
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14284
/ inTopicNo.15)
Re[9]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ONnoji
-(2024/04/11(Thu) 17:06:10)
2024/04/11(Thu) 17:50:49 編集(投稿者)
蛇足を少々・・・
> いずれにしても、短い変数名を良しとするのはレガシーです。MS-DOS時代は何かと窮屈だったんですよ。アハハha
> かといって長すぎるのも読み下しが大変ですから、程々にしておくのが肝心だと思いますよ。
いくつかの例外がありますの・・・
それは「遠い昔、遥か彼方の銀河系でコンピュータ言語が発明された時以来」の習慣です。
次の1文字の変数名は普通に使いますよ。
それは、アイ、ジェー、ケー つまり i j k です。
桐の場合には、変数を直接(リテラル)記述する場合には、接頭辞のアンパサンド記号(&)を付けますので
つまり、&i &j &k ですが、これはプログラミングに慣れている人には違和感がありません。
これらの変数は整数のカウンタとして使うんですよ。
すなわち、&i が 1、&i が 2、&i が 3、… &i が n のように値が増加していくケースです。
これは「ヒツジが一匹、ヒツジが二匹・・・」というやつです。(^^ゞ
例えば、
&step = 1
&loop = 10
繰り返し &i = 1, &loop, &step
** &i の値が、1から10になるまで1(&step)増分して繰り返す
繰り返しい終了
ちなみに、&j &k は、さらに繰り返しが入れ子になる場合に使いますね。
・・・・・・・・・・・・・・・・・・・・・・・・・・
1文字の変数名ではありませんが、私( ONoji )はカウンタとして &cnt をよく使います。
本当は &count でも良いのですが、やはり3文字のレガシーで &cnt です。アハハha (^^ゞ
例えば、
&cnt = 0
繰り返し ( &cnt <= 10 )
** &i の値が、1から10になるまで1増分して繰り返す
&cnt = &cnt + 1
繰り返し終了
とかですね。
ところで、&cnt = &cnt + 1 もヘンテコに見えるでしょう。
でもこれは、&cntに1加算した結果を &cnt 自身に代入するという意味です。
つまり、加算(インクリメント)のコマンドになるわけです。
ちなみに、桐以外のコンピュータ言語でも基本的に同じですが、
i = i + 1 と書かずに i++ と書く言語が多いですよ。
もしも、i++ なんて見るとますます頭の中が混乱しますよね。
でもね、プログラマーは i++ を i = i + 1 とは絶対に書かないんですよ。アハハha
p.s.
[繰り返し ... 繰り返し終了]という繰り返しコマンドはワカリニクイでしょう。
初級者が最も苦手とするのが、この繰り返し処理なんですよ。
そうそう、サンプルにも繰り返し処理がありましたね。
:
:
ジャンプ 行番号 = 先頭
繰り返し ( .not #eof )
:
分かり易さのために途中のコマンドを省略しています
:
ジャンプ 行番号 = 次行 /* これを忘れると無限ループになります */
繰り返し終了
:
:
Did you understand? (^^)ok
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14283
/ inTopicNo.16)
Re[8]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ジェダイの桐
-(2024/04/11(Thu) 14:15:11)
ONnojiさん
> ということで、項目[加工日1]に対応する変数が &加工日1 で、項目[加工日2]に対応する変数が &加工日2 という事です。
>
> これを
>
> 行訂正 [加工日1] = &dom1, [加工日2] = &dom2
>
> と書いてしまうと、もちろん動きますが・・・(^^ゞ
>
> 一番の問題は、後で読み返す際に直感的に分かりにくいんですね。
> ・・・・・・・・・・・・・・・・・・
>
> 行訂正 [加工日1] = &加工日1, [加工日2] = &加工日2
>
> としていれば、一目瞭然です。※最小限の思考で済みますから・・・(^^ゞ
>
> それに項目名と変数名が同じならば、イベント処理を検索する時に都合がいいでしょう。※後々のことを考えましょう。アハハha
解説有難うございますm(__)m
疑問が解決しました!!
分かりやすさは重要ですよね(^^♪
> &dom1 &dom2 といった短い英語風の変数名は、意味が明瞭ならばOKですが、この場合には好ましくないでしょう。
>
> &dateOfManufacture1 &dateOfManufacture2 の方が全然素直です。
> ・・・・
>
> ネットをご覧になると、変数名がアルファベット3文字というのが多いと気が付くでしょう。
>
> これも昔のPCのレガシー(遺産)なんですよ。
>
> 昔のPCのメモリーが少なかったので、変数名を長くできなかったんですよ。
>
> それと、暗号のような変数を使っていても本人が判れば良しだったり、開発チームで暗号を共有していたりしたのです。
>
> そもそも、ソフトウェアに添付されているマニュアルのプログラミング例が暗号のような変数名だったのですから・・・
>
> 桐のプログラミング例も同じく、妙に変数名を短くしているケースを見ると思いますが、これはDOS桐の文字数制限の影響でしょうね。
>
> いずれにしても、短い変数名を良しとするのはレガシーです。MS-DOS時代は何かと窮屈だったんですよ。アハハha
>
> かといって長すぎるのも読み下しが大変ですから、程々にしておくのが肝心だと思いますよ。
こちらもありがとうございます。
決行 3文字 のアルファベットが出てくる印象なので、そう言うものなのかなと思ってしまいました。
やっぱり、経緯を知る事は勉強する上で理解度に差が出ると思うので教えて頂いて良かったです!
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14282
/ inTopicNo.17)
Re[7]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ONnoji
-(2024/04/11(Thu) 09:46:45)
2024/04/11(Thu) 11:07:21 編集(投稿者)
> =は等式じゃなく 代入 していると言う事ですもんね。
> 知識が無ければ数学に感じてしまいます・・・(私も 明らかに代入に意味だなと読めない物以外は 数式 だと思っていました・・・)
初級者の最初の挫折がこの部分である人って案外と多いと思いますね。
> ここで一つ疑問があります。
> 今回作成して頂いたプログラムの変数名の中に
> 変数宣言 自動,日時 { &加工日1, &加工日2 }
> があります。
> コメントを頂いた流れで言えば
> &加工日1 → &dom1 (date of manufacture)
> &加工日2 → &dom2
> と言う変数名になった方が自然な印象です。
> 表に定義のある項目名を変数名にする時は、表の言葉に合わせると言う事なのでしょうか??
流れとしては次のようになりますね。
手続き定義開始 cmdテストClick( )
変数宣言 自動,文字列{ &title = "cmdテストClick( )", &msg }
変数宣言 自動,日時 { &加工日1, &加工日2 }
:
:
行訂正 [加工日1] = &加工日1, [加工日2] = &加工日2
:
:
手続き定義終了
ということで、項目[加工日1]に対応する変数が &加工日1 で、項目[加工日2]に対応する変数が &加工日2 という事です。
これを
行訂正 [加工日1] = &dom1, [加工日2] = &dom2
と書いてしまうと、もちろん動きますが・・・(^^ゞ
一番の問題は、後で読み返す際に直感的に分かりにくいんですね。
・・・・・・・・・・・・・・・・・・
行訂正 [加工日1] = &加工日1, [加工日2] = &加工日2
としていれば、一目瞭然です。※最小限の思考で済みますから・・・(^^ゞ
それに項目名と変数名が同じならば、イベント処理を検索する時に都合がいいでしょう。※後々のことを考えましょう。アハハha
添付のテキストには
> 桐のようなデータベースソフトでは、データベースで指定できる[項目のデータ型]と[変数のデータ型]は1対1で対応するものなのです。
> なので、任意のレコード(行)の[項目の【値】]を任意の名前の[変数の【値】]として入れることが出来ます。
という文言があると思います。
変数の最も大事な目的は、データベースの項目の値の一時的な格納先(バッファ)ということです。
そして、もう一つの変数の目的は、プログラムの流れを制御することです。
例えば、変数 &recordNum は、プログラムの流れの選択制御に使われています。
手続き定義開始 prc加工日探索( 参照 日時 &加工日1, 参照 日時 &加工日2 )
変数宣言 自動,文字列{ &title = "prc加工日探索( )", &msg }
変数宣言 自動,長整数{ &recordNum }
:
:
&recordNum = #行番号
ジャンプ 行番号 = &recordNum
if ( &recordNum > 5 )
ジャンプ 行番号 = -5
&加工日1 = [日付]
end
:
:
手続き定義終了
話が戻りますが・・・
> &加工日1 → &dom1 (date of manufacture)
> &加工日2 → &dom2
> と言う変数名になった方が自然な印象です。
&dom1 &dom2 といった短い英語風の変数名は、意味が明瞭ならばOKですが、この場合には好ましくないでしょう。
&dateOfManufacture1 &dateOfManufacture2 の方が全然素直です。
・・・・
ネットをご覧になると、変数名がアルファベット3文字というのが多いと気が付くでしょう。
これも昔のPCのレガシー(遺産)なんですよ。
昔のPCのメモリーが少なかったので、変数名を長くできなかったんですよ。
それと、暗号のような変数を使っていても本人が判れば良しだったり、開発チームで暗号を共有していたりしたのです。
そもそも、ソフトウェアに添付されているマニュアルのプログラミング例が暗号のような変数名だったのですから・・・
桐のプログラミング例も同じく、妙に変数名を短くしているケースを見ると思いますが、これはDOS桐の文字数制限の影響でしょうね。
いずれにしても、短い変数名を良しとするのはレガシーです。MS-DOS時代は何かと窮屈だったんですよ。アハハha
かといって長すぎるのも読み下しが大変ですから、程々にしておくのが肝心だと思いますよ。
> う〜ん。
> プログラムは奥が深いですね(^^ゞ
問題意識を持っていれば大丈夫です。
後は経験を積んで慣れるしかありません。ガーン (*^^)ok
p.s.
私( ONnoji )の場合には、項目名が基本的に漢字なので、対応する変数名も漢字になります。
そして、それ以外の変数名は基本的に英語または英語風です。
・・・・
なお、アルファベットは小文字を基本とします。
ソフトウェアによっては大文字を基本とするものもあります。
例えば、VB/VBAは大文字が基本だったと思います。※歴史的な経緯がありますけれど・・・
しかし、それ以外のソフトウェアでは小文字を基本とするものが多いです。
ちなみに、私( ONnoji )の場合には、キャメルケースを常用しています。
こちら
↓
キャメルケース フリー百科事典『ウィキペディア(Wikipedia)』
https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%A1%E3%83%AB%E3%82%B1%E3%83%BC%E3%82%B9
名称 表記例 備考
ローワーキャメルケース、または単にキャメルケース getInputReader 複合語の先頭を、小文字で書き始める。
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14281
/ inTopicNo.18)
Re[6]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ジェダイの桐
-(2024/04/11(Thu) 08:59:44)
ONnojiさん
> やはり日本語の変数は誤動作の元になることがあるので、日本語は極力使わないようにしていましたよ。
>
> 桐では日本語の変数名でも何の問題はありませんが、これは桐が最初から日本語対応だったからですよ。
>
> Windows が発売されたころのオフィスでも日本語の変数名は忌避されていたと思います。
>
> もちろん、今ではOKでしょうけれど・・・※怖さを知っている人はやはり避けますけどね。アハハha
>
なるほど。
そう言う歴史があるんですね!
そのような歴史(過去は漢字が使えなかった。そもそも日本語を想定していないので、日本語を使うとトラブルが起こる可能性がある。)があると言う前段をしっていれば、すんなり英語が入ってきます。
うにんさん と ONnojiさんのコメントで、よりリアルに知る事が出来ました(^^♪
>>代入しているんだろうな と想像してプログラムを見るより、代入を省略しているけど代入していると確信してプログラムを見る方が理解度が高くなるからです。
>>初心者向けのプログラミングの読み物が完成してHPにアップされた暁には、必ず読ませて頂きます(^^ゞ
>
> だから、数学の等式と勘違いして頭の中が混乱する人が多いんですよ。アハハha。
>
=は等式じゃなく 代入 していると言う事ですもんね。
知識が無ければ数学に感じてしまいます・・・(私も 明らかに代入に意味だなと読めない物以外は 数式 だと思っていました・・・)
>
> #文字列 → #str 意味:string 文字列
>
> #部分列 → #sstr 意味:sub string 部分列
>
> #条件選択 → #cond 意味:条件
>
> #終端行 → #eof 意味:End Of File ファイルの終わり
>
> #文字置換 → #s 意味:stuff の s だと思われます 詰め込む ※アルファベット1文字の関数名は一般的ではありません。
>
> 他にもあると思いますが・・・この辺で(^^ゞ
>
> なお、
>
> #連結 → #cat は 語源として catalog だっと思いますが今ではこの関数を使う人はまず居ないと思います。
>
> なぜならば #cat( [名前], "様" ) は、関数を使わずに [名前] + "様" という式で書けるからです。
>
> 余談ついでに(^^ゞ
>
> #計算 の別名は #PROGN。
> この別名って、プログラミング言語 Common Lisp の progn関数からきているようですね。
> prog1 prog2 というのもあるから、 n は n番め=最後という意味なのでしょうかね。
> そういえば、K3殿は Lisp の開発もしてましたっけ。
> ちなみに、#SETQ も Lisp 由来かもしれない。
>
> #TRIM や #STR など、桐の関数の別名はプログラミング言語でお馴染みのものから来ていますね。
> 私は dBASE言語を使っていたので、桐のコマンド・関数の別名の大部分の見当がすぐに付きました。
> なお、[コマンド]コマンドの別名 eval はエバリュエーション(Evaluation)でしょうね。
> eval をイーバルと読む技術者も多いようですね。
この解説はかなり助かますm(__)m
財産にさせて頂きます!
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
ここで一つ疑問があります。
今回作成して頂いたプログラムの変数名の中に
変数宣言 自動,日時 { &加工日1, &加工日2 }
があります。
コメントを頂いた流れで言えば
&加工日1 → &dom1 (date of manufacture)
&加工日2 → &dom2
と言う変数名になった方が自然な印象です。
表に定義のある項目名を変数名にする時は、表の言葉に合わせると言う事なのでしょうか??
う〜ん。
プログラムは奥が深いですね(^^ゞ
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14280
/ inTopicNo.19)
Re[7]: 加工開始日を求めたい
▲
▼
■
□投稿者/ ONnoji
-(2024/04/10(Wed) 21:56:11)
> WindowsXPだったかなあ、ユーザ名を日本語にすると、何かとトラブルのもとになってました。(インストール時にIMEが使えるので日本語で入れてしまう人が多数いた)
> 最近でも、FileMakerというデータベースソフトで、ファイル名を日本語にするとサーバからダウンロードできなくなるトラブルとかありました。
桐のユーザは恐怖体験が無いんですよね。アハハha
普通のソフトならデータベースのフィールド名だって漢字を使いませんよね。オッカナクッテね(^^ゞ
ファイル名だって、変数名だって、etc. でもこれは元が舶来品のソフトウェアの場合ですね。
引用返信
[メール受信/OFF]
削除キー/
編集
削除
■14279
/ inTopicNo.20)
Re[6]: 加工開始日を求めたい
▲
■
□投稿者/ うにん
-(2024/04/10(Wed) 21:09:31)
> 桐では日本語の変数名でも何の問題はありませんが、これは桐が最初から日本語対応だったからですよ。
>
> Windows が発売されたころのオフィスでも日本語の変数名は忌避されていたと思います。
>
> もちろん、今ではOKでしょうけれど・・・※怖さを知っている人はやはり避けますけどね。アハハha
WindowsXPだったかなあ、ユーザ名を日本語にすると、何かとトラブルのもとになってました。(インストール時にIMEが使えるので日本語で入れてしまう人が多数いた)
最近でも、FileMakerというデータベースソフトで、ファイル名を日本語にするとサーバからダウンロードできなくなるトラブルとかありました。
引用返信
[メール受信/OFF]
削除キー/
編集
削除
このトピックをツリーで一括表示
次の20件>
トピック内ページ移動 / <<
0
|
1
>>
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
ファイル一覧
検索
過去ログ
-
Child Tree
-
-
Antispam Version
-