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

10
initialize(またはinit)の反対は何ですか?[閉まっている]
この用語はメソッド名として使用されます。このメソッドは、ユーザーインターフェイスの一部が非表示(または削除)になったときに呼び出され、値をデフォルトにリセットし、使用されなくなったオブジェクトを破棄するために使用されます。 可能な名前は次のとおりです。release、remove、dispose、clearなど。 どちらが最も適切だと思いますか?

7
プライベート静的メソッドがあるのはなぜですか?
質問を解決したかっただけです。プライベートな可視性を持つ通常のメソッドとは対照的に、プライベートな静的メソッドを持つことのポイントは何ですか? 静的メソッドを持つことの利点は、クラスのインスタンスなしで呼び出すことができることだと思っていましたが、そのプライベートは静的であるというポイントさえありますか? 私が考えることができる唯一の理由は、オブジェクトレベルではなく、クラスレベルでメソッドを概念的に理解するのに役立つということです。

18
長い方法は常に悪いですか?[閉まっている]
そのため、先ほど見てみると、長い方法が悪い習慣であるというコメントがいくつかありました。 私は、長い方法が悪い(そして他の人からの意見が欲しい)ことにいつも同意するかどうかわかりません。 たとえば、オブジェクトをビューに送信する前にオブジェクトの処理を少し行うDjangoビューがあります。長いメソッドは350行のコードです。パラメータを処理するようにコードを作成しました。クエリセットの並べ替え/フィルタリングを行い、クエリが返したオブジェクトをビットごとに処理します。 そのため、処理は主に条件付き集計であり、データベースでは簡単に実行できない複雑なルールがあるため、メインループの外側で宣言された変数があり、ループ中に変更されます。 variable_1 = 0 variable_2 = 0 for object in queryset : if object.condition_condition_a and variable_2 > 0 : variable 1+= 1 ..... ... . more conditions to alter the variables return queryset, and context したがって、理論によれば、すべてのコードをより小さなメソッドに分解する必要があります。そのため、ビューメソッドは最大1ページの長さであると見なされます。 ただし、過去にさまざまなコードベースで作業していたため、あるメソッドから次のメソッドに絶えずジャンプして、その最も外側のメソッドを頭の中で保持する必要がある場合、コードが読みにくくなることがあります。 適切にフォーマットされた長いメソッドを使用すると、内部メソッドで隠されないため、ロジックをより簡単に確認できます。 コードをより小さなメソッドに分解することもできますが、多くの場合、2つまたは3つのことに使用される内部ループがあるため、より複雑なコード、または1つだけではなく2つまたは3つ(またはタスクごとに内部ループを繰り返すこともできますが、パフォーマンスが低下します)。 だから、長い方法が必ずしも悪いわけではない場合はありますか?メソッドを1つの場所でのみ使用する場合、メソッドを記述する場合は常にありますか? 更新:1年以上前にこの質問をしたようです。 そこで、ここで(混合)応答の後にコードをリファクタリングし、メソッドに分割しました。これは、データベースから関連オブジェクトの複雑なセットを取得するDjangoアプリであるため、テストの引数が出ていません(おそらく、テストケースに関連するオブジェクトを作成するのにおそらく1年の大半を費やしていたでしょう。誰も文句を言う前の作業環境)。コードのその部分のバグを修正することは今やや簡単ですが、大したことではありません。 前 : #comment 1 bit …

6
関数とラムダの違いは何ですか?
「関数」と「ラムダ」について少し混乱しています。スキームキーワードlambdaがJavaScriptキーワードfunctionと非常によく似ていることを示す例をいくつか見ましたが、それらがどのように関連しているかはわかりません。 .netでオブジェクトについて話す場合、「関数」と「メソッド」は同じ意味で使用できると言われています。「ラムダ」と「関数」が同じことを意味するのか疑問に思っています。ギリシャ文字のラムダ(λ)がこのサイトの非常に多くのアバターに登場しているのを見て、「ラムダ」には難解な意味があるのだろうか。物事をさらに混乱させるために、.netでは、C#の機能部分は別の関数に渡される関数式を「ラムダ式」と呼んでいます。 また、「ラムダ計算」という用語に漠然と精通しています。 関数とラムダの違いは何ですか?

