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

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

5
プライベートメソッドの単体テストが悪い習慣と見なされるのはなぜですか?
環境: 現在、Pythonで小さなプロジェクトに取り組んでいます。私は一般的に文書化されているいくつかのパブリックメソッドで私のクラスを構造化が、主に高レベルの概念を扱う(クラスのユーザーが知っていて、使用すべきか)、そしてたくさんの隠された(アンダースコアで始まる)を担当している方法を複雑または低レベルの処理。 コードに信頼を置き、その後の変更によって以前の動作が損なわれないようにするためには、テストが不可欠であることを知っています。 問題: 信頼できるベースでより高いレベルのパブリックメソッドを構築するために、私は一般的にプライベートメソッドをテストします。コードの変更によってリグレッションが発生したかどうか、どこで発生したかを確認する方が簡単です。これは、これらの内部テストがマイナーリビジョンで壊れる可能性があり、修正/交換する必要があることを意味します しかし、私は、プライベートメソッドのユニットテストが、少なくとも異議のある概念であるか、またはより頻繁に悪い習慣と見なされていることも知っています。その理由:公の行動のみをテストする必要があります(参照) 質問: 私は次のベストプラクティスに注意を払い、理解したいと思います。 プライベート/隠しメソッドでユニットテストを使用するのはなぜ悪いのですか(リスクは何ですか)? パブリックメソッドが低レベルおよび/または複雑な処理を使用できる場合のベストプラクティスは何ですか? 精度: それは質問する方法ではありません。Pythonにはプライバシーの真の概念がなく、隠されたメソッドは単にリストされていませんが、名前がわかっている場合に使用できます 私はプログラミングのルールとパターンを教えたことはありません。私の最後のクラスは80年代からです...私は主に試行錯誤とインターネットでの参照によって言語を学びました(何年もの間、Stack Exchangeが私のお気に入りです)

