タグ付けされた質問 「programming-practices」

プログラミングプラクティスは、ソフトウェアの開発で一般的に使用される、またはあまり使用されないプラクティスです。これには、アジャイル開発、かんばん、コーディングのショートカットなどが含まれます。

16
ほぼ確実に発生する可能性のない競合状態を処理する必要がありますか?
メインスレッドがUIをほぼ瞬時に更新し、他のスレッドがネットワーク経由でデータをポーリングしているGUIアプリケーションや、ジョブの完了に5〜10秒かかることが保証されているGUIアプリケーションのようなものを考えてみましょう。 私はこれについて多くの異なる回答を受け取りましたが、統計的不可能の競合状態である場合、それをまったく心配しないと言う人もいますが、10-53%さえあればあなたは数字ではなく、これは私が聞いたものです)競合状態のために起こっているブードゥー教の魔法、常にそれを必要とするスレッドのロックを取得/解放します。 あなたの考えは何ですか?このような統計的に不可能な状況で競合状態を処理するのは、プログラミングの良い習慣ですか?または、読みやすさを妨げるためにコードの行を追加することはまったく不要であるか、逆効果になるでしょうか?


3
コンビネーターとは何ですか?また、それらはプログラミングプロジェクトにどのように適用されますか?(実用的な説明)
コンビネーターとは何ですか? を探しています: 実用的な説明 それらの使用例 コンビネーターがコードの品質/汎用性を改善する方法の例 私は探していません: 作業の完了に役立たないコンビネータの説明(Yコンビネータなど)

14
RESTful APIデザイン。行がない場合、何を返す必要がありますか?
現在、Slim Frameworkを使用してソーシャルネットワーク用のAPIをコーディングしています。私の質問は、json構造に返す行がない場合のベストプラクティスは何ですか? この呼び出し/ v1 / get / moviesがテーブルmovie namesから2行を返すとしましょう: [ {"name": "Ghostbusters"}, {"name": "Indiana Jones"} ] しかし、それから/ v1 / get / booksを呼び出すと、そのテーブルには行がありません。空の構造を返すだけですか? [ ] ...または、メッセージとエラーコードの方が良いでしょうか? [ "errors": { "message": "no matches found", "code": 134 } ] どちらが良い方法ですか?(APIはiOSおよびAndroidアプリで使用されます)ありがとう!


11
「推論するのは簡単」-それはどういう意味ですか?[閉まっている]
他の開発者がそのフレーズを使用して、いくつかのパターンを「宣伝」したり、ベストプラクティスを開発したりすることを何度も耳にしました。ほとんどの場合、このフレーズは、関数型プログラミングの利点について話しているときに使用されます。 「推論するのは簡単」というフレーズは、説明やコードサンプルなしでそのまま使用されています。だから私にとっては、次の「話題」の言葉のようになり、より「経験のある」開発者が講演で使用します。 質問:「推論するのは簡単ではない」例をいくつか挙げてください。「推論するのは簡単」の例と比較できますか?

14
Reflectionの使用に問題はありますか?
理由はわかりませんが、リフレクションを使用するときは常に「ごまかし」のような気がします-おそらく、自分が取っているパフォーマンスヒットのせいでしょう。 私の一部は、それがあなたが使用している言語の一部であり、あなたがしようとしていることを達成できるなら、なぜそれを使用しないのかと言います。私の他の部分は、リフレクションを使用せずにこれを行うことができる方法がある必要があると言います。多分それは状況次第だと思います。 リフレクションを使用する際に注意する必要のある潜在的な問題は何ですか?従来の解決策を見つけようとするのにどれだけの労力を費やす価値がありますか?

20
私が持っているすべてが大きなアイデアである場合、大規模なプロジェクトを開始する手順は何ですか?[閉まっている]
私はコンピューター工学の学生です。大きなプロジェクトをどのように処理できるか考えてきました。より効率的かつ効果的な方法で目標を達成するための最初のステップは何ですか? プロジェクトを思いついたとき、どのようにそのプロジェクトに取り組み始めるべきかわかりません。多くの場合、私はそれを無視します。ただし、プロジェクトのアイデアはもう無視したくありません。 今、私はあなたのすべてに尋ねています、誰でも彼/彼女の経験を共有できますか?私が持っているすべてがアイデアであるとき、どのようにプロジェクトを始めるべきですか?

15
クリーンなコード:いくつかのパラメーターを持つ関数[終了]
Robert C. MartinによるClean Codeの最初の章を読みましたが、かなり良いように思えますが、疑問があるのですが、ある部分では、関数のパラメーターが少ないほど良い(認知的に)ことは言及されています可能な限り、3つ以上のパラメータが関数には大きすぎることを示唆しています(私は非常に誇張されており、理想的です)ので、私は疑問に思い始めました... グローバル変数を使用し、関数に多くの引数を渡すという慣習はどちらも悪いプログラミング慣行ですが、グローバル変数を使用すると、関数のパラメーターの数を大幅に減らすことができます... だから私はあなたがそれについて考えることを聞きたかったのですが、関数のパラメータの数を減らすためにグローバル変数を使う価値はありますか?どのような場合になりますか? 私が思うに、それはいくつかの要因に依存しているということです: ソースコードのサイズ。 関数の平均のパラメーターの数。 関数の数。 同じ変数が使用される頻度。 私の意見では、ソースコードのサイズが比較的小さい場合(600行未満のコードなど)、多くの関数があり、同じ変数がパラメータとして渡され、関数には多くのパラメータがあり、グローバル変数を使用する価値がありますが、知りたい... 私の意見を共有しますか? ソースコードが大きい他のケースなどについてどう思いますか? PS。私はこの投稿を見ました、タイトルは非常に似ていますが、彼は私が知りたいことを尋ねません。

