過剰使用または悪用されたプログラミング手法[終了]


38

プログラミングで、過度に使用されている(IEが本来あるべきものよりも過度に使用されている)、または悪用されている、またはすべてに少し使用されているが、人々が試みる多くの問題に対する本当に良い解決策ではないテクニックがありますか?それで解決します。

正規表現、ある種のデザインパターン、アルゴリズムなど、まったく異なるものを使用できます。たぶん、人々は多重継承などを乱用すると思います。


33
IEは本来よりも過度に使用されることに同意しますが、それは主に非プログラマーによるものです。。。
エリックウィルソン

7
@FarmBoy-私は彼がIEを意味していたと思います。「Ie」は単に「つまり」の略で、ラテン語で完全に記述されたものは「id est」です。
ラファエル

今すぐ修正:)
アント

4
どんなテクニックでも(そしてしばしば乱用されます)、次の特効薬として提示するだけで、すべての問題をネイルとして扱う人を見つけることができます(隠phorを混ぜる)。
ChrisF

8
@Rapheal-もちろん冗談でした。教育をありがとう。
エリックウィルソン

回答:


73

コード内のコメント

大学教授が、次のコードはforループであり、1からxの数まで反復するという10行のコメントを書くことを生徒に教える必要がないことを理解してほしい。私はコードでそれを見ることができます!

最初に自己文書化コードを記述し、次に適切に自己文書化できないものについて適切にコメントするように指導します。ソフトウェアの世界がより良い場所になるでしょう。


26
自己文書化コードはではありません。また、教授はこれを行い、学生に問題の概念とそのアプローチ方法を教えます。さらに、私は誰もがあまりにも多くのドキュメントについて文句を言うのを見たことがない。ドキュメントであるという警告は正しいです。
Woot4Moo

24
@ Woot4Moo:あなたが読んだ場合Clean Code、ファウラーは、古いドキュメントはドキュメントがないよりも悪いこと、そしてすべてのコメントが古くなり、ドキュメントのコードから移行する傾向があることを明確に述べています。その本全体は、自己文書化コードの書き方に関するものです。
スコットホイットロック

12
コメントをコードに置き換えるように教えることは良い出発点です...
Shog9

15
+1。実際には、実際のコードで「loopVar ++; // loopVarをインクリメント」というコードを見てきました。AAAAAAAAAAAAARRRRRGH!
ボビーテーブル

7
@Bill:比較的複雑な場合でも、一般的なロジックと制御構造を文書化する必要はありません。基本的に、言語を知っている優秀な開発者がコードを分析することで解決できるはずのものは、コメントする必要はありません。例えば。内部にいくつかのブレークがあるネストされたforループのセットなど。しかし、コメントすべきは、コードがこれらの決定を行う理由のアプリケーション固有の推論です。「明日、新しいプログラマーが会社で仕事を始めてコードを見た場合、コメントのヒントなしでそれが意味をなすのでしょうか?」
ボビーテーブル

57

シングルトンデザインパターン。

確かに、これは有用なパターンですが、新しいプログラマーはこのパターンについて学ぶたびに、作成するすべてのクラスにそれを適用しようとし始めます。


私は毎日、フレームワークのためにこの不十分に設計された言い訳を使用しています。codeigniter.com/user_guide/libraries/email.html彼らは、OOPが関数の前に$this->。PHPは腐った言語なので、フレームワークが優れているとは期待できません。
Keyo

7
シングルトンを実装し、悔い改めないプログラマーは、彼または彼女が犯した罪のために燃えるような地獄で燃えると思います。

2
私はシングルトンをプロとしてのキャリアで一度(マルチタスクのコンテキストで)実装しましたが、罪を書き直して悔い改めなければなりませんでした。
スポイケ

3
シングルトンはいくつかの点で役立ちますが、ほとんどの場合、使用すべきではないときに使用されます。それは、シングルトンが決して使用されるべきではないことを意味しません-何かが乱用されたからといって、それが正しく使用できないことを意味しません。
コンフィギュレー

