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

関数は、特定のタスクを実行するコードのブロックです。

15
基本的に組み込み関数の名前を変更する関数を作成することはお勧めできませんか?
特定のコンテキストでは、最小関数と最大関数で混乱します。 1つのコンテキストでは、関数を使用して2つの値のうちの大きい方または小さい方を取る場合、問題はありません。例えば、 //how many autographed CD's can I give out? int howManyAutographs(int CDs, int Cases, int Pens) { //if no pens, then I cannot sign any autographs if (Pens == 0) return 0; //I cannot give away a CD without a case or a case without a CD return min(CDs, …

12
ほとんどのプログラミング言語には、関数を宣言するための特別なキーワードまたは構文があるのはなぜですか?[閉まっている]
ほとんどのプログラミング言語(動的および静的に型付けされた言語の両方)には、関数を宣言するための変数の宣言とは大きく異なる特別なキーワードおよび/または構文があります。関数は別の名前付きエンティティを宣言するのと同じように見えます: たとえば、Pythonの場合: x = 2 y = addOne(x) def addOne(number): return number + 1 何故なの: x = 2 y = addOne(x) addOne = (number) => return number + 1 同様に、Javaのような言語では: int x = 2; int y = addOne(x); int addOne(int x) { return x + 1; } 何故なの: int x …

6
「関数とデータ間の密結合」が悪いのはなぜですか?
この引用は、「Clojureの喜び」のp。32、しかし誰かが先週の夕食で私に同じことを言って、私はそれを他の場所でも聞いた: [A]オブジェクト指向プログラミングの欠点は、関数とデータの間の密結合です。 アプリケーションで不要な結合が悪い理由を理解しています。また、オブジェクト指向プログラミングであっても、可変状態と継承を避けるべきだと言っています。しかし、なぜクラスに関数を貼り付けるのが本質的に悪いのかはわかりません。 つまり、クラスに関数を追加すると、Gmailでメールにタグを付けたり、ファイルをフォルダーに貼り付けたりするように思えます。それはあなたが再びそれを見つけるのを助ける組織的なテクニックです。いくつかの基準を選択してから、同じようなものをまとめます。OOP以前は、プログラムはファイル内のメソッドのかなり大きな袋でした。つまり、関数をどこかに配置する必要があります。整理してみませんか? これが型に対するベール攻撃である場合、関数への入力および出力の型を制限することは間違っていると言うだけではありませんか?それに同意できるかどうかはわかりませんが、少なくともプロとコンタイプの安全性に関する議論には精通しています。これは、ほとんど別の懸念のように思えます。 確かに、時々それを間違え、機能を間違ったクラスに置きます。しかし、他の間違いと比較すると、これは非常に小さな不便さのようです。 そのため、Clojureには名前空間があります。OOPのクラスに関数を貼り付けることは、Clojureの名前空間に関数を貼り付けることとどのように異なりますか?クラスの関数は、必ずしもそのクラスのメンバーだけで動作するとは限らないことを忘れないでください。java.lang.StringBuilderを見てください。これは、すべての参照型で動作するか、オートボクシングを通じて、すべての型で動作します。 PSこの引用は、私が読んだことのない本を参照しています:Multiparadigm Programming in Leda:Timothy Budd、1995。

4
C ++では、仮想関数はなぜそしてどのように遅いのですか?
誰でも詳細に、仮想テーブルが正確にどのように機能するか、仮想関数が呼び出されたときにどのポインターが関連付けられるかを詳細に説明できますか。 実際に遅い場合、仮想関数の実行にかかる時間が通常のクラスメソッドよりも長いことを示すことができますか?いくつかのコードを見なくても、どのように/何が起こっているのかを簡単に見失うことがあります。

10
Today()が不純な関数の例なのはなぜですか?
「純粋関数」に関するこのウィキペディアの記事のようなものを読むToday()と、不純関数の例としてリストされているように見えますが、私にはかなり純粋に見えます。正式な入力引数がないためですか?実際の時刻が「関数への入力」として扱われないのはなぜですか。その場合、同じ入力を与えた場合、つまりtoday()同時に2回実行した場合、または時間をさかのぼって再度実行した場合(仮定: ))、出力は同じ時間になります。Today()あなたに乱数を与えることはありません。常に時刻が表示されます。 ウィキペディアの記事には「異なる時間で異なる結果が得られる」と書かれていますが、それは異なるx sin(x)ことを言うと異なる比率が得られるようなものです。そしてsin(x)、純粋な関数の例です。

