[レベル1-タスク4]第1段階自動販売機タスクフィードバック


1級自動販売機ミッション1段階PR
Typescriptは初めてです.
非常に難しいところに赤い下線がたくさんあります
これまでJSとして開発された際、「多くのエラー処理を見逃しているでしょう.😢」と感じました.
TypeScriptの必要性を感じました
これから勉強する山🗻また一つTypeが長くなって狭くなっていく過程が面白かったので楽しかったです
フィードバックを見に行きましょう.

💪 JS


forEach

  • Throw/Returnの違いを知っています.
  • forEach文内部return true, falsecontinueを表す.
    foreachドア内部強制break는 없어요.
    でも3つの方法があります

  • try catch文でforEachを回転させ、throwを強制してループから飛び出します.

  • Array.いくつかの()メソッドの使用方法
  • return true: break
  • return false: continue

  • Array.event()メソッドの使用方法
  • return true: continue
  • return false: break
  • Object.prototype.hasOwnProperty.call() vs hasOwnProperty()


    1)基本hasOwnProperty()はプロトタイプチェーンをチェックせず,そのオブジェクト自身が定義したプロトタイプのみを判断する.
    obj.b = 2;
    Object.prototype.c = 3;
    obj.b; // 2
    obj.c; // 3
    
    obj.hasOwnProperty("b"); // true
    obj.hasOwnProperty("c"); // false
    私はプロトタイプチェーンで追加のプロトタイプを作成していません.これからも計画していません.私は確信しています.👉 大丈夫ですか?
    const obj = {
      a: 1,
      b: 2,
      c: 3
    };
    const copy = {};
    
    let sum = 0;
    for (let key in obj) {
      sum += copy[key] = obj[key] * 2;
    }
    表面的には安全なコードですが、将来に対応できないコードです.
    👇 次のコードを追加したらどうなりますか?エラーが発生します.
    Object.prototype.toText = function() {...}
    コードの実行環境やプロトタイプへのアクセスと拡張を自分で仮定することはできません.
    👇 次のようにするとobj内部のキー値しか持ってこないのでしょうか?
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) { // 프로퍼티로 정의한 친구들은 제외!
        sum += copy[key] = obj[key] * 2;
      }
    }
    🤔 プロフェッショナルと定義されている友人たちも意図的に接近している場合は、Object.prototype.hasOwnProperty.call()を使用することもできます.
    結論:予期せぬ状況に応じて誤った比較を行い、コードの可読性を高めるためにhasOwnPropertyを考慮すべきである.

    Deep Copy vs Object Shape of One Depth

  • 今回のミッションでDeep Copyを実現しました
  • しかし,最初にオブジェクトの深さを第1段階に保つ設計も考えられる.
    👉 なぜなら、パフォーマンスの問題(Deep Copy自体が高価)

    💪 TS


    私たちはどのように使っていますか?

  • Lv1. Document for TS
  • Lv2. Interface for TS
  • Lv3. Safety Application for TS
  • TSを使っている理由はLv 3に行かないと分からないからです
    どうしていつも日本に行きたいですか.
    一言で言えば,ユーザの入力値は信用できない.

    考えない


    多くの人が関数の戻り値をvoidに設定します.(まずは私から…)
    Neverを考えてください!
    void는 null 혹은 undefined 값의 반환을 허용
    never는 허용하지 않아요.

    overload



    リロードまたはオブジェクトとして使用します.

    import type


    タイプスクリプトタイプを外部に宣言します.(type.tsを作成して管理しましょう!)

    ミーティングの名前付け


    T, I Prefix
  • タイプT
  • インタフェースにIが追加されました.
  • しかし、彼はマソ+私たちのコーチもマソを使うことに反対しないと言った.
    NAMEの判断は自分で感じて

    回収タイプ


    タイプは再利用しましょう.

    任意の順序を放棄


    anyと書けばJavaScriptと変わらない

    関数の形状についても説明します。


    パラメータは、return typeの顔を説明します.

    戻りタイプがない場合は、


    戻りタイプがないvoid()では、ほとんどの場合機能しません.
    ❗いったいあなたの関数、方法は一つのことしかしませんか?

    Genericタイプの縮小


    ❗タイプスクリプトを作成した場合は、メソッド内で大量の検証を消去する必要があります!
    サードパーティ:パラメータを動的に受信する感覚
  • <E extends Element>
  • 💪 コメンテーターからのフィードバック


    今回のフィードバックは大体3種類あります.

  • 名前を付ける

  • ルータ上でルーティング機能を完了する(ここにマウント)

  • 不必要な状態を作るな
  • 関数の名前付け

  • 関数またはメソッドは、動詞型またはコマンド型から開始します.moneyToCoin converMoneyToCoinよりいいでしょう~