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

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


8
別の関数のみを呼び出すパラメーターなしの関数の利点は何ですか
私がやっているチュートリアル(Javascript用)では、次のような関数を作成することをお勧めします。 function sayHello() { //Some comments explaining the next line window.alert("Hello"); } 難読化以外に、実際の生活でこのようなものを書くことには利点がありますか?もしそうなら、利点は何ですか?

1
Cライブラリが同じ名前のマクロと関数を使用するのはなぜですか?
PJ Plaugerの「The Standard C Library」を読んでいますが、これは本当に興味深いです。この本では、ライブラリの使用方法だけでなく、ライブラリの実装方法についても説明しています。 ctype.hセクションを読み終え、ヘッダーで関数がマクロと関数の両方として宣言されています。例えば int isdigit(int); だけでなく #define isdigit(c) (_Ctype[(int)(c)] & _DI) 両方が使用される理由がわかりませんか? また、独自のカスタムを再作成しようとすると ctypeヘッダーと実装とすると、マクロを削除する(定義をコメントアウトする)場合にのみ正常にコンパイルできます。 この側面は本で実際に説明されていませんでした。誰か説明してもらえますか?
20 c  naming  functions  macros 

1
Scala関数をJava 8メソッドに渡す
次のScalaコードは機能し、関数を必要とするJavaメソッドに渡すことができます。これを行うよりクリーンな方法はありますか?これが私の最初のパスです。 val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } 2番目のパスは次のとおりです。Java-8Functionインターフェイスの汎用ラッパーを使用して、Scalaの構文を簡素化します。 // Note: Function1 is Scala's functional interface, // Function (without …

7
関数ごとに最適なコード行数はありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 関数は、コードの重複を最小限に抑えるためだけに使用されるわけではありません。長い関数をより小さな関数に分割して読みやすさを高め、コードを自己コメント化するためにも使用されます。ただし、このゲインは、関数またはメソッドごとのLOC数に直接反比例するわけではありません。それ以外の場合は、1行または2行のコードのみが含まれる多数の関数があります。 これにより、機能ごとに最適な数のLOCが存在するかどうか疑問に思います。もしそうなら、それは何であり、言語間で逸脱していますか?
18 functions 

5
なぜPHP関数のシグニチャーはそれほど矛盾していますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私はいくつかのPHP関数を試していましたが、次のことに気づかずにはいられませんでした。 <?php function foo(&$var) { } foo($a); // $a is "created" and assigned to null $b = array(); foo($b['b']); var_dump(array_key_exists('b', $b)); // bool(true) $c = new StdClass; foo($c->d); var_dump(property_exists($c, 'd')); // bool(true) ?> array_key_exists()and property_exists()関数に注目してください。最初のものでは、プロパティ名(配列のキー)が最初のパラメーターであり、2番目のものでは2番目のパラメーターです。直観的には、彼らは同様の署名を持っていることを期待するでしょう。これは混乱を招く可能性があり、このタイプの修正を行うと開発時間が無駄になる可能性があります。 PHPやそのような言語は、関連する関数の署名の一貫性を考慮すべきではありませんか?
17 php  naming  functions 

2
C ++メソッドを、ポインター引数を持つC関数に変換することは受け入れ可能なパターンですか?
ESP-32でC ++を使用しています。タイマーを登録するとき、私はこれをしなければなりません: timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback); timer_args.arg = this; ここでタイマーが呼び出しますsoundCallback。 タスクを登録するときも同じこと: xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle); そのため、メソッドは個別のタスクで開始されます。 GCCは常にこれらの変換について警告しますが、計画どおりに機能します。 量産コードでは受け入れられますか?これを行うためのより良い方法はありますか?
16 c++  c  functions 