2
@Rapahel:だからこそ、デザインパターンを勉強するのは良いことだとは思いません。
コンフィギュレー

53

ダムプログラミングを保護するための最も邪悪なもの。すべてをtryキャッチに入れ、キャッチで何もしない

        try
        {
            int total = 1;
            int avg = 0;
            var answer = total/avg;
        }
        catch (Exception)
        {

        }

何もせず、愚かなロジックを処理するように設計されたtry catchを見ると、身震いします。一般に、try catchは使いすぎですが、場合によっては非常に便利です。


4
おもしろいこと-私はちょうどそれを何百回も行うファイルを編集してきましたが、それには正当な理由があります。これは単体テストファイルで、さまざまなメソッドが予想どおりに例外をスローすることをテストします。tryブロックには呼び出しと「予想されるスローは発生しませんでした」レポートが含まれます。例外は予期されたものであり、正しいため、修正アクションはありません。ユニットテストは明らかに特別なケースですが、実際のコードでも同様のケースがあります。赤い旗、はい、しかし絶対的な規則ではありません。
Steve314

5
@Steveが説明したケースは、まれなエッジ条件です。もう1つ考えられるのは、コードのログです。ログ自体が失敗した場合、例外をログに記録しようとしても、アプリを中断しても意味がありません。
-dbkk

1
@dbkk-エッジ条件に同意し、本当に例外をキャッチする必要があるが修正アクションを必要としない場合は、キャッチブロックにコメントを追加して、それを落ち着かせるために不可欠であると説明しますメンテナー。単体テストではそれほど珍しいことではないので、その場合はコメントを削除します。
Steve314

5
エラーが発生すると、次に
jk。

2
@ jk01-例外は(必ずしも)エラーではありません。条件がエラーであるかどうかは、コンテキストによって異なります。たとえば、ファイルが必要ない場合、「ファイルが見つかりません」はエラーではありません。おそらく、存在する場合と存在しない場合があるオプションの設定ファイルであり、ファイルが存在しない場合はデフォルトをそのままにしておくことができます(したがって、キャッチ後に修正アクションは必要ありません)。
Steve314

47

StackOverflowを使用して問題を解決するのではなく、問題を解決します。

SOに関する豊富な知識を見つけた新しいプログラマーは(あまりにも頻繁に)考えて物を試す前に投稿します。

私の時代、私たちは本からコーディングしなければなりませんでした。インターネットもSOもありませんでした。今私の芝生を下車します。


28
私は認めなければならない、私はSOに関するいくつかの質問の大胆さにflる。なぜなら、彼らは毎日何度も尋ねられ、明らかにまったく検索していないからです。さらに悪いことに、彼らはコミュニティを無料のアウトソーシングサービスとして扱っています。
11

2
@dbkk:stackoverflow.com/questions/4665778/…- >最初のコメント「これを試したことはありますか?」
マチューM.

5
私は本から学び始めましたが、基礎を学んだ後は、オンラインフォーラムのディスカッションから他のほとんどすべてを学びました。尋ねることではなく、主に(そして最初は排他的に)読むことによって。この方法は、いくつかのプログラミング言語を耐え難いほどの深さで(多くの隅々にまで)教えてくれましたが、それは悪い方法ではないと思います。
コンラッドルドルフ

1
@Konrad Rudolph:その方法はよくて賢明で、質問を読み、よく検索します。質問は、回答者が回答を理解するためのフレームワークを持っているときに最もよく行われます。多くの場合、人々は(まだ)理解する能力がない質問をします。
11

3
問題は、シンプルなグーグル検索で答えられる非常に簡単な質問をする/答えるために多くの担当者を与えることでこれを奨励することです。本当にやりたいからと答えるだけの非常に難しい質問です。
IAdapter

36

明らかにOOP。それは非常に価値がありますが、誤って使用すると、明確なコードがかなり簡単にわかりにくくなり(RでのS4プログラミングの例が思い浮かぶ)、不必要な大きなオーバーヘッドが発生し、パフォーマンスに多大な時間がかかります。