1
引数を返す関数の名前?
何もせず、引数を取らず、何も返さない関数は、伝統的にa noopまたはno-op と呼ばれます。noopの例を以下に示します。 function noop(){} http://en.wikipedia.org/wiki/NOP それで、引数を返すだけで、他には何もしない関数を指す名前がありますか?この種の関数の例: function(a){return a}
34 functions 

6
クロージャーは不純な機能スタイルと見なされますか?
関数型プログラミングではクロージャは不純であると考えられますか? 関数に値を直接渡すことで、一般にクロージャを回避できるようです。したがって、可能な限り閉鎖を避けるべきですか? それらが不純であり、避けることができると述べるのが正しい場合、なぜ多くの関数型プログラミング言語がクロージャーをサポートするのですか? 純粋な関数の基準の1つは、「関数は常に同じ引数値を指定すると同じ結果値を評価する」ということです。 仮に f: x -> x + y f(3)常に同じ結果が得られるとは限りません。f(3)のy引数に依存しない値に依存しますf。したがってf、純粋な関数ではありません。 すべてのクロージャーは引数ではない値に依存しているため、クロージャーがどのように純粋になる可能性がありますか?はい、理論的には、閉じた値は一定である可能性がありますが、関数自体のソースコードを見ただけではそれを知る方法はありません。 これが私を導くのは、同じ機能はある状況では純粋であるが、別の状況では不純かもしれないということです。ソースコードを調べても、関数が純粋であるかどうかを常に判断できるわけではありません。むしろ、そのような区別をする前に呼び出される時点で、その環境のコンテキストでそれを考慮する必要があります。 私はこれについて正しく考えていますか?

4
プログラミング言語は関数をどのように定義しますか?
プログラミング言語は、関数/メソッドをどのように定義して保存しますか?Rubyでインタープリター型プログラミング言語を作成しています。関数宣言の実装方法を見つけようとしています。 私の最初のアイデアは、宣言の内容をマップに保存することです。たとえば、次のようなことをした場合 def a() { callSomething(); x += 5; } 次に、マップにエントリを追加します。 { 'a' => 'callSomething(); x += 5;' } これの問題はparse、文字列に対してメソッドを呼び出す必要があるため再帰的になり、parse遭遇したときに再度呼び出す必要がありdoSomething、最終的にスタックスペースが不足することです。 では、インタープリター言語はこれをどのように処理しますか?

