タグ付けされた質問 「parameters」

パラメータは、一般的でデータ駆動型にするために、重要なプログラムにとって重要です。パラメータは通常関数の引数ですが、構成の一部にすることもできます。

10
コールチェーンのいくつかのレベルでのみ使用される(パラメータを渡す)パターンの名前はありますか?
私はいくつかのレガシーコードでグローバル変数を使用する代替案を見つけようとしていました。しかし、この質問は技術的な選択肢に関するものではなく、私は主に用語について心配しています。 明らかな解決策は、グローバルを使用する代わりに関数にパラメーターを渡すことです。このレガシーコードベースでは、値が最終的に使用されるポイントと最初にパラメーターを受け取る関数の間で、長い呼び出しチェーン内のすべての関数を変更する必要があることを意味します。 higherlevel(newParam)->level1(newParam)->level2(newParam)->level3(newParam) どこnewParam私の例では、グローバル変数以前だったが、それは代わりに、以前にハードコード値だったかもしれません。ポイントは、newParamの値がで取得されhigherlevel()、で「移動」する必要があることlevel3()です。 値を変更せずに「渡す」多くの関数にパラメータを追加する必要があるこのような状況/パターンの名前があるかどうか疑問に思っていました。 うまくいけば、適切な用語を使用することで、再設計のソリューションに関するリソースをさらに見つけ、同僚にこの状況を説明できるようになります。

5
コマンドライン引数を設計するための良い習慣は何ですか?
アプリケーションの開発中、私は疑問に思い始めました-コマンドライン引数をどのように設計する必要がありますか? プログラムの多くは、このように式を使用しています-argument valueか/argument value。私の頭に浮かんだ解決策はargument:value。空白がないと、値と引数を台無しにする方法がないので、良いと思いました。また、左の:文字から最初の文字列を2つに分割するのは簡単です。 私の質問は: 人気のある-argument value式はargument:value、より読みやすく、書きやすく、バグがなく、専門の開発者が理解しやすいですか? コマンドライン引数を設計する際に従うべき一般的に知られているいくつかのルールはありますか(動作する場合は問題ありません)? 詳細を尋ねられたので提供します。ただし、回答に影響を与えるべきではないと思います。質問は一般的に良い習慣についてです。それらはすべての種類のアプリケーションで同じだと思います。 私たちは、公共の場所(タッチトーテム、テーブル)で使用されるアプリケーションに取り組んでいます。アプリケーションは、Qt Quick 5(C ++、QML、JS)を使用して記述されています。デバイスにはWindows 8.1 / 10がインストールされます。デバイスを管理するためのフロントエンドインターフェイスを提供します。ただし、一部の上級管理者は、自分でアプリケーションを構成することができます。ビジネスの観点からはそれほど重要ではありませんが、Kilian Fothが言ったことに同意するように、自分のアプリケーションがユーザーの苦痛になりたくないのです。私がここで尋ねたものをインターネットで見つけられない。 より高度なStack Exchangeユーザーへ:この質問を一般的なものにしたかった。コミュニティWikiに該当する可能性があります(既存の質問を回答で変換できるかどうかはわかりません)。この質問をオペレーティングシステムとプログラミング言語に依存しないようにしたいので、ここに表示される答えは他の開発者にとって貴重な教訓になります。
190 design  parameters  cli 

11
関数が受け入れるパラメータの数に関するガイドラインはありますか?
私が使用しているいくつかの関数には6つ以上のパラメータがあることに気づきましたが、私が使用するほとんどのライブラリでは、3つ以上かかる関数を見つけることはまれです。 多くの場合、これらの追加パラメーターの多くは、関数の動作を変更するためのバイナリオプションです。これらの無数のパラメーター化された関数のいくつかはおそらくリファクタリングされるべきだと思います。数が多すぎる場合のガイドラインはありますか?

14
関数内のパラメーターの順序に関するベストプラクティスは何ですか?
時々(まれに)、適切な量のパラメーターをとる関数を作成することが最適なルートであると思われます。しかし、そうすると、パラメーターの順序をランダムに選択することが多いように感じます。私は通常、最も重要なパラメーターを最初に使用して、「重要度の順に」進みます。 これを行うためのより良い方法はありますか?明確性を高めるパラメーターを並べる「ベストプラクティス」の方法はありますか?