3
どちらがより良い習慣ですか-インスタンスまたは静的としてのヘルパーメソッド?
この質問は主観的なものですが、ほとんどのプログラマーがこれにどのようにアプローチしているかに興味がありました。以下のサンプルは擬似C#ですが、これはJava、C ++、およびその他のOOP言語にも当てはまります。 とにかく、クラスでヘルパーメソッドを記述するとき、静的メソッドとして宣言し、ヘルパーメソッドで必要な場合はフィールドを渡すだけです。たとえば、以下のコードを考えると、メソッド呼び出し#2を使用することを好みます。 class Foo { Bar _bar; public void DoSomethingWithBar() { // Method Call #1. DoSomethingWithBarImpl(); // Method Call #2. DoSomethingWithBarImpl(_bar); } private void DoSomethingWithBarImpl() { _bar.DoSomething(); } private static void DoSomethingWithBarImpl(Bar bar) { bar.DoSomething(); } } これを行う私の理由は、ヘルパーメソッドが実装を読み取らなくても、他のオブジェクトに副作用がある可能性があることを(少なくとも私の目には)明らかにするからです。この手法を使用するメソッドをすばやく理解できるため、デバッグに役立ちます。 あなたはどちらか好む独自のコードでやってそうするためのあなたの理由は何ですか?

14
ほとんどのプログラマーはコードをコピーして貼り付けますか?[閉まっている]
誰かのコードをカット&ペーストすることは、自分で書くよりも長い目で見れば時間がかかることを非常に早い段階で学びました。あなたが本当にそれを理解しない限り、私の意見では、カットアンドペーストのコードにはおそらく解決するのに悪夢のような問題があります。 誤解しないでください。他の人のコードを見つけて、そこから学ぶことが不可欠ですが、アプリに貼り付けるだけではありません。私たちは、書き換え概念を我々のアプリに。 しかし、私はカットアンドペーストをする人のことを常に聞いています。他の人からのコメントもあり、それが一般的な慣行であることを示しています。 それで、ほとんどのプログラマーはコードをカット&ペーストしますか?

6
`c> = '0'`または` c> = 48`をチェックする方が良いですか?
同僚と話し合った後、ベストプラクティスに従って、Javaでcharデータ型をどのように扱うかについて「哲学的な」質問をしました。 入力としてString 's'が与えられた場合、その中に存在する数字の数を数える必要がある単純なシナリオ(明らかに、これは私の質問に練習の意味を与えるための非常に単純な例です)を想定してください。 これらは2つの可能な解決策です: 1) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= 48 && s.charAt(i) <= 57) { n++; } } 2) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= '0' && s.charAt(i) <= '9' ) { n++; } } どちらがより「クリーン」でJavaのベストプラクティスに準拠していますか?

4
抽象化が多すぎると悪いことはありますか?
プログラマーとして、私たちの目標は、与えられたドメインモデルとビジネスロジックを適切に抽象化することだと思います。しかし、この抽象化はどこで止めるべきですか?抽象化とそのすべての利点(柔軟性、変更の容易さなど)と、コードとそのすべての利点の理解の容易さとの間でトレードオフを行う方法。 私は過度に抽象化されたコードを書く傾向があり、それがどれほど良いのかわかりません。私はよく、2つの部分で構成されるマイクロフレームワークのようなものを書く傾向があります。 マイクロフレームワークに接続されたマイクロモジュール:これらのモジュールは、単一ユニットとして理解、開発、および保守が容易です。このコードは基本的に、要件で説明されている機能的な機能を実際に実行するコードを表しています。 接続コード; 今ここに私は問題があると信じています。このコードは、時には非常に抽象化されていて、最初は理解しにくいため、複雑になる傾向があります。これは、純粋な抽象化、現実のベース、および提示されたコードで実行されるビジネスロジックにすぎないという事実により発生します1。この理由から、このコードはテスト後に変更されることはありません。 これはプログラミングの良いアプローチですか?多くのモジュールで非常に断片化されたコードの変更が非常に理解しやすく、抽象化POVからの変更のないコードは非常に複雑であるということですか?すべてのコードが均一に複雑である(つまり、コード1がより複雑で相互にリンクされ、コード2がより単純である)ため、コードを見ている人は合理的な時間内にそれを理解できますが、変更は高価であるか、上記のソリューションは優れています「コードの変更」は理解、デバッグ、変更が非常に簡単であり、「コードのリンク」は一種の困難です。 注:これはコードの可読性に関するものではありません!1と2のコードはどちらも読み取り可能ですが、2のコードにはより複雑な抽象化があり、コード1には単純な抽象化があります。

6
決して公開されることのないコードの防衛的なプログラミング慣行に従うことはどのくらい必要ですか?
私はカードゲームのJava実装を書いているので、ゾーンと呼ぶ特別なタイプのコレクションを作成しました。Javaのコレクションのすべての変更メソッドはサポートされていませんが、ゾーンAPIにmove(Zone, Card)は、指定されたゾーンからそれ自体にカードを移動するメソッドがあります(パッケージプライベートテクニックによって達成されます)。これにより、ゾーンからカードが取り出されず、単に消えることを保証できます。別のゾーンにのみ移動できます。 私の質問は、この種の防御コーディングはどのくらい必要ですか?それは「正しい」ことであり、正しい実践のように感じますが、Zone APIが公共図書館の一部になることは決してありません。それは私だけのためです。したがって、標準のコレクションを使用することでおそらくより効率的になる可能性があるときに、自分からコードを保護しているようなものです。 このゾーンのアイデアをどこまで取り入れるべきですか?誰でも私が書いているクラス、特に実際に公開されないものについては、契約を保存することについてどれだけ考えるべきかについてアドバイスをいただけますか?


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