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

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

13
ELSEの悪いプログラミングを使用していますか?[閉まっている]
ここで何が求められているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 7年前に閉鎖されました。 ELSEコンストラクトを使用することによって引き起こされるバグに頻繁に出くわします。主な例は、次のようなものです。 If (passwordCheck() == false){ displayMessage(); }else{ letThemIn(); } 私にとってこれはセキュリティの問題を叫ぶ。passwordCheckがブール値である可能性が高いことは知っていますが、アプリケーションのセキュリティを設定しません。その文字列、intなどの場合はどうなりますか? 私は通常ELSE、の使用を避けようとし、代わりに2つの完全に独立したIFステートメントを選択して、期待するものをテストします。それ以外はすべて無視されるか、具体的に処理されます。 確かに、これはアプリに入るバグ/セキュリティ問題を防ぐためのより良い方法です。 どうやってやるの?

9
「包帯」の修正はどれくらい一般的ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 次のシナリオを想像してください。 あなた(または他の誰かの)プログラムにバグがあることを検出しました-特定の入力が与えられると、関数は間違った結果を生成します。あなたはコードを調べて、何も悪いことを見つけることができません:この入力を与えられたとき、それはただ動き出すように見えます。 これで、次の2つのいずれかを実行できます。実際の原因が見つかるまでコードをさらに調べるか、またはif、入力がこの特定の入力であるかどうかをチェックするステートメントを追加して、包帯をたたく-ある場合は、期待値を返します。 私にとって、包帯を貼ることはまったく受け入れられないでしょう。コードがこの入力で予期せぬ動作をしている場合、あなたが見逃した他の入力は奇妙に反応しますか?それはまったく修正のようには見えません-あなたはただ敷物の下で問題をシャベルしているだけです。 これを行うことすら考えていないので、教授や本が「包帯」の修正を適用するのは良い考えではないことを何度も思い出させ続けることに驚いています。だからこれは私に不思議に思う:これらの種類の「修正」はどれくらい一般的か?

12
コメント付きの短い派手なコードとコメントなしの長く理解しやすいコード-どちらが好ましいですか?
アルゴリズムは2つの方法で記述できる場合があります。 短く、派手な方法。または より長く、理解しやすい方法。 たとえば、Cに文字列sourceをコピーする、より長く簡単な方法を次に示しますdest。 *dest = *source; while (*source != '\0') { source++; dest++; *dest = *source; } (true); そして、ここに短い、派手な方法があります。 // Copy string source to dest while (*dest++ = *source++); 私はいつも派手なコードを避けるべきだと聞いて読んでおり、私は同意する傾向があります。しかし、コメントを考慮するとどうなりますか?上記の例のように、コメントのない、より長く、おそらく理解しやすいと思われるコードと、コメントの良い、短い、派手なコードがあるとしますか?派手なコードはまだ優先されますか? 編集:多くの人が変数名についてコメントしているので、他のコードよりも優先する場合に要因にならないようにサンプルコードを変更しました。最初の例では二重の割り当てを削除しようとしましたが、コードが読みにくくなりました。 おそらく、これは最良の例ではありませんでした。なぜなら、多くの人は、長いコードよりも「派手な」コードの方が読みやすく理解しやすいためです。アイデアは、非常に短いが複雑なコードよりもはるかに理解しやすい1つの長いコードを持つことでした。 EDIT2は:ここで私はから得た新しいexamleだSO: コメント付きのファンシーバージョン: //direct formula for xoring all numbers from 1 to N int Sum = (N & …

5
「パスワードを忘れた」-これを処理する方法
私はこの答えを読んで、パスワードをメールで送信しないことを主張するコメントを見つけました: パスワードをメールで取得できないようにする必要があります。これは、パスワードがどこかにプレーンテキストで保存されていることを意味します。リセットのみが必要です。 これにより、[パスワードを忘れた場合]オプションを処理する問題が生じます。 ユーザーがそれを読むことができるように、どんなUIでも生のパスワードを表示する必要があります。「パスワードを忘れた」を処理する方法は何でしょうか