10
パラメーターとしてのカスタムオブジェクトを避ける必要がありますか?
Studentというカスタムオブジェクトがあるとします。 public class Student{ public int _id; public String name; public int age; public float score; } そして、生徒の情報を表示するために使用されるクラスWindow: public class Window{ public void showInfo(Student student); } 正常に見えますが、Windowを個別にテストするのは簡単ではありません。関数を呼び出すには、実際のStudentオブジェクトが必要だからです。そこで、Studentオブジェクトを直接受け入れないようにshowInfoを変更しようとしています。 public void showInfo(int _id, String name, int age, float score); ウィンドウを個別にテストする方が簡単です: showInfo(123, "abc", 45, 6.7); しかし、修正版には別の問題があることがわかりました。 生徒の変更(例:新しいプロパティの追加)には、showInfoのメソッド署名を変更する必要があります Studentに多くのプロパティがある場合、Studentのメソッド署名は非常に長くなります。 それでは、カスタムオブジェクトをパラメーターとして使用するか、オブジェクトの各プロパティをパラメーターとして受け入れますか?

7
型名と大文字と小文字が異なるだけのパラメーター名を使用しているのは、C#の悪い習慣と見なされていますか?
クラスのプロパティに一致するパラメーター名に関して、これに似た質問が表示されますが、C#の大文字と小文字を除いて、パラメータータイプ名と同じパラメーター名の使用に関しては何も見つかりません。それは私が見つけることができる違反ではないようですが、それは悪い習慣と見なされますか?たとえば、次の方法があります public Range PadRange(Range range) {} このメソッドは範囲を取り、パディングが適用された新しい範囲を返します。したがって、一般的なコンテキストを考えると、パラメーターのよりわかりやすい名前を考えることはできません。しかし、「心理的距離」についてのCode Completeを読んだときに拾ったヒントを思い出します。それは言います 心理的距離は、2つの項目を区別できる容易さとして定義できます...デバッグするとき、類似する変数名間および類似するルーチン名間の心理的距離が不十分であることに起因する問題に備えてください。コードを作成するときに、問題を回避できるように、大きな違いのある名前を選択してください。 私のメソッドシグネチャには多くの「範囲」が続いているため、この心理的な距離に関して問題があるように感じます。今、私は多くの開発者が次のことをしているのを見ます public Range PadRange(Range myRange) {} 私は個人的にこの大会に強い嫌悪感を持っています。変数名に「my」プレフィックスを追加しても、追加のコンテキストは提供されません。 私はまた次を見る public Range PadRange(Range rangeToPad) {} 「私の」プレフィックスよりもこれが好きですが、それでも全体的には気にしません。私には過度に冗長で、変数名としてぎこちなく読みます。私には、メソッド名のために範囲がパディングされることが理解されています。 このようにすべてをレイアウトしたら、私の最初は最初の署名を使用することです。私には、きれいです。不要なときにコンテキストを強制する必要はありません。しかし、私は自分自身または将来の開発者にこの慣習を傷つけていますか?ベストプラクティスに違反していますか?