別のことは(たとえばPerlで)OOPはしばしば同じことを逆に書くことになります:これのresult = $object ->function(pars)代わりにresult = function(object, pars)時々理にかなっていますが、手続き型プログラミングと混ぜるとコードを読むのはかなり混乱する可能性があります。それとは別に、設計を改善しない場合はオーバーヘッドを増やすだけです。それは、シングルトンパターンについても言われていることに帰着します。すべてではなく、使用する必要があります。

私は自分でOOPを使用していますが、私の分野(科学計算)でのパフォーマンスは大きな問題であり、すべての学生がJavaを取得するようになった現在、OOPはしばしば乱用されています。大きな問題の処理、概念化などに最適です。ただし、たとえばBioPerlでDNAシーケンスを使用する場合、毎回オブジェクトを使用し、ゲッターとセッターを一貫して使用すると、計算時間が10倍になります。コードが数時間ではなく数日間実行されている場合、その違いは本当に重要です。


6
@Craige:私は自分でOOPを使用していますが、私の分野(科学計算)でのパフォーマンスは非常に重要です。大きな問題の処理、概念化などに最適です。ただし、たとえばBioPerlでDNAシーケンスを使用する場合、毎回オブジェクトを使用し、ゲッターとセッターを一貫して使用すると、計算時間が10倍になります。コードが数時間ではなく数日実行されている場合、その違いは本当に重要です。
ジョリスメイズ

1
@Craige:メソッドチェーン(などFoo.DoX().DoY().DoZ())は便利ですが、何かを行う唯一の方法ではありません。以下のような関数組成物は、(doZ . doY . doX $ foo完全に有効な代替手段です。
。アノン

1
@Joris:私が長い間疑問に思っていたもの(私自身は生物情報学者):パフォーマンスがそれほど重要なら、なぜC ++ではなくPerlを使用するのですか?ランタイムからファクター10を削るのが心配な場合(有効な懸念!)、C ++に切り替えるとすぐに満足できます。もちろん、この言語はひどい…ですが、Perlもそうです…そして、C ++用の優れたバイオインフォマティクスライブラリがあります。
コンラッドルドルフ

1
@コンラッド:それは依存します。BioPerlには、間違いなく、すべての言語の生物情報学者向けのほとんどのパッケージがあります(Pythonが追いついていると思います)。さらに、Perlでは多くの作業が行われているため、C ++ですべてを書き換えるよりもスクリプトを調整する方が簡単です。最後に、スクリプトが実行するときに完全なアプリケーションを作成するのに役立ちません。それが、Perlがまだそれほど多くある理由だと思います。そして正直、私は気にしません、私は言語が好きです。文字列とファイルの作業に関しては、私が知っている最高のものです。計算は明らかに他の言語で行われ、リンクされています(これは非常に簡単です)。
ジョリスメイズ

1
@Konrad:それはどのように行うかに依存します。すべてをPerlで行うことは可能ですが、Perlは他のツール、特にLinuxで簡単にリンクできます。Perlは、強力な文字列操作と他のアプリケーションにドロップされるデータセットの簡単な構築を備えた高度なbashスクリプトとしてよく使用されます。
ジョリスメイズ

27

ASP.NET Webformsで数年を過ごした後、私は明確に言わなければなりません。

スマートUI

Webフォームでレイヤー化されたテスト可能なアプリケーションを作成することは完全に可能ですが、Visual Studioでは、開発者がすべてのUIコードに散らばったアプリケーションロジックを使用して、データソースに緊密にバインドされたフォームにワンクリックで簡単に移動できます。

スティーブ・サンダーソンは、このアンチパターンについて、Pro ASP.NET MVCの本で説明したよりもはるかに優れていると説明しています。

スマートUIアプリケーションを構築するために、開発者は通常、一連のUIウィジェットをキャンバスにドラッグすることで最初にUIを構築し、次に可能なボタンクリックまたは他のUIイベントごとにイベントハンドラーコードを入力します。すべてのアプリケーションロジックは、これらのイベントハンドラーに存在します。ユーザー入力を受け入れて検証し、データアクセスとストレージを実行し、UIを更新してフィードバックを提供するロジックです。アプリケーション全体は、これらのイベントハンドラで構成されています。基本的に、これはVisual Studioの前に初心者を置くとデフォルトで出てくる傾向があります。この設計では、懸念の分離はまったくありません。すべてが融合され、発生する可能性のあるさまざまなUIイベントに関してのみ配置されます。ロジックまたはビジネスルールを複数のハンドラーに適用する必要がある場合、通常、コードはコピーアンドペーストされ、または、ランダムに選択された特定のセグメントが静的ユーティリティクラスに含まれます。非常に多くの明白な理由から、この種の設計パターンはしばしばアンチパターンと呼ばれます。


1
GUIは、少なくともある種の仕様コードに準拠する必要があります。代わりに空白のテキストファイルが提示された場合、彼が説明するプログラマーの方が良いとは思わない。

4
@qpr、私はそれについて知りません。空白のテキストファイルがある場合、何もできない可能性があります(これは単なるボーナスかもしれません)。
ケンヘンダーソン

WPFを使用することの多くの利点の1つは、MVVMを実装すると、このアンチパターンがスミレになります。
ロバートロスニー

2
これは千倍です。経験豊富な.NET開発者がこの「パターン」に依存しているのを見ることもあります。なぜなら、懸念の分離を理解したり、気にかけるよりも簡単だからです。ドラッグアンドドロップウィザードを使用しない場合でも、.NET WebForms開発で最も一般的な「パターン」は、分離コードイベントですべてを実行し、必要に応じてコードをコピー/貼り付けすることです。
ウェインモリナ

23

これはときどき見られますが、通常はブール式を完全に理解していないことが原因です。

if (someCondition == true)

16
これは、コードをより明示的にすることの利点を持っている
Pemdas

7
:私はこの質問を見ては順番にあると思いprogrammers.stackexchange.com/questions/12807/...
gablin

5
私はそれをしませんが、真剣に、それを乗り越えます。そこにはもっとひどい事態があります。:)
MetalMikester