4
JavaScriptの関数の謎を解決できません
私は、Javascriptのカーテンシーンの背後にあるものを理解しようとしています。組み込みオブジェクト、特にオブジェクトと関数、およびそれらの間の関係の作成を理解することに固執しています。 Array、Stringなどのすべての組み込みオブジェクトがObjectの拡張(継承)であると読んだとき、Objectは作成された最初の組み込みオブジェクトであり、残りのオブジェクトはそれを継承すると仮定しました。しかし、オブジェクトは関数によってのみ作成できることを知ったとき、それは意味がありませんが、関数も関数のオブジェクトにすぎません。鶏と鶏のジレンマのように聞こえ始めました。 他の非常に紛らわしいことは、console.log(Function.prototype)関数を印刷console.log(Object.prototype)するのに、印刷するときにオブジェクトを印刷する場合です。Function.prototype関数がオブジェクトであることが意図されていたのになぜですか? また、Mozillaのドキュメントによれば、すべてのjavascript functionはFunctionオブジェクトの拡張ですが、あなたconsole.log(Function.prototype.constructor)が再び関数である場合はそうです。では、何かを使用して自分自身を作成するにはどうすればよいでしょう(Mind = blown)。 最後にFunction.prototype、関数ですが、doesをconstructor使用Function.prototype.constructorして関数にアクセスできます。つまりFunction.prototype、prototypeオブジェクトを返す関数です

6
関数に渡される引数の量を制限することに基づく言語
このアイデアは、+、-、%などのファクト演算子に触発されており、1つまたは2つの引数が渡され、副作用がない関数と見なすことができます。私または他の誰かが、3つ以上の引数の受け渡しを停止し、戻り値を介してのみ機能する言語を作成すると仮定します。 a)そのような言語はコードを理解しやすくするでしょうか? b)コードの流れはより明確になりますか?(より多くのステップを強制し、潜在的に少ない対話を「非表示」にします c)制限により、より複雑なプログラムでは言語が非常に大きくなりますか? d)(ボーナス)賛否両論に関するその他のコメント 注意: 2つの決定を行う必要があります。1つ目は、main()または同等の外部でのユーザー入力を許可するかどうか、および配列/構造体を渡すときに何が起こるかについてのルールです。たとえば、1つの関数で複数の値を追加したい場合、その関数を配列にまとめることで制限を回避できます。これは、配列または構造体がそれ自体と対話することを許可しないことで停止できます。これにより、たとえば、各数値をその位置に応じて異なる量で除算できます。