9
メソッドで空のコレクションを受け入れる必要がありますか?
メソッドのパラメーターを反復処理するforeachループ内ですべてのロジックが実行されるメソッドがあります。 public IEnumerable<TransformedNode> TransformNodes(IEnumerable<Node> nodes) { foreach(var node in nodes) { // yadda yadda yadda yield return transformedNode; } } この場合、空のコレクションを送信すると空のコレクションになりますが、それは賢明ではないのでしょうか。 ここでの私のロジックは、誰かがこのメソッドを呼び出している場合、データを渡すことを意図し、誤った状況でのみ空のコレクションをメソッドに渡すことです。 この動作をキャッチして例外をスローする必要がありますか、空のコレクションを返すのがベストプラクティスですか?

13
ブール値パラメーターを使用して値を決定するのは間違っていますか?
動作を決定するためにブール値パラメーターを使用するのは間違っていますか?、ブールパラメータを使用して動作を決定することを避けることの重要性を知っています。たとえば: 元のバージョン public void setState(boolean flag){ if(flag){ a(); }else{ b(); } c(); } 新しいバージョン: public void setStateTrue(){ a(); c(); } public void setStateFalse(){ b(); c(); } しかし、動作の代わりにブール値パラメーターを使用して値を決定する場合はどうでしょうか?例えば: public void setHint(boolean isHintOn){ this.layer1.visible=isHintOn; this.layer2.visible=!isHintOn; this.layer3.visible=isHintOn; } 私はisHintOnフラグを削除し、2つの別個の関数を作成しようとしています。 public void setHintOn(){ this.layer1.visible=true; this.layer2.visible=false; this.layer3.visible=true; } public void setHintOff(){ this.layer1.visible=false; this.layer2.visible=true; this.layer3.visible=false; } …

2
無制限の量のパラメーターを取るメソッドが、より少ないパラメーターでオーバーロードを定義することが多いのはなぜですか?
たとえばSystem.IO.Path.Combine、.NET のメソッドには次のオーバーロードがあります。 Combine(params String[]) Combine(String, String) Combine(String, String, String) Combine(String, String, String, String) 最後の3つのポイントは何ですか? 最初のものはそれらをすべてカバーしますが、よく見るとparamsキーワードを使用しています。Combine(String, String).NET 4までの唯一のバージョンであったため、下位互換性の議論はバリアントのみを対象としています。

9
タスクを実行し、ステータスとしてブール値を返すメソッドの名前を付ける方法は?
方法がある場合 bool DoStuff() { try { // doing stuff... return true; } catch (SomeSpecificException ex) { return false; } } むしろ呼ばれるべきIsStuffDone()ですか? ユーザーは両方の名前を誤って解釈する可能性があります。名前がDoStuff()理由である場合、ブール値を返しますか?名前がIsStuffDone()メソッドの場合、メソッドがタスクを実行するのか、結果のみをチェックするのかは明確ではありません。 この場合の規則はありますか?または、これは欠陥と見なされるため、代替アプローチですか?たとえば、C#などの出力パラメーターを持つ言語では、ブールステータス変数を1つとしてメソッドに渡すことができ、メソッドの戻り値の型はになりますvoid。 編集:私の特定の問題では、メソッドはインターフェイス実装の一部であるため、例外処理を呼び出し元に直接委任することはできません。したがって、呼び出し側は、異なる実装のすべての例外を処理することはできません。これらの例外に精通していません。ただし、呼び出し元はStuffHasNotBeenDoneForSomeReasonException、npintiのanswerおよびcommentで提案されたようなカスタム例外を処理できます。

3
オプションのパラメーターまたはオーバーロードされたコンストラクター
を実装しDelegateCommandていますが、コンストラクターを実装しようとしていたときに、次の2つの設計の選択肢を思いつきました。 1:複数のオーバーロードされたコンストラクターを持つ public DelegateCommand(Action<T> execute) : this(execute, null) { } public DelegateCommand(Action<T> execute, Func<T, bool> canExecute) { this.execute = execute; this.canExecute = canExecute; } 2:オプションのパラメーターを持つコンストラクターを1つだけ持つ public DelegateCommand(Action<T> execute, Func<T, bool> canExecute = null) { this.execute = execute; this.canExecute = canExecute; } どちらを使用するかわからないのは、提案された2つの方法のいずれかにどのような利点/欠点があるかわからないからです。両方とも次のように呼び出すことができます: var command = new DelegateCommand(this.myExecute); var command2 = …

3
関数パラメーターに注釈を付けないのはなぜですか?
この質問に答えられるようにするために、プログラマの心の中にある曖昧さのコストは、いくつかの余分なキーストロークよりもはるかに高価であると仮定しましょう。 それを考えると、なぜ私のチームメイトが機能パラメーターに注釈を付けないで逃げることができるのですか?はるかに複雑なコードの例として、次のコードをご覧ください。 let foo x y = x + y これで、ツールチップを簡単に調べると、F#がxとyがintを意味すると判断したことがわかります。それがあなたが意図したものであるなら、すべては順調です。しかし、それがあなたが意図したものかどうかはわかりません。2つの文字列を連結するためにこのコードを作成した場合はどうなりますか?または、ダブルスを追加するつもりだったと思う場合はどうなりますか?または、すべての単一の関数パラメーターの上にマウスを置いてそのタイプを決定する必要がない場合はどうなりますか? これを例として見てみましょう。 let foo x y = "result: " + x + y F#では、おそらく文字列を連結することを想定しているため、xとyは文字列として定義されます。ただし、コードを保守している貧弱なシュマックとして、私はこれを見て、xとy(int)を一緒に追加し、UI目的のために文字列に結果を追加するつもりだったのではないかと思うかもしれません。 確かにこのような単純な例では手放すことができますが、明示的な型注釈のポリシーを強制しないのはなぜですか? let foo (x:string) (y:string) = "result: " + x + y 明確であることにはどのような害がありますか?確かに、プログラマーは自分がやろうとしていることに対して間違ったタイプを選択する可能性がありますが、少なくとも私は彼らがそれを意図していたことを知っています。 これは深刻な質問です...私はまだF#が初めてであり、会社の道を切り開いています。私が採用する標準は、今後のF#コーディングの基礎となり、今後数年間、文化に浸透していくと確信している無限のコピーペーストに組み込まれます。 それで... F#の型推論に特別な何かがあり、それを保持する価値のある機能にし、必要な場合にのみ注釈を付けますか?または、専門のF#-ersは、自明ではないアプリケーションのパラメーターに注釈を付ける習慣をつけていますか?
28 f#  parameters 

7
必須ではありませんが、オプションのパラメーター名を指定しますか?
次の方法を検討してください。 public List<Guid> ReturnEmployeeIds(bool includeManagement = false) { } そして、次の呼び出し: var ids = ReturnEmployeeIds(true); システムを初めて使用する開発者にとって、何trueが起こったのかを推測するのはかなり難しいでしょう。最初にやるべきことは、メソッド名にカーソルを合わせるか、定義に移動することです(どちらも少しでも大きなタスクではありません)。しかし、読みやすくするために、次のように書くのは理にかなっています。 var ids = ReturnEmployeeIds(includeManagement: true); コンパイラが必要としないときにオプションのパラメータを明示的に指定するかどうかを正式に議論している場所はどこにありますか? 次の記事では、特定のコーディング規則について説明しています。https://msdn.microsoft.com/en-gb/library/ff926074.aspx 上記の記事に似た何かが素晴らしいでしょう。

5
関数呼び出しの複数の引数と単一の配列
パラメーターのセットを受け取り、SQLクエリの条件としてそれらに適用する関数があります。ただし、条件自体を含む単一の引数配列を優先しましたが: function searchQuery($params = array()) { foreach($params as $param => $value) { switch ($param) { case 'name': $query->where('name', $value); break; case 'phone': $query->join('phone'); $query->where('phone', $value); break; } } } 私の同僚は、代わりにすべての引数を明示的にリストすることを好みました。 function searchQuery($name = '', $phone = '') { if ($name) { $query->where('name', $value); } if ($phone) { $query->join('phone'); $query->where('phone', $value); …

6
渡された引数を使用してメソッドを許可する必要がありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 foo(String bar)特定の条件を満たす文字列に対してのみ動作するメソッドがあるとします。たとえば、小文字である必要があり、空または空白のみでなく、パターンに一致する必要があります[a-z0-9-_./@]+。メソッドのドキュメントには、これらの基準が記載されています。 メソッドはこの基準からのすべての逸脱を拒否する必要がありますか、それともメソッドはいくつかの基準についてより寛容である必要がありますか?たとえば、初期メソッドが public void foo(String bar) { if (bar == null) { throw new IllegalArgumentException("bar must not be null"); } if (!bar.matches(BAR_PATTERN_STRING)) { throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING); } this.bar = bar; } そして2番目の寛容な方法は public void foo(String bar) { if (bar == …
21 java  parameters 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.