6
POSTの前にプレビューを表示するRESTエンドポイント
RESTバックエンドとHTML + JSフロントエンドを搭載した新しいWebアプリケーションを設計しています。 1つのエンティティを変更するためのPOSTメソッドが1つあり(Configを呼び出しましょう)、アプリケーションの多くの要素の状態にいくつかの副作用があります。POSTが次のように実行されると仮定します。 POST /api/config BODY {config: ....} このため、これらの変更が行われる前にプレビューを表示して、エンドユーザーが何が変更されるかを確認できるようにします。 私が最初に考えたのは、プレビューのGETエンドポイントを作成して、エンティティの新しい状態の本体を送信することです。こちらです: GET /api/preview/items BODY {config: ....} 新しい構成のアイテムの新しい状態が表示される場合があります。 GET /api/preview/sales BODY {config: ....} 新しい構成での販売の新しい状態が表示される場合があります。 アプリケーションの状態を変更しないので、GET動詞を使用することをお勧めします。ただし、GET要求での要求本体の使用は推奨されないようです。 これについて良い習慣はありますか?他の選択肢として、1つの方法で構成をドラフトとして保存し、他の方法で結果を表示することもできますが、追加の手順が必要で、サーバーでドラフトを管理する必要があります。 POST /api/preview/config BODY {config: ....} GET /api/preview/items?idPreviewConfig=1

3
データアクセスレイヤーのテスト方法
JDBCアクセスにSpringを使用するDAOメソッドがあります。これは、アイテムを販売する売り手の成功率を計算します。 コードは次のとおりです。 public BigDecimal getSellingSuccessRate(long seller_id) { String sql = "SELECT SUM(IF(sold_price IS NOT NULL, 1, 0))/SUM(1) FROM transaction WHERE seller_id = ?"; Object[] args = {seller_id}; return getJdbcTemplate().queryForObject(sql, args, BigDecimal.class); } このメソッドまたはDAOメソッドをJUnitでテストするにはどうすればよいですか?データアクセスロジックをテストするためのベストプラクティスは何ですか?いくつかのデータがロードされた埋め込み可能なデータベースに対してテストすることを考えていますが、RDBMSとスキーマの点で本番環境と同様の統合テストを行うべきではありませんか?

5
記述的な命名と80文字の行[クローズ]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私はこれらの2つの価値あるプログラミング慣行を頻繁に耳にします。(1)コードの行は80文字以下である必要があり、(2)変数、メソッド、クラスなどにわかりやすい名前を使用します。 、彼らはしばしばお互いのトレードオフのようです。コードを80文字/行未満に保つと、よりわかりにくい名前を使用することになります(特に各インデントが4文字としてカウントされるPythonでは)が、より説明的な名前を使用すると、80文字を超える行になります。 だから、私の質問は、これらの2つのアドバイスのうち、どちらを選択する必要があるかを守ることがより重要ですか?私はこれを独立した(趣味の)プログラマーだと思っていますが、もっと重要なのは、大企業で働くソフトウェアエンジニアの観点からです。

2
競争力のあるプログラミングを開始するには?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私はしばらくコーディングを練習してきましたが、問題は、問題の解決策を書くのに時間がかかることです。競争力のあるプログラミングがこれを改善するのに役立つかどうか尋ねたいです。 はいの場合、どのように開始し、どのWebサイトから使用できますか(TopCoderなど)?今のところ、非常に難しい問題を解決することはできません。私は何をすべきか? いいえの場合、他に何をすべきですか? また、コーディングを学びたいという別の問題もありますが、問題は、私はそれがあまり得意ではないと感じていることです。私は何をすべきか?それは私を内側から盗聴するようなものです。 一部の人々はこの質問を有益とは思わないかもしれませんが、少なくとも答えが得られるようにしてください。

4
C ++での移動コンストラクターの動機付けと使用
私は最近、C ++の移動コンストラクターについて読んでいます(たとえば、こちらを参照)。それらがどのように機能し、いつ使用するかを理解しようとしています。 私の知る限り、移動コンストラクターは、大きなオブジェクトのコピーによって引き起こされるパフォーマンスの問題を軽減するために使用されます。ウィキペディアのページには、「C ++ 03の慢性的なパフォーマンスの問題は、オブジェクトが値渡しされたときに暗黙的に発生する可能性のある、コストが高く不必要なディープコピーです。」 私は通常そのような状況に対処します オブジェクトを参照渡しすることにより、または スマートポインター(boost :: shared_ptrなど)を使用してオブジェクトをやり取りします(オブジェクトの代わりにスマートポインターがコピーされます)。 上記の2つの手法では不十分で、移動コンストラクターを使用するほうが便利な状況は何ですか?

4
全社的な開発者向けハンドブックの作成
私は小さな会社で働いています。私が雇われる前の会社のソフトウェア開発部門は、独学で働きすぎた1人の男で構成されていました。数年前から会社のソフトウェアを書いてきたので、正式な会社全体のソフトウェア開発プラクティスの確立を任されました。現在、ガイドラインはありませんが、 コードを記述してテストし、.zipファイルに入れてクライアントに送信します。TDDおよびバージョン管理のボーナスポイント。 私の上司は、私たちが物事を成し遂げるために使用する一般的なプロセス、プロトコル、ツール、およびガイドラインを定義するソフトウェア開発者のハンドブックを書くことを望んでいます。言い換えれば、彼は「これが私たちがここでやること」という本を望んでおり、新しい従業員が私たちのやり方に慣れやすくなり、上司が彼の手下が何をしていてどのようにやっているかを理解しやすくしますそれ。 私が見ているように、私は基礎を築いています、それは正しく行われる必要があります。そのようなハンドブックのトピックをどのように選択しますか?サンプルトピックを提供できますか? サイドノート:重要なのは、主にMicrosoft .NETショップです。また、XPやスクラムなどのアジャイルプラクティスを検討していますが、それらを社内で機能させるために大幅に変更する必要がある場合があります。

