タグ付けされた質問 「control-structures」

9
「ワンリターンのみ」という概念はどこから来たのですか?
「同じメソッドに複数のreturnステートメントを入れないでください」と言うプログラマーとよく話します。理由を教えてもらうと、「コーディング標準がそう言っている」または「わかりにくい」だけです。単一のreturnステートメントでソリューションを表示すると、コードが見苦しくなります。例えば: if (condition) return 42; else return 97; 「これは見苦しいです。ローカル変数を使用する必要があります!」 int result; if (condition) result = 42; else result = 97; return result; この50%のコードの肥大化により、プログラムが理解しやすくなりますか?個人的には、簡単に防ぐことができた別の変数によって状態空間が増加したため、私はそれが難しいと感じています。 もちろん、通常は次のように書きます。 return (condition) ? 42 : 97; しかし、多くのプログラマーは条件演算子を避け、長い形式を好みます。 この「一回限りの帰り」という概念はどこから来たのでしょうか?このコンベンションが生まれた歴史的な理由はありますか?

19
関数から早く戻るか、ifステートメントを使用する必要がありますか?[閉まっている]
私はよくこの種の関数を両方の形式で記述しましたが、ある形式が別の形式よりも好まれるのか、そしてその理由は疑問でした。 public void SomeFunction(bool someCondition) { if (someCondition) { // Do Something } } または public void SomeFunction(bool someCondition) { if (!someCondition) return; // Do Something } それはコーディング中の私の脳の働きであるため、私は通常最初のものでコーディングしますが、エラー処理をすぐに処理し、読みやすいので2番目のものを好むと思います

20
「ブレーク」と「継続」は悪いプログラミング慣行ですか?
私の上司は、下手なプログラマーがループ内で使用しているbreakとさりげなく言及していcontinueます。 それらが理にかなっているので、私は常にそれらを使用します。インスピレーションをお見せしましょう: function verify(object) { if (object->value < 0) return false; if (object->value > object->max_value) return false; if (object->name == "") return false; ... } ここでのポイントは、最初に関数が条件が正しいことを確認してから、実際の機能を実行することです。IMOループにも同じことが適用されます。 while (primary_condition) { if (loop_count > 1000) break; if (time_exect > 3600) break; if (this->data == "undefined") continue; if (this->skip == true) continue; ...

4
try-catchにブラケットが必要なのはなぜですか?
さまざまな言語(少なくともJava、C#も考えますか)では、次のようなことができます if( condition ) singleStatement; while( condition ) singleStatement; for( var; condition; increment ) singleStatement; したがって、ステートメントが1つしかない場合、を使用して新しいスコープを追加する必要はありません{ }。try-catchでこれができないのはなぜですか? try singleStatement; catch(Exception e) singleStatement; 常に新しいスコープなどを必要とするtry-catchについて特別なものはありますか?もしそうなら、コンパイラはそれを修正できませんでしたか?

8
Clang / LLVMが、列挙されたすべてのケースが含まれるswitchステートメントでデフォルトを使用することについて警告するのはなぜですか?
次のenumおよびswitchステートメントを検討してください。 typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; 私はObjective-Cプログラマですが、より多くの読者のために純粋なCでこれを書いています。 -Weverythingを使用したClang / LLVM 4.1では、デフォルトの行で警告が表示されます。 すべての列挙値をカバーするスイッチのデフォルトラベル 今、私はこれがなぜあるのかを見ることができます:完全な世界では、引数に入力する値theMaskは列挙型のみであるため、デフォルトは必要ありません。しかし、ハックがやって来て、初期化されていないintを美しい関数に投げ込んだらどうなるでしょうか?私の機能はライブラリのドロップとして提供され、そこに何が入るかを制御することはできません。を使用することdefaultは、これを処理する非常に適切な方法です。 なぜLLVMの神は、この振る舞いを地獄のデバイスにふさわしくないと考えているのでしょうか?引数をチェックするifステートメントをこれに先行させる必要がありますか?

2
なぜScalaには戻りがあるが、壊れて継続しないのか
Scalaにはbreakor はありませんcontinue。そのため、ループの動作にはもう少し考えが必要です。 ループを早期に終了するには、末尾再帰、例外、またはscala.util.control.Breaks(例外を使用する)が必要です。 この理由は、のようにgoto、それらが流れを不明瞭にする流れの構造であり、より良く、驚くほどではない方法で達成できるということです。 しかし、それらと同じ引数を使用できるようですreturn。 なぜScalaはを意図的に省略breakしましたcontinueが、そうではなかったのreturnですか?

22
どの有用な代替制御構造を知っていますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 同様の質問がSOで終了しました。 プログラミングをしているときに、特定の制御構造が非常に役立つことがありますが、プログラミング言語では直接利用できないことがあります。 計算を整理するのに便利な代替制御構造は何だと思いますか? ここでの目標は、チャンキングと推論を改善するために、コードの構造化についての新しい考え方を獲得することです。 現在利用できない希望的な構文/セマンティックを作成するか、既存のプログラミング言語であまり知られていない制御構造を引用することができます。 回答は、新しいプログラミング言語や実際の言語を強化するためのアイデアを提供するものでなければなりません。 これはブレーンストーミングと考えてください。だから、おかしなアイデアだと思われるものを投稿してください。 それは命令型プログラミングについてです。

1
これはHaskellメイン関数の有効なデザインパターンですか?
いくつかのHaskellアプリケーションを開発した後、純粋でないコードと完全なコードから、不純なコードと失敗する可能性のある(部分)関数を厳密に分離していることに気付きました。これらの取り組みにより、アプリケーションに関連するメンテナンスコストが大幅に削減されました。私は、時間の経過とともに、この分離を実施するために同じ高レベルの構造に依存していることに気づきました。main 一般的に、私mainは次のような構造になります。 import System.Environment data ProgramParameters = P () data ComputationResult = I () main :: IO () main = getArgs -- Collect arguments >>= andOrGetUserInput -- Collect user input >>= impureOrFailableComputations -- Possible non-recoverable error(s) >>= either -- "Branch" putStrLn -- Print Any Failure(s) pureNotFailableComputations -- Finish the work ...

3
なぜGOTOはPHP 5に含まれていたのですか?[閉まっている]
ここで何が尋ねられているのかを知るのは難しい。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 7年前休業。 GOTOコントロールキーワードがPHP 5.3.0で導入されたことを少し前に発見しました。 http://php.net/manual/en/control-structures.goto.php なぜそれが起こったのですか? この背後にある言語設計の目標は何ですか? PHP開発者コミュニティはそれを求めましたか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.