9
「get」プレフィックスと「find」プレフィックスの付いた命名方法を決定する方法と理由
getSomethingvsで始まる特定のメソッドに名前を付ける必要があるかどうかを判断するのは常に困難findSomethingです。 問題は、設計が不十分なAPIのヘルパーを作成することにあります。これは通常、オブジェクトからデータを取得するときに発生し、オブジェクトをパラメーターとして必要とします。以下に簡単な例を示します。 public String getRevision(Item item) { service.load(item, "revision"); // there is usually more work to do before getting the data.. try { return item.get_revision(); } catch(NotLoadedException exception) { log.error("Property named 'property_name' was not loaded", exception); } return null; } このメソッドの名前をgetRevision()orにするfindRevision()かどうか、どのように決めるのですか
48 naming  methods 

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

6
クラスメンバーを優先するか、内部メソッド間で引数を渡すか
クラスのprivate部分内に、複数のprivateメソッドで使用される値があると仮定します。人々はこれをクラスのメンバー変数として定義することを好むか、それを各メソッドへの引数として渡すことを好みますか?そしてなぜですか? 一方で、クラスの状態(つまり、メンバー変数)を減らすことは一般に良いことであるという議論を見ることができましたが、クラスのメソッド全体で同じ値が繰り返し使用されている場合、それは理想的ですクラスの状態としての表現の候補。コードが他に何もないとしても見た目にきれいになるようにします。 編集: 提起されたコメント/質問のいくつかを明確にするために、私は定数について話しているのではなく、これは特定のケースに関連するものではなく、他の人に話している仮説にすぎません。 OOPの角度をしばらく無視すると、私が念頭に置いていた特定のユースケースは次のようになりました(擬似コードを簡潔にするために参照によるパスを想定しています) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) つまり、複数の機能に共通する変数がいくつかあるということです-私が念頭に置いていた場合、それは小さな機能の連鎖によるものでした。OOPシステムでは、これらがすべてクラスのメソッドである場合(たとえば、大きなメソッドからメソッドを抽出することによるリファクタリングが原因)、その変数はそれらすべてに渡されるか、クラスメンバーになる可能性があります。

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

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

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()を実行するだけでよいことに気付く(または考える)可能性があり、他を避けることで効率的です作業。これには多くのバグがたくさんあります。ほとんどのバグは、実行状態があなたが思っているとおりではないという結果です。

6
クラスが独自のパブリックメソッドを使用しても大丈夫ですか?
バックグラウンド 現在、デバイスが送信および受信するオブジェクトを持っている状況があります。このメッセージには、次のようないくつかの構成要素があります。 public void ReverseData() public void ScheduleTransmission() ScheduleTransmissionこの方法は、必要呼び出すためにReverseData、それが呼ばれるたびにメソッドを。ただし、アプリケーションでオブジェクトがインスタンス化されている場所からReverseData外部で呼び出す必要がある場合があります(名前空間の外側に完全に追加する必要があります)。 「受信」に関してはReverseData、object_receivedイベントハンドラーで外部から呼び出されて、データを元に戻します。 質問 オブジェクトが独自のパブリックメソッドを呼び出すことは一般に許容されますか?

3
「プラス」と「マイナス」は適切なメソッド名ですか?
Java SE 8には、時刻、インスタントLocalDate、LocalTimeおよびLocalDateTimeクラスを紹介するクラスを導入するための新しいメカニズムが付属しています。そのようなインスタントを操作するために、一連のメソッドが提供されます:LocalDate.plusDays(...)などLocalDate.minusDays(...)。 メソッドは、実際には実行される操作であり、アクションを実行するものであるため、良いプラクティスは、メソッドの目的を説明する動詞にちなんでメソッドに名前を付けることだと常に考えてきました。あなたのようなクラスを検討している場合だけに言及し、StringBuilder例えば、メソッドの名前はappend、insert、delete... これが、私にとって、の代わりにメソッドplusDaysを命名するように聞こえない理由です。非常に迷惑なのは私だけですか?どう思いますか?sumDaysminusDayssubtractDays 私が考えることができる唯一の理由は、日付が不変オブジェクトであるためplusDays、元のオブジェクトに日を追加するのではなく、新しいプロパティで新しい日を作成することですが、それは非常に微妙です。