4
たとえばboolisまたはhasで始まるs など、変数に適切な名前を付けた場合、でコードをより明示的にする必要はありません= true
誰も

3
@DisgruntledGoatは使用しないでください
コーリー

19

再実装コア(または他の方法で提供される)機能は、いずれか、その存在の無知のため、またはカスタマイズのために知覚される必要性。


2
学習は例外です。何かを勉強するとき、「車輪を再発明する」ことはしばしば有益です。
Maxpm

確かに-私はそれが本番ソフトウェアを作成するときにのみ関連することを指定する必要がありました。
l0b0

1
セキュリティに関連するものを実装する場合、これは特に悪いです。優れたセキュリティソフトウェアは、ほとんどの人が考えもしない攻撃を防ぎます。
デビッドソーンリー

私はこの方法があまりにも一般的だと思います。Xが必要です。自分で書きましょう!しかし、オープンソースパッケージYはどうでしょうか。いいえ、私たちの業界のすべての人と同じ極秘の企業秘密にカスタムソフトウェアが必要です。一般的なゴミソフトウェアは使用できません。
ウェインモリナ

18

継承。

is-aを強制しないでください。


6
問題は、直感的に「is-a」が非常に頻繁に意味をなすように見えることです(特に、すべての実装/契約関係は口語的に「is-a」として表現できるため)。これは実際には間違いであり、継承とインターフェイスの実装は根本的に異なることを理解するには、OOPをしっかりと理解する必要があります。
コンラッドルドルフ

@Konrad-絶対に同意します。私は人々に作曲から始め、インターフェイスに移り、最後に継承を検討するように勧めています。(もちろん、経験則です)。しかし、多分それは私が話しているVBの背景です; ;-)
マイクウッドハウス

