多すぎる関数の引数を少なくするには?


hiro  2013-06-27 03:22:38  No: 44751

Delphi2010を使用しています。(クラスは使いません)

関数の引数が20個を超えてしまい、ネット(URLは忘れてしまいました・・・)で調べた対処法を試しています。
①  プログラム全体の出力用レコードを一つ作成
②  ①のメンバから関数ごとに関数用レコードを作成(メンバは全てポインタにする)
    ※異なる関数用レコードでも、出力用レコードの同じメンバが含まれる可能性がある
③  ②の関数用レコードのメンバを、出力用レコードの同じメンバのアドレスに参照させる

これで
→  関数の引数が全て一つ
→  さらに、関数内で関数用レコードのあるメンバの値が変わったときに、
    出力用レコードや他の関数用の同じメンバも同じ値になる。(整合性?がとれる)
という事かと思いました。

試してみましたが、予め関数用レコードの全てのメンバに対して参照先を指定する必要があり、
動的配列の場合にはさらに要素数も決めておかないとエラーになるなど、少し不便な感じがしました。

私の解釈が間違っているので面倒なことになるのかも知れませんが、
関数の引数を少なくする場合、他に何か良い方法がありましたら教えて頂けないでしょうか?


take  2013-06-27 22:25:57  No: 44752

うーん。1行目から良い方法を否定されているようですが
自分でしたら「クラス」を使用します。

関数のクラス化をしなくても引数をクラス化して
やりとりすればプログラム効率も上がります。

もちろんレコード型で簡単に済ませることもできます。

>予め関数用レコードの全てのメンバに対して参照先を指定する必要があり、
参照先を指定するということは関数内で引数の値を書き換えたいということでしょうか?
であれば、戻り値もレコード型にすればいのでは?

>動的配列の場合にはさらに要素数も決めておかないとエラーになるなど、少し不便な感じがしました。
要素数は固定しなくても動的配列として引数のやりとりは可能です。

そのための「Length」関数なのですが・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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