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

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

1
引数とパラメーターに違いはありますか?
次のようになります:パラメータは呼び出し元のPOVから、引数はプロシージャ内、または他の方法で意味します。 それとも違いはありませんか? 更新 スウェーデン語では、「anropsparametrar」、つまり「プロシージャを呼び出しているパラメータ」と言い、「anropsargument」(「プロシージャを呼び出している引数」)とは言いません。

6
多くの言語が名前付きパラメーターをサポートしないのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 関数を呼び出すときに、次のように書くことができれば、コードの読み取りがどれほど簡単になるかを考えていました。 doFunction(param1=something, param2=somethingElse); 欠点は考えられませんし、コードがずっと読みやすくなります。配列を唯一の引数として渡し、配列キーをパラメーター名として使用できることはわかっていますが、それでも読み取りは難しくなります。 私が見逃しているこの欠点はありますか?そうでない場合、なぜ多くの言語がこれを許可しないのですか?

2
デザイン:オブジェクトメソッドと、オブジェクトをパラメーターとして取る別のクラスのメソッド
たとえば、行う方が良いですか: Pdf pdf = new Pdf(); pdf.Print(); または: Pdf pdf = new Pdf(); PdfPrinter printer = new PdfPrinter(); printer.Print(pdf); もう一つの例: Country m = new Country("Mexico"); double ratio = m.GetDebtToGDPRatio(); または: Country m = new Country("Mexico"); Country us = new Country("US"); DebtStatistics ds = new DebtStatistics(); double usRatio = ds.GetDebtToGDPRatio(us); double …

2
再帰的な関数呼び出しのreturnステートメントの理由
私は自分の心に疑問を抱いていました。次のサブルーチン(リスト内の要素を検索するなど)の最後にはreturnステートメントがあります。 list *search_list(list *l, item_type x) { if (l == NULL) return(NULL); if (l->item == x) return(l); else return( search_list(l->next, x) ); } 最後にreturnステートメントの意味がわかりません(つまり、research search_list(l-> next、x))。誰もがスタックモデルを使用してこの概念を説明できれば、本当に役立ちます。

4
関数の引数の数を最小化する手法
クリーンコードでは、「関数の引数の理想的な数はゼロ」と書かれています。理由は説明されており、理にかなっています。私が望んでいるのは、この問題を解決するために4つ以上の引数を持つメソッドをリファクタリングする手法です。 1つの方法は、引数を新しいクラスに抽出することですが、それは確かにクラスの爆発につながりますか?そして、それらのクラスは、いくつかの命名規則に違反する名前で終わる可能性が高い(「データ」または「情報」などで終わる)? 別の手法は、複数の関数で使用される変数をプライベートメンバー変数にして、それらを渡さないようにすることですが、変数のスコープを拡張し、おそらく実際にそれを必要としない関数に対して開かれるようにします。 関数の引数を最小化する方法を探し、それを行うのが良い考えである理由を受け入れました。

2
Pythonで値を返す関数に名前を付けるにはどうすればよいですか?
Pythonで関数の名前を選択することについて混乱しています。時々 、Pythonは組み込み関数ですが不可欠のような:print機能と文字列の方法find。時々、それらは次のようなものではありません:lenその名前はcalculate_len、たとえばなどの命令型でtypeはなく、find_typeです。 これprintは、使用しない値(つまりNone)を返し、何かをする(つまり、画面に文字列を表示する)ため、その名前は必須です。 ただしlen、使用する値を返し、何かを実行します(つまり、シーケンスまたはマッピングに存在するアイテムの数を計算します)。その名前は必須ではありません。一方、find文字列メソッド(as len)は、使用する値を返し、何かを実行します。その名前は必須です。 この質問をしたのは、Caesar暗号を使用して文字列を暗号化および復号化するスクリプトをレビューに追加したことです。レビューアは次のように言った: ただの直感:関数は何かをします。したがって、関数の適切な名前は必須rotate_letterですrotated_letter。代わりにを使用します。 rotated_letter数字で回転した文字を表す1文字の文字列を返します。私はrotated_letterそれが値を返すのでrandint、ランダムモジュールの関数のように使用しましたが、そうではありませんgenerate_randint。 したがって、この場合、使用する値を返す関数にどのように名前を付ける必要がありますか?名前を必須にするべきか、それとも名詞にするべきか。他の場合では、次のような、それを行う方法は明らかですブール関数のような、is_evenそしてis_palindrome我々は同じようにそれを作るはい/いいえ質問し、また機能だけで行うと戻り未使用の値(つまり、Noneなど)、printおよびlistメソッドsort。