4
あなたの会社には、個人的な(技術的な)ブログに関するポリシーがありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 あなたの会社には、個人的な(技術的な)ブログに関するポリシーがありますか? 共有しますか? 開発者は、個人のブログを保持し、コアコンピテンシーでもコアIPでもない仕事で遭遇した技術的な問題について話すことをお勧めします。「教えてはいけない」スタイルでやっていますが、何かを書き留める時が来ました。 更新:ご回答いただきありがとうございます。先週のポリシーを実装しました。全文はこちらです。

10
通常、クラスのリージョンをどのようにレイアウトしますか?
クラスの地域をレイアウトするための標準があるかどうか疑問に思っていました。 私は現在使用しています Fields Constructor Properties Public Methods Private Methods FieldsプライベートプロパティでありProperties、パブリックプロパティであること。通常、必要に応じてその中のサブリージョンを使用します。または、他のリージョン(インターフェースやbaseClassメンバーなど)を時折追加します。


6
リフレクションを(過剰に)使用するのは悪い習慣ですか?
定型コードの量を大幅に減らす場合は、リフレクションを使用することをお勧めしますか? 基本的に、一方の側でパフォーマンスとおそらく読みやすさと、他方の側で定型コードの抽象化/自動化/削減との間にトレードオフがあります。 編集:推奨されるリフレクションの使用例を次に示します。 例として、Base10個のフィールドと3個のサブクラスSubclassAをSubclassB持ち、SubclassCそれぞれが10個の異なるフィールドを持つ抽象クラスがあるとします。それらはすべて単純なBeanです。問題は、2つのBase型参照を取得し、対応するオブジェクトが同じ(サブ)型であり、等しいかどうかを確認することです。 ソリューションとしては、最初にタイプが等しいかどうかをチェックしてからすべてのフィールドをチェックするか、リフレクションを使用して同じタイプであるかを動的に確認し、「get」(convention構成上)、両方のオブジェクトでそれらを呼び出し、結果で等しいを呼び出します。 boolean compare(Base base1, Base, base2) { if (base1 instanceof SubclassA && base2 instanceof SubclassA) { SubclassA subclassA1 = (SubclassA) base1; SubclassA subclassA2 = (SubclassA) base2; compare(subclassA1, subclassA2); } else if (base1 instanceof SubclassB && base2 instanceof SubclassB) { //the same } //boilerplate } boolean compare(SubclassA …

10
なぜ「コールバック関数」が必要なのですか?
私はその本を読んでいprogramming in Luaます。と言った クロージャーは、多くの状況で価値のあるツールを提供します。これまで見てきたように、これらはsortなどの高階関数の引数として役立ちます。クロージャーは、newCounterの例のように、他の関数を構築する関数にも役立ちます。このメカニズムにより、Luaプログラムは機能的な世界からの洗練されたプログラミング手法を組み込むことができます。クロージャーはコールバック関数にも役立ちます。ここでの典型的な例は、従来のGUIツールキットでボタンを作成するときに発生します。各ボタンには、ユーザーがボタンを押したときに呼び出されるコールバック関数があります。ボタンを押したときに、ボタンごとにわずかに異なる処理を行う必要があります。たとえば、デジタル計算機には、各桁に1つずつ、10個の同様のボタンが必要です。次のような関数を使用して、それぞれを作成できます。 function digitButton (digit) return Button{label = tostring(digit), action = function () add_to_display(digit) end} end を呼び出すdigitButtonとを返すように見えるのでaction(これによりクロージャが作成されます)、digit渡されたにアクセスできますdigitButton。 私の質問は: Why we need call back functions? what situations can I apply this to? 著者は言った: この例では、Buttonは新しいボタンを作成するツールキット関数であると想定しています。labelはボタンのラベルです。actionは、ボタンが押されたときに呼び出されるコールバッククロージャーです。コールバックは、digitButtonがタスクを実行した後、ローカル変数digitがスコープから出た後、長時間呼び出すことができますが、それでもこの変数にアクセスできます。 著者によると、同様の例は次のようになります。 function Button(t) -- maybe you should set the button here return t.action -- so …

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