12
ローカル変数(employeeCount、firstNameなど)の最初の単語に小文字を使用する理由は何ですか
すべての変数に適切な大文字小文字を使用しているため、他のプログラマーから多くの批判を受けています。たとえば、典型的なプログラマーはemployeeCount変数名に使用しEmployeeCountますが、私はを使用します。voidメソッド、returnメソッド、変数、プロパティ、定数など、すべてに適切な大文字小文字を使用します。Javascriptでもこの規則に従います。最後の1つは、人々のジミーを本当に擦ります。 この「非標準」の大文字と小文字の規則に従わない理由として挙げられる典型的な理由は、プロパティとvoidメソッドのために完全な適切なケースを予約する必要があるためです。値を返すローカル変数とメソッドには、のような小文字の最初の単語が必要int employeeCount = getEmployeeCount()です。 しかし、その理由はわかりません。 これに疑問を投げかけると、それが標準であるというarbitrary意的な答えを得るだけのようですです。答えが何であれ、それは通常、次のように常に要約されます。それに従うだけです。。任意の答えは決して私にとって十分ではありません。 Excel 97マクロをOffice IDEでプログラミングした初期の頃から、何かがローカル変数またはプロパティであるかどうかを判断するための大文字と小文字の規則は必要ありませんでした。これは、非常に直感的な命名規則を常に使用してきたためです。たとえば、GetNuggetCount()どこかに移動してすべてのナゲットのカウントを取得する方法を明確に提案しています。 SetNuggetCount(x)ナゲットのカウントに新しい値を割り当てることをお勧めします。 NuggetCountすべて単独で、単に値を保持しているプロパティまたはローカル変数を提案します。最後に、「ああ、それが問題だ。財産か変数か、それはどっち?」と言いたくなるかもしれません。それに対して、「本当に重要なのか?」と返信します。 tl; dr ;:変数または戻りメソッドの最初の単語に小文字を使用する客観的、論理的、非任意の理由は何ですか? 編集: MainMaの場合 このコードを回答の最初のコードサンプルに置き換えて、引数がどの程度維持されるかを確認します。 public void ComputeMetrics() { const int MaxSnapshots = 20; var Snapshots = this.LiveMeasurements.IsEnabled ? this.GrabSnapshots(MaxSnapshots, this.cache) : this.LoadFromMemoryStorage(); if (!Snapshots.Any()) { this.Report(LogMessage.SnapshotsAreEmpty); return; } var MeasurementCount = Measurements.Count(); this.Chart.Initialize((count + 1) * …

11
IllegalStateExceptionまたはサイレントメソッド実行の方が良いですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 閉じた3年前。 play()メソッドとstop()メソッドを持つMediaPlayerクラスがあるとします。playメソッドが以前に呼び出されていない場合にstopメソッドを実装するときに使用する最適な戦略は何ですか。2つのオプションがあります。プレーヤーが適切な状態にないために例外をスローするか、stopメソッドの呼び出しを静かに無視します。 ある状況でメソッドが呼び出されることは想定されていないが、その実行がプログラム全般に害を及ぼさない場合の一般的なルールは何でしょうか?

5
オブジェクトを同じメソッドに2回渡すか、結合されたインターフェイスで統合しますか?
デジタルボードと通信した後にデータファイルを作成する方法があります。 CreateDataFile(IFileAccess boardFileAccess, IMeasurer boardMeasurer) ここではboardFileAccessとboardMeasurerの同じインスタンスですBoardその実装するオブジェクトの両方IFileAccessとIMeasurer。IMeasurerこの場合、ボード上の1つのピンをアクティブに設定して簡単な測定を行う単一の方法に使用されます。この測定からのデータは、を使用してボードにローカルに保存されIFileAccessます。Board別のプロジェクトにあります。 私はCreateDataFile、簡単な測定を行ってからデータを保存することで1つのことを行うという結論に達しました。同じ方法で両方を行うことは、このコードを使用して測定を行ってファイルに書き込む必要がある他の人にとってより直感的です個別のメソッド呼び出しとして。 私には、同じオブジェクトをメソッドに2回渡すのは厄介に思えます。IDataFileCreator拡張IFileAccessし、必要なメソッドを呼び出すだけのインスタンスをIMeasurer含む実装を持つローカルインターフェイスを作成することを検討しました。同じボードオブジェクトが常に測定とファイル書き込みに使用されることを考えると、同じオブジェクトをメソッドに2回渡すのは悪い習慣ですか?もしそうなら、ローカルインターフェイスと実装を使用して適切なソリューションですか?BoardBoard

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