問題タブ [paradigms]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 手続き型コードベースを使用して PHP で単体テストを作成するにはどうすればよいですか?
私は単体テストの利点についてほぼ確信しており、PHP で書かれた既存の大規模なコードベースにこの概念を適用したいと考えています。このコードの 10% 未満はオブジェクト指向です。
いくつかの単体テスト フレームワーク (PHPUnit、SimpleTest、および phpt) を見てきました。ただし、手続き型コードをテストするこれらの例は見つかりませんでした。私の状況に最適なフレームワークは何ですか? 非 OOP コードを使用して PHP の単体テストを行う例はありますか?
model-view-controller - MVC のどこが悪いのでしょうか?
ここでのいくつかの質問と MVC に関するさまざまな記事を読んでいて、ペイント アプリのような GUI イベントを多用するアプリケーションにも適用できることがわかりました。
MVCが悪いものであり、その使用が賢明でない状況を誰かが挙げることができますか?
編集: ここでは特に GUI アプリケーションについて話しているのです!
multiple-inheritance - ミックスインとトレイト
Mixins と Traits の違いは何ですか?
ウィキペディアによると、Ruby モジュールは一種の特性です。どうして?
inversion-of-control - コンポーネント駆動型開発とは何ですか?
コンポーネント駆動型開発の用語は、特に広く使用され始めています。制御の反転に関連して。
- それは何ですか?
- それはどのような問題を解決しますか?
- それが適切なのはいつですか、そうでないのはいつですか?
oop - OOPへの重要な挑戦者
私が理解していることから、OOPは大規模プロジェクトで最も一般的に使用されるパラダイムです。また、大規模なシステムの一部の小さなサブセットが他のパラダイム(たとえば、宣言型のSQL)を使用していることも知っています。また、低レベルのコンピューティングではOOPが実際には実現可能ではないことも認識しています。しかし、通常、より高いレベルのソリューションの断片は、ほとんどの場合、OOP方式でまとめられているように思われます。
真に非OOPのパラダイムが実際に大規模なソリューションにとってより良い選択であるシナリオはありますか?それとも、最近では前代未聞ですか?
CSの勉強を始めて以来、これは不思議に思っていました。OOPは、決して超えられないプログラミングの涅槃であると簡単に感じることができます。
variables - UIベースのプログラム構造を使用して成功しましたか?
ユーザーインターフェイスの部分に基づいてソースコードを構造化したことがありますか?たとえば、UIが次のもので構成されている場合:
- いくつかのプロパティを表示するためのGridView
- 3Dレンダリングパネル
- アクティブなツールを選択するためのパネル
次に、変数と関数に多かれ少なかれ次のように名前を付けてグループ化します。
これについてどう思いますか?このアーキテクチャは長期的に機能しますか?
PS。このソリューションは、Front-ahead-designエイプリルフールのジョークhttp://thedailywtf.com/Articles/FrontAhead-Design.aspxを思い出させるかもしれませんが、私の質問は深刻なものです。
編集
この種のコードを半年間維持および拡張してきました。アプリケーションはメインの.csファイルで3000行を超え、約2000行がより小さなファイル(汎用ヘルパー関数とクラスを含む)に分散されています。一般化してメインファイルから取り出す必要のあるコードの部分はたくさんあり、私は常にそれに取り組んでいますが、最終的にはそれほど重要ではありません。コードの構造と細分化は非常に単純なので、ナビゲートするのは本当に簡単です。UIに含まれる主要なコンポーネントは7つ未満であるため、デザイン全体を一度に頭に収めても問題はありません。(少し休憩した後)このコードに戻って、どこから始めればよいかすぐにわかるのはいつでも楽しいことです。
私の場合、この巨大な手続き型の構造が機能する理由の1つは、c#でのUIプログラミングのイベント型の性質にあると思います。ほとんどの場合、このコードが行うのは、このプロジェクトに本当に固有のさまざまな種類のイベントの実装です。一部のイベント関数はすぐに数ページの長さのモンスターに成長しますが、イベントハンドラー間の結合はそれほど緊密ではないため、後でリファクタリングして圧縮するのが簡単になります。そのため、他のプロジェクトがこのプロジェクトで使用するのと同じ実装部分を必要とし始めたときに、Iamは意図的に一般化とリファクタリングを残します。
PSを使用して、VisualStudioでFindNextSelection-およびFindPrevSelection-マクロを使用している3000行のコードをナビゲートできるようにします。いくつかの変数を左クリックした後、F4を押してその変数の次のインスタンスにジャンプし、F2を押して前のインスタンスにジャンプします。変数名の一部を選択して、部分的な名前の一致間をジャンプすることもできます。これらのショートカットがなければ、私はずっと前にほとんど間違いなく道に迷いました:)
paradigms - エージェントソフトウェアの高粒度適応社会?
私は、私たちの社会が自由な個人の集まりによってどのように行動にインセンティブを与え、それらの個人の仕事が社会全体の要件を満たすかについて考えていました. たとえば、人々は働くことで貢献し、お金を稼ぎ、そのお金を使って他の人の貢献から公正な分け前を得ます。それはほとんどの場合機能します...しかし、人々が寄付をせずに他人の寄付を不当に共有することを可能にする盗みなどを防ぐために警察が必要です。
マービン・ミンスキーは「Society of Mind」という本を持っていて、これらの方向に沿っていくつかのアイデアを発展させた可能性があります。そして、それらは創発的行動、セルオートマトンなどに関するニューラルネットの古いアイデアでした.そして最近、協調エージェントなどに関する研究があります.
しかし、システム全体として機能し、進化するように設計された粒度の高いエージェントの大規模なシステムを設計した人は誰もいないと思います (つまり、警察などの恒常性のためのさまざまな役割)。これらの線に沿った作品を知っていますか?
oop - AOP... OOP の学習をやめるべきですか?
私はオンライン ドキュメントをざっと読んだり、wiki エントリ、投稿、ブログを読んだりしましたが、まだ戸惑っています。
- 一言で言えば、アスペクト指向プログラミングとは何ですか?
- オブジェクト指向プログラミングよりも優れているのでしょうか? OOP を学習解除する必要がありますか?
- そうでない場合、いつどちらを使用するかをどのように知ることができますか? 2つの主な違いは何ですか?
- 一方を他方にリファクタリングできますか?
私は常にOOの男であり、反逆罪を犯す必要があるかどうかを知りたい.
真剣に、私はすぐに新しいプロジェクトを開始し、最初に正しい選択をしたいと思っています.
oop - OOの制約が大きいプログラミングパラダイム
おい。OOに関して非常に厳しい制限があるプログラミングパラダイムについてどこかで読んだことを覚えています。ネストされたifやelseを完全に禁止し、クラスに関連付けられていないグローバル名前空間の関数などを回避します。おそらくかなり有名です。誰かがそれがどのように呼ばれるか知っていますか?ありがとう。
例を挙げましょう。これは完全に深刻なパラダイムではないはずです。「OOスタイル」を改善するための厳しい制限です。たとえば、FizzBuzzプログラムでは、整数から継承し、メソッド「representMyself」を持つオブジェクトと、メソッド「representAll」などを使用してFizzBuzz番号の配列を保持するオブジェクト「FizzBuzzNumbersRange」を作成します。などなど。
perl - プログラミングパラダイムを学ぶ適性は、文化や母国語の文法に影響されますか?
さまざまなプログラミングパラダイムに関して、さまざまな人がさまざまな適性を持っていることはよく知られています(たとえば、非手続き型、特に関数型言語を学ぶのに苦労している人もいます。ポインタを理解するのに苦労している人もいます。それについての考察については、JoelSpolskyのブログを参照してください。理解するのに苦労している人もいます。再帰)。
私は最近、誰かの母国語の文法が数学の学習速度にどのように影響するかを調べた研究について読んでいました。現在その記事を見つけることができませんが、簡単なグーグルでこの参照を見つけました。
そのため、誰かの母国語や第一言語が、さまざまなプログラミングパラダイムに対する適性に影響を与えるのではないかと考えました。私はポジティブな影響についてもっと興味があります-たとえば、誰かが特定のパラダイムをより簡単に/より速く学ぶことを可能にするいくつかの特性、たとえば、母国語の文法は非常に再帰指向です。
明確にするために、私は文化/言語のグラマーが、異なる人の間のプログラミングに対する全体的な適性にどのように影響するかではなく、さまざまなパラダイムに対する同じ人の適性の違いにどのように影響するかを探しています。
重要:私が興味を持っている唯一の答えは、科学的研究への言及か、特定の文化/言語に精通している誰かからの個人的な観察であり、彼ら自身の経験からのものも含まれます。
たとえば、あなたが中国語を話すか、非常に多くの中国語を母国語とするプログラマーと広範囲に協力しない限り、あなたの第一言語である中国語がどのように影響するかについてのあなたの意見には興味がありません。
科学的研究に基づかないあなたの推測は大丈夫ですが、あなたの観察のもっともらしい原因についてあなたの推論を提供することを忘れないでください。
私はカルチャーバッシングには興味がありません(そのような表彰は削除されるか、削除のフラグが立てられます)。
私は文化の構築にも特に興味はありません。Linusはフィンランド出身で、Tetrisはロシアで書かれ、LarryWallはアメリカ人です。どんな文化/国でも、どんな分野でも素晴らしい心を生み出すことができます。平均に興味があります。