7
クラス変数を渡すクラスメソッドを作成したのは悪い考えですか?
ここに私が意味するものがあります: class MyClass { int arr1[100]; int arr2[100]; int len = 100; void add(int* x1, int* x2, int size) { for (int i = 0; i < size; i++) { x1[i] += x2[i]; } } }; int main() { MyClass myInstance; // Fill the arrays... myInstance.add(myInstance.arr1, myInstance.arr2, myInstance.len); } addクラスメソッドなので、必要なすべての変数に既にアクセスできますが、これは悪い考えですか?これを行うべき、またはすべきでない理由はありますか?

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
「計算された」値をプロパティまたはメソッドとして公開する必要がありますか?
Webコンテンツ管理システムのコンテンツタイプを表すC#クラスがあります。 Webコンテンツエディターがオブジェクトの表示方法のHTMLテンプレートを入力できるフィールドがあります。基本的に、オブジェクトプロパティ値をHTML文字列に代入するためにhandlebars構文を使用します。 <h1>{{Title}}</h1><p>{{Message}}</p> クラス設計の観点から、フォーマットされたHTML文字列(置換あり)をプロパティまたはメソッドとして公開する必要がありますか? プロパティとしての例: public class Example { private string _template; public string Title { get; set; } public string Message { get; set; } public string Html { get { return this.ToHtml(); } protected set { } } public Example(Content content) { this.Title = content.GetValue("title") as string; this.Message …


5
メッセージとメソッドの違いは?
Objective Cには、他のオブジェクトにメッセージを送信するという概念があります。これは、C#やJavaなどの言語でのメソッド呼び出しによく似ています。 しかし、どのような正確に微妙な違いがありますか?私のコードについて考えるとき、どのようにメッセージングを考える必要がありますか? 注:ここで少し背景を説明しますが、私はObjective Cに関するいくつかの概念を理解しようとしているC#/ Java開発者です。
13 methods 

3
呼び出しが高価な場合にPythonで単一責任原則(SRP)を使用する
いくつかのベースポイント: Pythonのメソッド呼び出しは、その解釈された性質により「高価」です。理論的には、コードが十分に単純な場合、Pythonコードの分解は、読みやすさと再利用に加えてマイナスの影響を及ぼします(これは、ユーザーにとってはそれほどではなく、開発者にとって大きな利益です)。 単一責任原則(SRP)は、コードを読み取り可能に保ち、テストと保守が容易です。 プロジェクトには、読み取り可能なコード、テスト、および時間パフォーマンスが必要な特別な種類の背景があります。 たとえば、いくつかのメソッド(x4)を呼び出すこのようなコードは、次のメソッド(1つ)よりも低速です。 from operator import add class Vector: def __init__(self,list_of_3): self.coordinates = list_of_3 def move(self,movement): self.coordinates = list( map(add, self.coordinates, movement)) return self.coordinates def revert(self): self.coordinates = self.coordinates[::-1] return self.coordinates def get_coordinates(self): return self.coordinates ## Operation with one vector vec3 = Vector([1,2,3]) vec3.move([1,1,1]) vec3.revert() vec3.get_coordinates() これと比較して: from …

2
JavaコレクションフレームワークインターフェイスのUnsupportedOperationException
Java Collections Frameworkを調べてみると、かなりの数のインターフェースにコメントがあることがわかりました(optional operation)。これらのメソッドを使用すると、クラスUnsupportedOperationExceptionを実装したくない場合にクラスを実装できます。 この例は、のaddAllメソッドSet Interfaceです。 さて、この一連の質問で述べられているように、インターフェースは、使用が期待できるものを定義する契約です。 インターフェースは、クラスが行うこととそれを行う方法を分離するため、重要です。クライアントが期待できるものを定義する契約により、開発者は契約を維持する限り、自由に実装できます。 そして インターフェースとは、オブジェクトが実行できるアクションの説明です。たとえば、ライトスイッチをオンにしたとき、ライトが点灯したとき、どのように気にせず、それを行うだけです。オブジェクト指向プログラミングでは、インターフェイスとは、オブジェクトが「X」になるために必要なすべての機能の説明です。 そして インターフェースベースのアプローチはかなり優れていると思います。その後、依存関係をうまくモックアウトできますが、基本的にはすべてがあまり密結合ではありません。 インターフェースのポイントは何ですか? インターフェイスとは何ですか? インターフェイス+拡張(mixin)vs基本クラス インターフェースの目的はコントラクトを定義し、依存関係を疎結合にすることであるため、一部のメソッドでUnsupportedOperationException目的を達成できない場合がありますか?それは私がもう渡されSetずに使うことができないことを意味しますaddAll。むしろ、どの実装Setが渡されたかを知る必要があるためaddAll、使用できるかどうかを知ることができます。それは私にはかなり価値がないようです。 それで、何のポイントUnsupportedOperationExceptionですか?従来のコードを補うだけで、インターフェースをクリーンアップする必要がありますか?それとも、私が見逃しているより感覚的な目的がありますか?

4
数学演算子のメンバー関数と非メンバー関数
私は、行列、ベクトルなどを含む線形代数ライブラリ(長い話、学校の課題です)を書いています。このライブラリを作成する過程で、オブジェクトに対して数学演算を実行する関数を作成します。たとえば、行列の転置、行列の反転、ベクトルの正規化など。 この種の関数の「ベストプラクティス」とは何かに興味がありました。つまり、関数をメンバー関数にするか、非メンバーにするべきでしょうか。(わかりやすくするため/ライブラリの使用目的) 例: //Member function way: B = A.transpose(); C = A.inverse(); //Non-member function way: B = linalg::transpose(A); //Non-member transpose function in linear algebra namespace C = linalg::inverse(A); この種の操作に関する標準はありますか?または、少なくとも、これを行う一般的な方法はありますか?私は最初の選択肢に傾いていますが、これが推奨されるかどうか知りたいです。
12 c++  libraries  methods 

5
メソッドパラメータではなくコンストラクタにデータを渡すと、クラスの概念はどのように変わりますか?
パーサーを作成しているとしましょう。1つの実装は次のようになります。 public sealed class Parser1 { public string Parse(string text) { ... } } または、代わりにテキストをコンストラクタに渡すこともできます。 public sealed class Parser2 { public Parser2(string text) { this.text = text; } public string Parse() { ... } } どちらの場合も使用法は簡単ですが、他のものと比較して、へのパラメーター入力を有効にするとはどういう意味Parser1ですか?他のプログラマーがAPIを見たときに、どのメッセージを送信しましたか?また、特定の場合に技術的な利点/欠点はありますか? 2番目の実装ではインターフェイスがまったく意味がないことに気づくと、別の質問が出てきます。 public interface IParser { string Parse(); } ...最初のインターフェイスが少なくともいくつかの目的に役立つ場合。これは特に、クラスが「インターフェース可能」かどうかを示していますか?

3
Java 8では、メソッド参照式や、関数型インターフェースの実装を返すメソッドを使用するほうが文法的に優れているでしょうか?
Java 8では、関数型インターフェイスの概念と、関数型インターフェイスを取るように設計された多数の新しいメソッドが追加されました。これらのインターフェースのインスタンスは、メソッド参照式(例SomeClass::someMethod)とラムダ式(例(x, y) -> x + y)を使用して簡潔に作成できます。 同僚と私は、どちらのフォームを使用するのが最適かについて意見が異なります(この場合、「最適」は、「最も読みやすい」と「標準的な慣行に最も近い」に要約されます。同等)。具体的には、次のすべてが当てはまる場合です。 問題の関数は単一のスコープの外では使用されません インスタンスに名前を付けると、読みやすさが向上します(たとえば、ロジックが何が起こっているかを一目で確認できるほど単純であるのとは対照的) ある形式が他の形式よりも好まれるプログラミング上の理由は他にはありません。 この問題についての私の現在の意見は、プライベートメソッドを追加し、それをメソッド参照で参照することが、より優れたアプローチであるというものです。これはこの機能がどのように使用されるように設計されているかのように感じられ、メソッド名とシグネチャを介して何が起こっているかを伝える方が簡単に思われます(たとえば、「boolean isResultInFuture(Result result)」は明らかにブール値を返すと言っています)。また、クラスの将来の拡張で同じチェックを利用したい場合に、プライベートメソッドを再利用しやすくしますが、機能インターフェイスラッパーは必要ありません。 私の同僚の好みは、インターフェイスのインスタンスを返すメソッドを用意することです(たとえば、 "Predicate resultInFuture()")。私には、この機能の使用方法が完全ではないように感じられ、少し不格好に感じられ、名前を付けることで意図を実際に伝えるのが難しいように思われます。 この例を具体的にするために、異なるスタイルで記述された同じコードを次に示します。 public class ResultProcessor { public void doSomethingImportant(List<Result> results) { results.filter(this::isResultInFuture).forEach({ result -> // Do something important with each future result line }); } private boolean isResultInFuture(Result result) { someOtherService.getResultDateFromDatabase(result).after(new Date()); } } …

7
循環的複雑度が単一のメソッドで重要なのはなぜですか?
最近からSonarLint for Eclipseを使用していますが、それは非常に役立ちました。しかし、それは私に循環的複雑さについての疑問を投げかけました。 SonarLintは許容できるCCを10と見なし、私がそれを超えている場合があります(約5または6ユニット)。これらの部分は、値がさまざまな変数に依存するマッパーに関連しています。次に例を示します。 フィールドAは文字列sAに依存しています。 フィールドBは文字列sBに依存しています。 フィールドCはString sCに依存しています。 など... if各フィールドに置くこと以外に選択肢はありません。これは(幸いにも)私の選択ではありませんが、自分で変更できない既存の複雑なシステムです。 私の質問の核心は、次のとおりです。単一の方法で CCが高すぎないことがなぜ重要なのですか。いくつかの条件を1つまたは複数のサブメソッドで移動して複雑さを軽減しても、全体的な機能のコストは削減されず、問題が別の場所に移動するだけだと思いますか? (もしあれば、小さな間違いのため申し訳ありません)。 編集 私の質問は、グローバルな循環的複雑度についてではなく、単一のメソッドの複雑度とメソッドの分割についてのみです(申し訳ありませんが、私が正確に何を意味するかを説明するのに大雑把な時間を費やしています)。すべてのサブメソッドを実行するだけの「スーパーメソッド」にまだ属しているのに、条件を小さなメソッドに分割して、アルゴリズムに複雑さを加えることが許されるのはなぜですか。 ただし、2番目のリンク(アンチパターンについて)は非常に役立ちます。

6
データベース関連のメソッドの設計。どちらを返す方が良いですか。true/ falseまたは行に影響がありますか?
データベースでデータの変更(挿入、更新、削除)を実行するいくつかのメソッドがあります。ORMは、私は方法のこれらのタイプの戻り行の影響を受けたint型の値を使用しています。操作の成功/失敗の状態を示すために、「私のメソッド」に対して何を返す必要がありますか? を返すコードを考えてみましょうint: A.1 public int myLowerLevelMethod(int id) { ... int affectedRows = myOrm.deleteById(id) ... return affectedRows; } 次に、使用法: A.2 public void myOtherMethod() { ... int affectedRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Success } else { // Fail } } ブール値を使用する場合と比較してください。 B.1 public boolean myLowerLevelMethod(int id) { ... int …

2
メソッドパラメータとしての識別子とドメインオブジェクト
メソッドと関数のパラメーターとしてのオブジェクトと一意のIDの使用について賛成または反対の客観的な引数はありますか?(および他のオブジェクトのメンバー?)。特に静的型付け言語のコンテキスト(C#/ Java / Scala) オブジェクト自体の長所: よりタイプセーフな呼び出し。IDを使用すると、引数の順序が誤ってしまうリスクがあります。これは、そのクラスのIDのみを格納するクラスごとに「ミニ」クラスを保持することで軽減できます。 永続化から一度取得し、再度取得する必要はありません (:courtsey - IDと、IDタイプが変更された場合、INTを言う>長い、そして...ミスの可能性が軒並み変更を必要とするhttps://softwareengineering.stackexchange.com/a/284734/145808) IDを使用するメリット: ほとんどの場合、実際のオブジェクトは必要ありません。uniqueidで十分です。そのため、IDがあれば、永続化から取得する時間を節約できます。 これらのテクニックの混合は、私が見る限り、両方の長所と短所の両方を持っています。 これが具体的に定義された問題であることを考えると、「私は思う」または「好き」タイプではなく、客観的な答えがあることを願っています... :-)。 編集:コメンターの提案に関するコンテキスト-唯一の制限は静的に型付けされた言語です。このアプリケーションは汎用アプリケーションですが、特定の使用シナリオに基づいて回答を得ることもできます。 編集:もう少しコンテキスト。書籍管理システムがあるとします。私のモデルは: Book: { id: Int, isbn: String, donatedBy: Member, borrowedBy: Member } Member: {id: Int, name: String} Table- wishlist: { isbn: String, memberId: Int} Table- borrows: { id: Int, memberId: Int} Method: isInWishList( book: …

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