入力/出力引数について気が散る

むかしむかし、まだPascalでプログラミングすることを学んでいたとき、私は研究室で自分の機能の1つをやり直さなければなりませんでした-数字だけでなく、結果に数字と文字列を返す必要がありました。 その結果、入力パラメーターに対して行われたように、結果として多くの変数を返すことが可能になるとすればいいと思いました。 私は考え、ため息をつき、呼び出し関数に一度に2つのパラメーターを戻すための構造を作成し始めました。



次回、入力引数について考えたときに、C / C ++でコマンドラインオプションを解析する必要性に最初に遭遇したとき。 さて、この古典を覚えておいてください:


int main(int argc, char* argv[]) 

関数の入力パラメーターは2つだけですが、CLIプログラムパラメーターのすべての可能な組み合わせが含まれています。 はい、私は解析の複雑さで呼び出しの汎用性にお金を払わなければなりませんでしたが、根本的に異なって問題を解決するオプションはありません。


次に、Promiseを分析するときに入力/出力引数について考える必要がありました。


 get('story').then(fnSuccess1).then(fnSuccess2). ... .catch(fnError); 

Promiseのチェーンでは、1つの関数の出力パラメーターが別の関数(最初の引数)によって入力に転送され、さらに変更されて、さらに渡されます...そのようなパイプラインでは、1つの出力引数-1つの入力引数がユニバーサル化が重要であることが判明しました。


もっともっと。 JavaScriptには関数のオーバーロードがないため、このコードはホバーしません:


 function sayHi() { for (var i = 0; i < arguments.length; i++) { alert( ", " + arguments[i] ); } } sayHi("", ""); // ', ', ', ' 

Javaの愛人との長い会話の後、このようなコードは、戦闘任務の特殊部隊将校の隣にある石造りのヒッピー60年代のように見えます -「 この関数には引数がありませんか? sod、そしてどれだけそこに着いても、あなたはすべてを見るでしょう 。」


さらに、JavaScriptにはapplyのような関数があります


 fun.apply(thisArg[, argsArray]) 

その目的は、指定された引数を使用して、指定されたコンテキストで関数を適用することです。 ここでも、関数自体(またはその作成者)が期待する入力引数の数を誰も気にしません。


私のPHPのプラクティスでは、外部モジュールで、ベースメソッドをオーバーロードするときに、2つの引数が入れ替わる場合がありました(8番目と演算子、または9番目と10番目でも構いません)。


 public function doGood($a, $b, $c, $d, $e, $f, $g, %h, $i, $j) {} 

 public function doGood($a, $b, $c, $d, $e, $f, $g, %h, $j, $i) { parent::doGood($a, $b, $c, $d, $e, $f, $g, %h, $i, $j); } 

単純な場合、それらの値は等しく、したがって、「用語の用語を変更しても合計は変化しませんでした」、私はより複雑な構成を持っていたので、バグから抜け出しました(むしろ、長い間デバッガーでそれを取り除きました)。 デバッグダイブの後、私はどういうわけかより暖かくなりました。


 func(opts) 

または


 Response resp = service.call(req); 

ちなみに、私の最後のデザインは、 緊縛 BPMS- intalioをWebアプリケーションにバインドするという興味深い体験でした。 各プロセスは、「y = f(x)」スキームに従ってWebサービスによって実装された個別の操作で構成されていました。他のサービスのxの要素に対する 1つのサービスのゲーマー


おそらくそれが、私の現在のプラクティス(PHP)で、関数のいくつかのグループをスキーム "y = f(x)"に還元しようとした理由です。 JavaScriptでは、これは簡単で楽しいものです。


だった


 function showWarning(width, height, title, contents) { var width = width || 200; //    width,  width = 200 var height = height || 100; //   height,  height = 100 var title = title || ""; var contents = contents || " ."; //... } 

次のようになりました:


 function showWarning(opts) { var opts = opts || {}; //     var width = opts.width || 200; //    width,  width = 200 var height = opts.height || 100; //   height,  height = 100 var title = opts.title || ""; var contents = opts.contents|| " ."; //... } 

PHPでは、個別のクラスで入力/出力引数の構造を設計することにより支払いを行う必要があります。 たいていは退屈ですが、時には楽しいこともあります。


なぜ私はこれすべてですか? また、単一の「 y 」の代わりに多くのパラメータを返すのは良いとは思わないという事実に、入力に「 x 」が1つだけあればよいのではないかと考えています。



Source: https://habr.com/ru/post/J321862/


All Articles