04.11.21リリーフTIL


🤓 今日習った内容!


1. Queue / Stack


QueueとStackはデータ構造タイプです.

Queue


先入先出
現実の世界では、銀行業務や遊園地が並ぶのは先入先出に相当する.
これは先進的なデータの先出の先入先出の方式です.
キューでは,データが入る場所をバックエンド,データが流出する場所をフロントエンドと呼ぶ.
キューの後ろからデータを挿入する演算をenQueue,先端からデータを削除する演算をdeQueueと呼ぶ.

Stack


後入先出
現実世界に積み上げられた皿を上から一つずつ出して、後入先出に相当します.
最後に入力したデータは、先に出てから入る方法です.
Queueとは異なり、データが入ったり流出したりする場所は1つしかありません(top).つまり、通路は1本しかありません.
topからデータを挿入する演算をpush,topからデータを削除する演算をpopと呼ぶ.
参考ブログ/トナー開発ログ

2. Unit Test / TDD


ユニットテスト


ソースコードの特定のモジュールが予想通りに正しく動作しているかどうかを確認するには
関数またはメソッドのテストコードを作成し、検証します.
例えば、果物でジュースを作る方法が正常に機能しているかどうかを検証したいです.
では、「バナナ3個でバナナジュースを作る」というcaseを定義します.
test codeでcaseと同じ場合を設定と、
これは私が検証したい方法を呼び出す方法です.ではtestcaseではtestの結果についてお話しします.

👾 How to?


1.プロジェクトに新しいターゲットを作成します.Unit Test Bundleテンプレートによって生成される.
通常、テスト名は「プロジェクト名+test」

2.プロジェクトのテストにテスト目標を追加します.
これは、プロジェクトコードをどのようにテストするかを設定するプロセスです.command + shift + ,またはEdit Schemesから接続されます.(Command Line Toolでも見つけられます)

3.ターゲットメンバーシップの作成
テストするソースコードに移動し、[TargetMembership]でJuiceMakertestを確認します.
これは、JuiceMaker.swiftが構築されると、JuiceMakertestも一緒にコンパイルされることを意味する.
Target Membership
ターゲットの構築時にコンパイルするファイルには、Target Membershipで検出されたターゲットが含まれています.
????????? 逆方向じゃないの???
4.testメソッドをクラスに書き込む.
メソッド名はtestで開始する必要があります.
import XCTest

class IntStackTests: XCTestCase {
    func test_바나나_3개로_바나나쥬스를_만든다() {
        // test code 작성
        let maker = JuiceMaker()
        let result = maker.makeJuice(fruit: .banana, amount: 3)
        XCTAssertEqual(result, .success(.banana))
    }
 }
5.テストを実行します.
edge caseを作成してチェックし、より正確に検証できます.

Test Case


需要を分析し、実現すべき機能を分析し、作成します.
どのケースも互いに影響を与えることはできません.独立する.

TDD(テストドライバ開発)


ソフトウェア開発プロセスの1つ.
1)まず、デマンドに失敗したテストケースを作成します.
2)次の試験例に合格するために、最小限の生産コードを作成する.
3)最後に作成したコードを書き直す.

TDD Cycle



[出典]https://www.thinktocode.com/2018/02/05/what-is-tdd/
compile errorは失敗・失敗のtest caseと見なすこともできる.

TDDのメリット

  • の要件を理解してこそ、テストコードを記述することができます.要求の正確な把握を助ける.
  • コードの検証が容易です.テスト可能なコードを使用して作成されます.
  • テストは、コードを記述するドキュメントとすることができる.
  • コードを変更すると恐怖を解消(?)
  • 結合度を低減することができる.
  • のデバッグ時間を短縮できます.
  • + Result Type


    Result
    A value that represents either a success or a failure, including an associated value in each case.
    Generic Enumerationは、successまたはfailureを表すことができる.各ケースには関連値があります.
    @frozen enum Result<Success, Failure> where Failure : Error

    3. UIStepper


    stepperの+-ボタンでvalueを増減できます.

    🧐 好奇心のある場所


    1.シーケンスイメージボードUIの表示がいつ反映されるか


    1番目の画面に2番目の画面ViewControlのインスタンスを作成し、インスタンスのUILabelを変更して2番目の画面に切替えようとします.しかし、2画面目を開くと、1画面目のUILabelは反映されません.
    ストライプUIはviewDidLoad()からロードされる.このため、第1のビューコントローラは、UILabelにアクセスできなくなり、UILabelの値を変更しても、viewDidLoad()が呼び出され、シーケンスイメージボードUIに初期化される.