18
良い名前が思いつかないとき、functions / variables / etcに名前を付けますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 関数/変数/などを定義していて、それを何と命名するかわからない場合、何と命名しますか?どうやって名前を思いつきますか? 仮の名前を実際の名前になるまでプレースカードとして使用する場合、どの一時的な名前を使用しますか? 更新 私は次のようなものを使用しているWILL_NAME_LATER、NEEDS_NAMEまたはTO_BE_NAMED。私は、採択された規約があることを望んでいました。この採択された規約を使用した場合、変更するまでIDEが名前を強調表示することを望んでいました。

6
呼び出されるオブジェクトを変更する関数/メソッドを説明するために使用される用語は何ですか?
一般的な質問で申し訳ありません。私はあちこち検索しましたが、これに似たスレッドが非常に多く見つかりましたが、特定の質問に答えるスレッドはありません。おそらく、探している用語が存在しないためです。 私の友人はプログラミング、特にJavaScriptを学んでおり、なぜこれが機能しないのかと私に尋ねました。 var a = "Hello World"; a.replace("Hello", "Goodbye"); console.log(a) // Logs "Hello World" 理由は、文字列はJavaSriptでは不変なreplaceので、変更しないためですa。それはBecuase 返す文字列を、あなたのような何かをする必要があると思い... var a = "Hello World"; a = a.replace("Hello", "Goodbye"); console.log(a); // Logs "Goodbye World" ただし、代替はJavaScriptのような関数reverse()であり、それを呼び出すものをすべて変更します。例えば: var fruits = ["Apples", "Oranges", "Bananas"]; fruits.reverse(); console.log(fruits) // ["Bananas", "Oranges", "Apples"] 友人がなぜ機能してreplaceいないのかと私に尋ねると、私は知らない言葉に手を伸ばしていることに気付きました(私が知っている限り)... 「置換関数は________であるため、文字列を「string dot replace」に設定する必要があります。」 reverseは________であるため、「array dot reverse」に等しい配列を設定する必要はありません。 …

2
`function foo(){}`の代わりに `const foo =()=> {}`を使用する理由
たとえば、このReduxビデオでは、講師は常に次のような構文を使用します const counter = (state=0, action) => { ... function body here } 私は「伝統的な」だけを使用します function counter(state=0, action) { ... function body here } これは実際には短く、IMOはより明確です。小さな「=>」の不規則な右端をスキャンするよりも、「関数」の単語をページのかなり均一で構造化された左端をスキャンする方が簡単です。 以外でthis、意見ではなく客観的になるようにしようとすると、newfangled構文にいくつかの有用な違いまたは利点がありますか?