1
ただし、これは主に言語設計の問題です。JavaやC#などの言語で「(実装)継承よりも合成を優先する」必要がある理由は、これらの言語では実装の継承が悪いからです。Bertrand MeyerのObject-Oriented Software Constructionを継承の過剰使用について批判する人もいますが、実際にEiffel(本で使用されている言語)を見ると、それは実装継承用設計されているため、実際には継承を使用しても大丈夫です組成。ではその場合、少なくとも。
ヨルグWミットタグ

14

市販のソフトウェアのカスタマイズ。

私はこれが有用であると認めることができますが、疑わしい利益のためにささいなことを成し遂げるためにどれだけのお金が費やされるのだろうかと思います。これは、企業がカスタマイズ可能であるソフトウェアのライセンスに数百万ドルではないにしても数十万ドルを費やす可能性がある場所です。最終的には、最初に購入したすべての新しいコードが追加されたため、カスタムアプリケーションになります。


これは、カスタムアプリケーションの場合ではないでしょうか?
ジェフ

13

コンパイラーをデバッガーとして使用します。

コンパイラの警告を無視するか、完全にオフにします。

グローバル変数。


18
「コンパイラをデバッガとして使用する」ことの何が問題になっていますか?実行時に問題になる前にコード内のエラーを指摘できるコンパイラーを持つことは、非常に大きな利点です。
メイソンウィーラー

3
コンパイラーが構文エラーと不正確な型マッチングのミスをキャッチすることに依存しています。動作エラーについては、テストケースに依存しています。
ギャブリン

5
問題は、プログラムの正確性を確保するためにコンパイラに依存し始めるときです。これはコンパイルされましたか?いいえ、この小さなセクションをぶらぶらさせて、それが修正されたかどうかを確認します。コンパイルしましたか?いいえ、あちこちに*を追加して、コンパイルされるかどうかを確認します。...電気ショック療法。明らかに、タイプミスを修正するのに役立ちます
Pemdas

2
あなたは、コーダーが暗闇の中で何とかして何とかしてコードをなんとかコンパイルしようとして盲目的にぶらぶらしているように言います。それはIMEの仕組みではありません。コンパイラは有用なエラーメッセージを提供し、エラーの場所を示します。通常、コンパイルしていない場合は自分で書いた新しいコードなので、何が間違っているのか、それが指摘されたらそれを修正する方法はかなり良いですでる。(もししている投げランダム* sの周りの場合はいますが、私は適用されない場合があります言ったので、何を、コンパイルエラーが最高に役に立たないことが知られているC ++、で働いている可能性があります。)
メイソンウィーラー

3
型システムと十分に型付けされたコードベースが十分にあれば、コンパイラに依存することは非常にうまく機能します。多くの場合、型システム、他の方法でテストを記述する必要がある重要な制約をモデル化できます(たとえば、型の弱いシステムで)。慎重に使用すると、コンパイラ(および特にその型チェッカー)はテストとデバッグに最適な資産であり、それに依存することには何の問題もありません。特に、コンパイラが構文エラーのみを表示できると言うのは誤りです。
コンラッドルドルフ

11

すべてのデザインパターン。

彼らは塩や砂糖のようなものです。あなたの食べ物にあるそれらのいくつかはそれを素晴らしいものにし、それらの多くはあなたの食べ物を吸います。

誤解しないでください。デザインパターンは素晴らしいテクニックです。よく使いました。しかし、時には、問題に一致しなくても、これらの「デザインパターンを使用する必要がある」というプログラマー(一部は私の元ボス)を見つけます!!!

1つの例は、「Linear / Sequential Collections」向けの「Visitor Pattern」です。一度、ツリーデータ構造で作業する必要がありました。各アイテムを「訪問」するために、非デザインパターンメソッドをコーディングし、元のボスが「訪問者パターン」の使用または適合を主張しています。次に、セカンドオピニオンのためにネットを閲覧します。まあ、他のプログラマーも同じ状況と同じ解決策を持っています。そして、それを「ツリー/階層訪問者パターン」と呼びます。新しいデザインパターンとして

