タグ付けされた質問 「type-conversion」

3
Pythonの**の名前は何ですか?
Pythonをプログラミングするとき**、変換を行うためにaを行うことがあります。私はそれが何をするのか理解していますが、どのデータ構造を操作していますか?A dictと他のものは何ですか?array?**オペレーターの名前はありますか?

4
型マッピングと拡張メソッドに関するベストプラクティス
型のマッピングとC#での拡張メソッドの使用に関するベストプラクティスについて質問したいです。このトピックは過去数年にわたって何度も議論されてきましたが、私は多くの投稿を読みましたが、まだ疑問があります。 私が遭遇した問題は、私が所有するクラスを「変換」機能で拡張することでした。あるロジックで使用されるオブジェクトを表すクラス「Person」があるとしましょう。また、外部APIからの応答を表すクラス「Customer」もあります(実際には、複数のAPIがあるため、各APIの応答を共通のタイプ:Personにマッピングする必要があります)。両方のクラスのソースコードにアクセスでき、理論的には独自のメソッドを実装できます。データベースに保存できるように、CustomerをPersonに変換する必要があります。プロジェクトは自動マッパーを使用しません。 私は4つの可能な解決策を考えています: Consumerクラスの.ToPerson()メソッド。シンプルですが、私には単一責任パターンを壊しているように見えます。特に、Consumerクラスは他のクラス(別の外部APIに必要なもの)にもマップされるため、複数のマッピングメソッドを含める必要があります。 Consumerを引数として取るPersonクラスのコンストラクターをマッピングします。また、簡単で、単一責任パターンを壊すようにも見えます。複数のマッピングコンストラクターが必要です(別のAPIからのクラスがあり、Consumerと同じデータをわずかに異なる形式で提供するため) 拡張メソッドを持つコンバータークラス。この方法で、Consumerクラスの.ToPerson()メソッドを記述でき、独自のNewConsumerクラスで別のAPIが導入された場合、別の拡張メソッドを記述して、すべてを同じファイルに保存できます。拡張メソッドは一般的に悪であり、絶対に必要な場合にのみ使用すべきだという意見を聞いたことがあります。それ以外の場合、私はこのソリューションが好きです Converter / Mapperクラス。変換を処理する別のクラスを作成し、ソースクラスインスタンスを引数として受け取り、宛先クラスインスタンスを返すメソッドを実装します。 要約すると、私の問題は質問の数に減らすことができます(すべて、上記で説明した内容に関連して)。 変換メソッドを(POCO?)オブジェクト(Consumerクラスの.ToPerson()メソッドなど)内に配置することは、単一の責任パターンを壊すことを考慮していますか? (DTOのよ​​うな)クラスでの変換コンストラクターの使用は、単一の責任パターンの破壊と見なされますか?特に、そのようなクラスを複数のソースタイプから変換できる場合、複数の変換コンストラクタが必要になりますか? 元のクラスのソースコードにアクセスしながら拡張メソッドを使用するのは悪い習慣と見なされていますか?このような動作は、ロジックを分離するための実行可能なパターンとして使用できますか、それともアンチパターンですか?

9
暗黙の変換ができないのはなぜですか?
私が理解しているように、暗黙的な変換はエラーを引き起こす可能性があります。 しかし、それは理にかなっていない-通常の変換もエラーを引き起こすべきではありませんか? なぜ持っていない len(100) 次のように解釈する(またはコンパイルする)言語で動作する len(str(100)) 特に、それが機能する唯一の方法(知っている)だからです。言語はエラーが何であるかを知っています、なぜそれを修正しませんか? この例ではPythonを使用しましたが、これほど小さいものは基本的に普遍的だと感じています。

2
暗黙的に別のクラスに変換することのみを目的とするクラスを作成するのは悪いことですか?
Circleオブジェクトを作成できるライブラリを使用していて、円の半径と中心を指定してオブジェクトを定義できる状況を想像してみてください。ただし、何らかの理由で、必要なflavourパラメーターも受け取ります。ここCircleで、自分のアプリで本当に使用する必要があるとしましょう。ただし、アプリの目的で、フレーバーをFlavours.Cardboard毎回に設定できます。 この「解決」をするために、私は自分の作成Circleのみとり異なる名前空間でクラスをradiusし、centerパラメータとしてではなく、外部ライブラリのへの暗黙のコンバータがあるCircleだけで作成したクラスCircle(this.radius, this.center, Flavours.Cardboard)のオブジェクトを。したがって、他のタイプのが必要なすべての場所でCircle、自動変換を実行します。 そのようなクラスを作成するとどうなりますか?より良い解決策はありますか?私のアプリケーションが、この外部ライブラリの上に構築されたAPIであり、他のプログラマーが使用することを目的としていた場合、何か違いはありますか?

3
暗黙の引数変換に依存することは危険だと考えられていますか?
C ++には、引数の型が予期されたものでない場合に、パラメーターの型の一致するコンストラクターを自動的に呼び出す機能があります(適切な名前はわかりません)。 これの非常に基本的な例はstd::string、const char*引数付きのを期待する関数の呼び出しです。コンパイラーは、適切なstd::stringコンストラクターを呼び出すコードを自動的に生成します。 読みやすさに関しては、私が思うほど悪いのでしょうか。 次に例を示します。 class Texture { public: Texture(const std::string& imageFile); }; class Renderer { public: void Draw(const Texture& texture); }; Renderer renderer; std::string path = "foo.png"; renderer.Draw(path); いいですか?それとも行き過ぎですか?私がそれをするべきではない場合、どういうわけかClangまたはGCCにそれについて警告させることができますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.