3
Clojureでネストされた速記関数を記述できないのはなぜですか?
今日、ネストされた速記関数を使用してClojure式を評価しようとしましたが、私はそれを許可しませんでした。 式は次のとおりです。 (#(+ % (#(+ % (* % %)) %)) 5) ; sorry for the eye bleed 出力は次のとおりです。 IllegalStateException Nested #()s are not allowed clojure.lang.LispReader$FnReader.invoke (LispReader.java:630) ...and a bunch of other garbage

5
24時間降水量のリストを1時間ごとの合計値に変換する
時間ごとの降水量のリストがあり、それぞれが過去24時間に発生した雨の量を日付順に並べたものだとします。例えば: { '2012-05-24 12:00': 0.5, // .5" of rain from 5/23 12:00 - 5/24 11:59 '2012-05-24 11:00': 0.6, // .6" of rain from 5/23 11:00 - 5/24 10:59 '2012-05-24 10:00': 0.6, // .6" of rain from 5/23 10:00 - 5/24 09:59 ... '2012-05-23 10:00': 0 } 各時間に降った雨の量を判断するための戦略/アルゴリズムはありますか?これに頭を包むことはできないようです。私はそれが単に差分を合計するほど簡単ではないことを知っています。 データセットの視覚化 P(N) [.....======================] …

2
ダイアディック関数assertEquals(expected、actual)に伴う問題の解決
長年にわたるカウボーイコーディングの後、私は良質のコードを書く方法についての本を手に入れることにしました。私はRobert Cecil MartinのClean Codeを読んでいます。第3章(関数)には、2項関数に関するセクションがあります。これは本からの抜粋です。 のような明白な二項関数でさえassertEquals(expected, actual)問題があります。予想されるはずの場所に実際の回数を何回入れましたか?2つの引数には自然な順序はありません。予想される実際の順序は、慣れるために習得する必要がある規則です。 著者は説得力のあるポイントを作成します。私は機械学習で働いており、これにいつも出会います。たとえば、sklearnライブラリのすべてのメトリック関数(おそらくフィールドで最も使用されているpythonライブラリ)では、入力の順序に注意する必要があります。例として、sklearn.metrics.homogeneity_scoreは入力labels_trueおよびとして使用されlabels_predます。この関数の機能はあまり重要ではありません。重要なのは、入力の順序を切り替えてもエラーがスローされないことです。実際、入力を切り替えることは、ライブラリ内の別の関数を使用することと同じです。 ただし、この本では、のような関数の賢明な修正については触れていませんassertEquals。assertEquals上記のような頻繁に遭遇する機能の修正については考えられません。この問題を解決するための良い方法は何ですか?
10 functions 

4
呼び出しスタックは下または上から始まりますか?
スタックは、ボトムアップで積み上げるものです。 したがって、スタックが空になりプログラムが終了するまで各関数が終了するため、関数が呼び出されたときにスタックから新しいアイテムが追加され、呼び出しスタックはスタックに新しいアイテムを追加します。 上記が正しい場合、なぜ人々はコールスタックを「上に」移動するコントロールを参照するのですか?確実に、制御は呼び出しスタックを下に移動します。
10 functions  stack 

6
CoffeeScriptと名前付き関数
他の場所では、CoffeeScriptの名前付き関数の用語について議論が生じています。特に誰かがこのようなものを参照しました: foo = -> console.log("bar") 名前付き関数として。しかし、CoffeeScriptのすべてが匿名関数であり、名前付き関数がないことに反対しました。これは確かに真実です。CoffeeScriptには、変数に格納できる関数式しかありません。しかし、これを名前付き関数と呼ぶのが間違っていることを意味しているとは思いません。 私が見ると、名前が付けられた関数なので、名前付き関数です。確かに、他のいくつかの言語が名前付き関数を持っているのと同じように名前付き関数ではありませんが、名前付き関数と呼ぶのは不適切ではないほど近いと思います。そうでないと主張することは、つまらないことのようです。 これは名前付きの関数ではないと主張することは単なるつまらないことだと思って、昼食に出かけますか?

3
値で渡されるパラメーターの値を変更しない理由はありますか?
関数の本体にある値渡しパラメーターの値を変更することに対する、またはそれに対する反対の客観的でサポート可能なソフトウェアエンジニアリングの引数はありますか? 私のチームで繰り返されるスパッツ(大部分はおもしろい)は、値によって渡されるパラメーターを変更する必要があるかどうかです。チームのいくつかのメンバーは、パラメーターを決して割り当ててはならないことに固執しているため、最初に関数に渡された値を常に問い合わせることができます。パラメータは、メソッドを呼び出す構文によって初期化されたローカル変数に過ぎないと私は同意しません。値渡しパラメーターの元の値が重要な場合は、ローカル変数を宣言してこの値を明示的に格納できます。私たちのどちらかが私たちの立場を非常によくサポートしているとは確信していません。 これは解決できない宗教的紛争ですか、それともどちらの方向にも客観的なソフトウェアエンジニアリング上の理由がありますか? 注:原則の問題は、特定の言語の実装の詳細に関係なく残っています。たとえば、JavaScriptの場合、引数リストは常に動的であり、パラメーターはargumentsオブジェクトからのローカル変数初期化の構文糖と見なすことができます。それでも、呼び出し元から呼び出し先への情報の受け渡しをキャプチャするため、パラメータ宣言された識別子を「特別」として扱うことができます。

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