「Design Patterns」ブックの新しいバージョンで、既存のパターンに新しいパターンとして追加されることを願っています。


3
私はデザインパターンを決して使用しませんが、コード内で自然に現れることもあります。
コンフィギュレー

格言はどうですか?パターンを使用していることを知らずにパターンを使用し始め、パターンについて学習し、どこでも使用します。次に、パターンが第二の性質になるので、使用していることを知らずにパターンを使用し始めますか?
ウェインモリナ

2
@configurator設計パターンについて読んだとき。また、私と他の開発者が既にそれらの一部を使用していることも発見しました
;

9

フロー制御として例外を使用します。この答えに似ていますが、異なります。

例外を飲み込むことは、コード内のバグを見つけるのが難しい、不可解なことを引き起こすため、悪い形です。一方、フロー制御として例外を使用すると、コードの効率が大幅に低下し、概念的にずさんになるため、悪いです。

例外処理は、数字が予想されるアルファベット文字を入力するようなものではなく、本当に例外的な(duh)予期しないシナリオを処理するためにのみ使用する必要があります。この種の例外の悪用は、Javaの世界の悪いプログラマーの間では非常に一般的です。


非効率なコードを作成する例外は、言語に依存します-スタックフレームなどを作成します。Squeakでは、スタックが完全に具体化されるため、例外を使用しても使用しなくても違いはありません。(言い換えると、例外は言語ではなくライブラリの一部です。)ただし、例外制御の制御フローの操作は混乱を招きます:lshift.net/blog/2011/01/04/try-again-with-exceptions shows私が最近見つけたループ使用例外。
フランクシェラー

最後の段落についても、あなたの言語に依存します。Common Lispの例外(「条件」)は、ほとんどの言語の例外の概念の厳密なスーパーセットです。ここの例を参照してください:gigamonkeys.com/book / ...すべてと同様に、あなたは行き​​過ぎです!
フランクシェラー

可読性と保守性はパフォーマンスよりも重要です。成功のために例外を使用するケース(「フロー制御」という意味)は非常にまれですが、複雑な再帰検索などでよりクリーンなコードを提供できます。概して、私も同意します。例えば、私は範囲の外出のためにそのリターン偽(イテレーションの終わりに共通)イテレータメソッドを持つコンテナを持っていますが、反復子は「ヌル」(内部矛盾のいくつかの種類の可能性記号)である場合に例外を投げます
Steve314

7

過度のデータ隠蔽により、柔軟性に欠けます。

実装の抽象化と非表示が良いことは誰もが知っていますが、常により良いとは限りません。やり直すと、要件の変更に対応できない柔軟性のない結果を得ることができます。変更を処理するには、その変更を処理する必要があるクラスを変更する必要があるだけでなく、データが隠れているにもかかわらず、以前は必要なかった情報にアクセスできる方法を作成する必要があります。

問題は、すべてのコンテキストで適切なバランスを見つけるすべての問題と同様に、経験が必要なことです。



6

可変状態とループ。あなたはそれらをほとんど必要とせず、ほとんど常にそれらなしでより良いコードを取得します。

たとえば、これはStackOverflowスレッドから直接取得されます。

// ECMAScript
var thing, things_by_type = {};
for (var i = 0; i < things.length; i++) {
    thing = things[i];
    if(things_by_type[thing.type]) {
        things_by_type[thing.type].push(thing);
    } else {
        things_by_type[thing.type] = [thing];
    }
}

# Ruby
things_by_type = {}
things.each do |thing|
  (things_by_type[thing.type] ||= []) << thing
end

彼らは両方とも同じことをしています。しかし、私は彼らがをしているのか分かりません。幸いなことに、質問は実際に彼らが何をしているかを説明しているので、次のように書き直すことができました。