4
関数ではなく変数としての関数宣言
関数が次のように宣言されるのをますます見ています var foo = function() { // things }; 私が学んだ方法の代わりに function foo() { // things } 違いは何ですか?よりよい性能?範囲?この方法を使用する必要がありますか?

6
メソッド抽出と基礎となる仮定
大きなメソッド(またはプロシージャ、または関数—この質問は OOPに固有のものではありませんが、私は99%の時間でOOP言語で作業しているため、私が最も使いやすい用語です) 、結果に不満を感じることがよくあります。これらの小さなメソッドについては、大きなメソッドの単なるコードブロックである場合よりも推論するのが難しくなります。なぜなら、それらを抽出すると、呼び出し元のコンテキストに由来する多くの基本的な前提が失われるためです。 後で、このコードを見て個々のメソッドを見ると、それらがどこから呼び出されているかすぐにはわかりません。ファイル内のどこからでも呼び出すことができる通常のプライベートメソッドと考えています。たとえば、初期化メソッド(コンストラクターなど)を一連の小さなメソッドに分割することを想像してください:メソッド自体のコンテキストでは、オブジェクトの状態がまだ無効であることを明確に知っていますが、通常のプライベートメソッドでは、おそらくはすでに初期化されており、有効な状態です。 これについて私が見た唯一の解決策は、whereHaskell の句です。これにより、「親」関数でのみ使用される小さな関数を定義できます。基本的には次のようになります。 len x y = sqrt $ (sq x) + (sq y) where sq a = a * a しかし、私が使用する他の言語にはこのようなものはありません。最も近いのは、ローカルスコープでラムダを定義することです。 だから、私の質問は-あなたはこれに遭遇しますか、そしてあなたはこれが問題であることを見ますか?そうした場合、特にJava / C#/ C ++などの「メインストリーム」OOP言語では、通常どのように解決しますか? 重複についての編集:他の人が気づいたように、分割方法を議論する質問とワンライナーである小さな質問が既にあります。私はそれらを読みましたが、呼び出し元のコンテキスト(上記の例では、オブジェクトが初期化されている)から派生する可能性のある基本的な前提の問題については説明していません。それが私の質問のポイントであり、それが私の質問が異なる理由です。 更新:この質問と議論を下で行った場合、特にこの問題に関するJohn Carmackの記事をお楽しみください。 実行されている実際のコードを認識することに加えて、インライン関数には、他の場所から関数を呼び出せないという利点もあります。それはばかげているように聞こえますが、それにはポイントがあります。コードベースが長年の使用で成長するにつれて、ショートカットを使用して、実行する必要があると思われる作業のみを実行する関数を呼び出す機会が多くなります。PartialUpdateA()およびPartialUpdateB()を呼び出すFullUpdate()関数があるかもしれませんが、特定のケースでは、PartialUpdateB()を実行するだけでよいことに気付く(または考える)可能性があり、他を避けることで効率的です作業。これには多くのバグがたくさんあります。ほとんどのバグは、実行状態があなたが思っているとおりではないという結果です。

2
JavaScriptで他の関数への引数として大きな匿名関数を渡すのはなぜそんなに広く受け入れられているのですか?
私が持っている意見、他の関数に引数として数行のコードよりも多く含まれている無名関数を渡すと、私はそれが希望を感じる点まで、大幅に読みやすさと自己のドキュメントに影響を与えることを(私は必ずいくつかによって共有されることになるのです)名前付き関数を宣言するためにコードを使用する可能性が高い人にとってははるかに優れています。または、少なくともメイン関数を宣言する前に、その匿名関数を変数に割り当てます ただし、多くのJavaScriptライブラリ(jQuery、d3.js / NVD3.js)では、いくつかの例を示しただけで、このように大きな関数を使用しています。 これがなぜJavaScriptでこれほど広く受け入れられているのですか?それは文化的なものですか、名前付き関数を宣言するよりも使用する方が好ましいと思われる利点がありますか?

6
Swift関数と計算されたプロパティ
Event次のようなクラスがあるとします: class Event { private var attendees: [Person] = [] // Case 1 //******* // Should I use a func… func countOfAttendees() -> Int { return attendees.count } // …or a var var countOfAttendees: Int { return attendees.count } // Case 2 //******* // Should I use a func… func …

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); …

2
同じことをする異なる関数シグネチャを提供することは良い考えですか?
以下は、3つの値で構成されるC ++クラスです。 class Foo{ //Constructor Foo(std::string, int, char); private: std::string foo; char bar; int baz; }; すべてのパラメータータイプは異なります。 順序が問題にならないように、コンストラクタをオーバーロードできます。 class Foo{ //Constructors Foo(std::string, char, int); Foo(std::string, int, char); Foo(char, int, std::string); Foo(char, std::string, int); Foo(int, std::string, char); Foo(int, char, std::string); private: std::string foo; char bar; int baz; }; しかし、それは良い考えですか? クラス/関数に必要なものがわかっていたので、それを始めました。 私はそれがそれらをどの順序で取ったかをいつも覚えていませんでした。 …

5
成功するとtrue / false vs voidを返し、失敗すると例外をスローする関数
ファイルをアップロードする関数であるAPIを作成しています。ファイルが正しくアップロードされた場合、この関数は何も/ voidを返さず、何らかの問題が発生したときに例外をスローします。 なぜ偽りではなく例外なのか?例外の内部で、失敗の理由(接続なし、ファイル名の欠落、パスワードの誤り、ファイルの説明の欠落など)を指定できるためです。カスタム例外を作成したかった(APIユーザーがすべてのエラーを処理するのに役立つ列挙型を使用)。 これは良い習慣ですか、それともオブジェクトを返す方が良いですか(内部にブール値、オプションのエラーメッセージ、エラーの列挙を含む)?

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