8
機能と機能[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 多くの場合、PM(プロジェクトマネージャー)が機能について話すと聞きます。そして、私はそれらを区別するためにとても困惑しています。機能がユーザーストーリーに相当すると考えることもあります。「ユーザーとして、ボブは自分の支払いのリストを見ることができるはずです」などのように、彼らはそれを機能と呼びます。「Webアプリケーション経由でSMSを送信する機能」など、サブシステムと同じくらい大きくなる場合があります。一方、関数は「数字入力用の数字のグループ化を実装する」タスクと同じくらい小さくなりますが、CRUD操作全体と同じくらい大きくなる場合があります。 私の質問は、どのように機能と機能を区別することができますか?

5
小さな機能と同じ機能で依存する機能を維持する
ノードの配列を設定し、それらをグラフのような構造で互いに接続するクラスがあります。次のことが最善ですか: 1つの機能でノードを初期化および接続する機能を保持します 2つの異なる関数で初期化および接続機能を使用します(これらの関数はプライベートであることに注意してください)。 方法1:(1つの関数が2つのことを行っている点が悪いが、依存する機能をグループ化したままにしている-最初に初期化されない限り、ノードを接続しないでください。) init() { setupNodes() } private func setupNodes() { // 1. Create array of nodes // 2. Go through array, connecting each node to its neighbors // according to some predefined constants } 方法2:(自己文書化という意味では、ただし、connectNodes()をsetupNodes()の前に呼び出さないでください。したがって、クラス内部で作業する人はこの順序を知る必要があります。) init() { setupNodes() } private func setupNodes() { createNodes() connectNodes() } private func …

5
定義がソースコードの最後に記述されているときに、C言語でデータと関数の*宣言*が必要なのはなぜですか?
次の「C」コードを検討してください。 #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()はソースコードの最後に定義され、で使用する前に宣言は提供されませんmain()。コンパイラがFunc_i()入っmain()てきたまさにその時に、それは出てきてmain()見つけ出しFunc_i()ます。コンパイラは、どういうわけかによって返された値を見つけ、Func_i()それをに渡しprintf()ます。また、コンパイラはの戻り値の型を見つけることができないことも知っていますFunc_i()。それは、デフォルトでは、(guesses?)の戻り値の型を取りFunc_i()ますint。つまり、コードにfloat Func_i()エラーがあった場合、コンパイラは次のエラーを出しFunc_i()ます。 上記の議論から、次のことがわかります。 コンパイラは、によって返された値を見つけることができますFunc_i()。 コンパイラがFunc_i()出てmain()きてソースコードを検索することによって返された値を見つけることができる場合、明示的に言及されているFunc_i()のタイプを見つけることができないのはなぜですか。 コンパイラFunc_i()は、それがfloat型であることを認識している必要があります。そのため、競合する型のエラーが発生します。 コンパイラがそれFunc_iがfloat型であることを知っている場合、なぜFunc_i()int型であると仮定して、競合する型のエラーを与えるのですか?強制的にFunc_i()float型にしないでください。 変数宣言にも同じ疑問があります。次の「C」コードを検討してください。 #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; コンパイラーはエラーを示します:'Data_i' undeclared(この関数で最初に使用)。 コンパイラがを見るとFunc_i()、Func_()によって返された値を見つけるためにソースコードに行きます。コンパイラが変数Data_iに対して同じことをできないのはなぜですか? 編集: コンパイラ、アセンブラ、プロセッサなどの内部動作の詳細はわかりません。私の質問の基本的な考え方は、使用後にソースコード内の関数の戻り値を伝える(書き込む)とその関数の「C」言語により、コンピューターはエラーなしでその値を見つけることができます。さて、なぜコンピューターは同様にタイプを見つけることができません。Func_i()の戻り値が見つかったため、Data_iのタイプが見つからないのはなぜですか。extern data-type …

7
関数は変更されていないパラメーターのみを返しますが、役に立ちませんか?
私が働いているプロジェクトでこの機能を見つけました: -- Just returns the text unchanged. -- Note: <text> may be nil, function must return nil in that case! function Widget:wtr(text) return text end 残念なことに、コーダーは社内で機能しなくなりました。何もしないが、呼び出されたパラメーターを返す関数を作成するのはなぜですか? この例では指定されていませんが、どのような場合でも、そのような関数の使用はありますか? のため function aFunction(parameter) return parameter end で終わる aFunction(parameter) == parameter なぜ私は aFunction(parameter) == whatIWantToCheck の代わりに parameter == whatIWantToCheck ?

4
ファーストクラスの機能は、戦略パターンの代替品ですか?
戦略デザインパターン、多くの場合、それらが不足している言語のファーストクラスの機能の代替としてみなされています。 たとえば、機能をオブジェクトに渡したいとします。Javaでは、目的の動作をカプセル化する別のオブジェクトをオブジェクトに渡す必要があります。Rubyなどの言語では、機能自体を匿名関数の形式で渡すだけです。 しかし、私はそれについて考えていたので、多分Strategyは単なる匿名関数が提供する以上のものを提供すると決めました。 これは、オブジェクトがメソッドの実行期間とは無関係に存在する状態を保持できるためです。ただし、匿名関数自体は、関数の実行が終了した時点で存在しなくなる状態のみを保持できます。 ファーストクラスの関数をサポートするオブジェクト指向言語では、関数を使用するよりも戦略パターンに利点がありますか?

2
手順として実装されていない継続の例は何ですか?
SOに関するコールバックと継続の区別に関する興味深い議論がこの質問を促しました。定義上、継続とは、計算を完了するために必要なロジックの抽象的な表現です。ほとんどの言語では、これは継続的な処理が必要な値を渡す1つの引数プロシージャとして現れます。 純粋に関数型の言語(すべての関数が純粋でファーストクラスの市民である場合)では、継続は関数として完全にモデル化できると思います。これは、結局のところ、これまでの継続を私が以前に理解していた方法です。ただし、世界は状態(ため息)でいっぱいです。したがって、一般的な定義では、継続がプログラムの状態をキャプチャする必要はありません。 私の理解を助けるために、継続が関数よりも抽象的な方法で表現されている関数型言語で例を提供できますか?Schemeを使用すると、現在の継続をファーストクラスの方法(call / cc)で取得できることはわかっていますが、それでも、call / ccに渡される1つの引数プロシージャには、現在の継続が別の形式で与えられているようですcall / cc'd関数が結果を適用できる引数手続き。

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