// ECMAScript
things.reduce(function (acc, thing) {
    (acc[thing.type] || (acc[thing.type] = [])).push(thing);
    return acc;
}, {});

# Ruby
things.group_by(&:type)

// Scala
things groupBy(_.type)

// C#
from thing in things group thing by thing.Type // or
things.GroupBy(thing => thing.Type);

ループも変更可能な状態もありません。さて、わかりました、明示的なループとループカウンターはありません。

コードははるかに短くなり、はるかにシンプルになり、コードが何をすべきかの説明に似たものになり(特にRubyの場合は、「タイプごとにグループ化する」と言われます)、エラーが発生しにくくなりました。ループインデックスと終了条件がないため、ループインデックスと終了条件を使用して、アレイの端を越えて実行される危険、フェンスポストエラー、オフバイワンエラーはありません


私はあなたの「修正された」ECMAScriptの2行目で、リスト(acc[thing.type] || (acc[thing.type] = []))への `= [thing] , unless you want to add thing`を2回読むのではなく、...と思っています。
オースティンハイド

@オースティンハイド:あなたは正しい。
ヨルグWミットタグ

1
このecmascriptの例は、多くのプログラマーにとって理解不能です。あまりにも多くの構文上のトリックに依存しています。ループには、ジュニア開発者にとって自明であるという利点があります。
ジョーリセブレヒト

6

モッキング。コードに過度にデカップリングするための人工的な要件が多すぎて、ラビオリのコードが過剰に設計されており、手続き型または機能的な設計が問題の単純な解決策である場合に、OOスタイルの設計を喉に押し付けます。


理論的に同意しました。モックは便利ですが、持っている必要はありません。
ウェインモリナ

モッキングの侵襲性は、使用する言語によって異なります。C#では、非常に侵襲的であり、不要なインターフェイスが大量に追加されます。
フランクヒルマン14

3

世界中のDelphiプログラマーは、過去2年間に、Unicode変換全体が原因で文字配列を使用してバイトを格納するのがいかに悪いかを発見しました。

そして、「すぐに」64ビットに変更を加えたいとき、リストに整数を格納することがどれほど悪いかを学びます。


2
ボーランドが基本的にAnsiStringと同じであるが、ブロブで使用するためのDataString型を宣言し、人々がそれを知っていることを確認した場合、Unicodeの問題の大部分は発生しなかったと思います。
メイソンウィーラー

2

プロパティ。これは議論の余地があることはわかっていますが、.netではプロパティが非常に使いすぎていると感じています。

これらの2行の違いは何ですか?

public string Property { get; set; }

public string Field;

開発者にとっての違いは、まったくありません。あなたはライブラリを書いている、そうならばコンパイルされた形式は、ほんの少しの違いそのライブラリがプログラムでアップグレードされようとしている、あなたはそのプラグインのインターフェイスを書いている場合は、たとえば(プログラム自身を再コンパイルすることはできませんソフトウェアの複数のバージョンで機能する必要があります)、パブリックフィールドはプロパティに置き換えることができないため、パブリックフィールドを使用しないでください。それ以外の場合、フィールドを使用するか、修飾子を付けずに自動プロパティを使用するかにまったく違いはありません


1
同意した; 100%を知っていれば、「プロパティ」を取得/設定するために何もする必要はありません。プロパティを持つ理由は何もありません。ただし、何かを行う必要がある場合(たとえば、値が変更されたことをログに記録する場合)は、プロパティを使用する必要があります。個人的に私がする十分に大きな違いが表示されていないではないあなただけの場合には、プロパティを使用して行う(私が知っている、知っている、後でそれを変更する必要があるとYAGNI私は、この場合には逸脱感じていないのコストは何もありません)
ウェイン・モリーナ

2
@ウェイン:に変更;する{ get { ... } set { ... } }よりも多くの仕事に変更{ get; set; }するのは{ get { ... } set { ... } }どうですか?
コンフィギュレー

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