問題タブ [guard-statement]
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.
ios - Swift: defer ステートメントで戻り値をキャッチできるようにすることで、デバッグを容易にします
そのため、変数を宣言して戻り値を保持し、次の行でその変数を返すのが好きなので、コードのデバッグが簡単になります。戻り行にブレークポイントを設定して、それが返す値を確認するだけです。私はこれをどこでも使用しており、すべてのコードをデバッグしやすくしています。
ただし、メソッドが理にかなっているために満たす必要があるオプションとさまざまな条件があるシナリオがあります。ガード ステートメントは、ピラミッド オブ ドゥームを導入せずに、いくつかの条件が満たされていることを確認するのに最適です。
しかし、アーリー リターンの問題は、メソッドから少なくとも 2 つの終了ポイントを取得することです (このコンテキストでguard
は a が必要なためreturn
)。これにより、デバッグが難しくなります。
Swift 3.Xで defer ステートメントが戻り値をキャッチできるようになれば素晴らしいと思いませんか?
これにより、デバッグが非常に簡単になりますが、それでもguard
早期リターンを利用できます。私はコンパイラなどを書くことについてこれまで何の洞察も持っていませんが、Swift の今後のバージョンでこれを実装するのはそれほど難しくないと思いますか?
複数の出口点を持つメソッドの戻り値を読み取るための単一のポイントを達成する別の方法を思い付くことができますか? (私が提案した改善を待つ必要はありdefer
ませんか?)
編集:
上記のログインの例は完璧な例ではありません。申し訳ありませんが、なぜそのようなコードを書くのでしょうか? ハハ!しかし、他にも多くの同様のシナリオがあります。おそらく次のようなもので、使用do-try-catch
するとコードのデバッグが難しくなります。
swift - Guard ステートメントのパラメーター エラー
より読みやすいコードを書くことを期待して、適切な条件を最初にチェックするために、適切な場合はガードステートメントを採用しようとしています。ただし、コンパイル時エラーが発生します。
これが私のコードです:
ここに私が得ているエラーがあります:
MyPlayground.playground:511:35: エラー: 'count' は利用できません: 普遍的に適切な答えはありません。ディスカッション ガードのドキュメント コメントを参照してください。 let x = testVar where x.count > 2 else { ^~~~~
Swift.String:114:16: 注: 'count' はここでは使用できないと明示的にマークされています public var count: Int { get } ^
swift - ガード ステートメント フォールスルーのテスト カバレッジを取得する方法
私は今日、BDD アプローチを使用して iOS 単体テストを書き始めました。guard
ステートメントと 100% のコード カバレッジを得ることに関して質問があります。
Data
オブジェクトへの変換を処理する次のコードがありCustomer
ます。
バックエンドが作成されたとき、一部の顧客には苗字だけが与えられ、姓名が含まれていました。そのため、顧客の名前はオプションです。フルネームが の値になる場合がありますlast_name
。
私のコードでは、顧客の名はオプションですが、姓は必須です。ネットワーク リクエストから受信した JSON で姓が返されない場合は、顧客を作成しません。また、Data
を にシリアル化できない場合Dictionary
、顧客は作成されません。
2 つの JSON ファイルがあり、どちらにも、両方のシナリオをテストするために使用している顧客情報が含まれています。
1 つは、JSON に名が含まれていません。
もう 1 つは、JSON に名が含まれています。
私の単体テストでは、Quick と Nimble を使用してCustomer
、最初の名前が利用できない場合と次の場合に a の作成を処理します。
これによりCustomer
、返された JSON に最初の名前がないか存在する場合に を作成することが保証されます。
データを有効な JSON オブジェクトに変換できるため、コードがステートメントのelse
句にヒットしない場合、BDD を使用してこのメソッドの 100% のコード カバレッジを得るにはどうすればよいでしょうか? JSON オブジェクトに変換できないデータを含むguard
別のファイルを追加して、aが作成されないようにするだけでなく、欠落している を含むファイルを追加して、a が作成されないようにする必要がありますか?.json
Customer
.json
last_name
Customer
「100% コード カバレッジ」という概念を考えすぎているだけですか? else
ステートメントの節をguard
テストする必要さえありますか? BDDメソッドを使用した適切なアプローチさえありますか?