Inflearn brand logo image
Inflearn brand logo image
Inflearn brand logo image
Programming

/

Programming Language

ライフコーディング - JavaScript Immutability

ライフコーディングで提供するJavaScript関連講義で、JavaScriptでデータを不変に扱う方法についての授業です。

  • egoing5162
JavaScript

学習した受講者のレビュー

こんなことが学べます

  • JavaScriptでデータを不変に扱う方法

  • 生データ型とオブジェクトの動作方法の違い

  • オブジェクトを複製する方法

  • 元のオブジェクトを変更せずにレプリカを変更する方法

1.講義紹介

ライフコーディングのJavaScript Immutabilityクラスは、JavaScriptでデータを不変に扱う方法についての講義です。 JavaScriptの基本的な文法を知っている学習者を対象にデータを不変にすることで、ソースが破損するのを防ぐ方法を見てください。

この講義では以下の内容を取り上げています。

  • 生データ型とオブジェクトの動作方法の違い
  • オブジェクトを複製する方法
  • 元のオブジェクトを変更せずにレプリカを変更する方法

以下の内容は取り扱っておりません。

  • 不変ライブラリ

2.講義対象

データを不変に扱うことで、データ間の干渉によるバグの可能性を大幅に削減できます。また、データが変更されたかどうかを非常に簡単にチェックできます。それ以外に、Hot module reloading、time travelなどの高度な技術を実装する上で基礎となることもあります。

以下のコードの結果をすべて期待できる場合は、このクラスを聞く必要はありません。

var n1 = 1;
var n2 = 1;
console.log(n1 === n2);
=> trueです。当然です。

var o1 = {name:'kim'}
var o2 = {name:'kim'}
console.log(o1 === o2);
=> false です。少し曖昧です。 JavaScriptは、値が変わらない生データ型と値が変わる可能性のあるオブジェクトを別々に扱います。

var o1 = {name:'kim'}
var o2 = o1;
o2.name = 'lee';
console.log(o1.name);
=> leeです。 o1は英文も知らず、自分が指しているnameの値が変わってしまいました。

var o1 = {name:'kim'}
var o2 = Object.assign({}, o1); // 空のオブジェクトに o1 をコピーします。
o2.name = 'lee';
console.log(o1.name);
=>キムです。 o2を変更してもo1は影響を受けません。 o2についてo1は不変な状態を維持できるようになります。

var o1 = {score:[1,2]}
var o2 = Object.assign({}, o1);
o2.score.push(3);
console.log(o1.score)
=> [1,2,3] です。英語も知らず、o1がまた変わりました。スコアはオブジェクトの一種である配列だからです。

var o1 = {score:[1,2]}
var o2 = Object.assign({}, o1);
o2.score = o2.score.concat(); //配列をコピーします。
o2.score.push(3);
console.log(o1.score)
=> [1,2] です。

他の方法もあります。全面コピーをするのです。
var o1 = {score:[1,2]}
var o2 = JSON.parse(JSON.stringify(o1));
o2.score.push(3);
console.log(o1.score)
=> [1,2] です。

オリジナルが変わらないように気を付けるのも良いですが、オリジナルがまったく変わらないようにすることも可能です。
var o1 = {name:'kim'}
Object.freeze(o1);
o1.name = 'lee';
console.log(o1.name);
=> 'kim'です。

しかし、オブジェクトはこれではありません。
var o1 = {score:[1,2]}
Object.freeze(o1);
o1.score.push(3);
console.log(o1.score);
// [1,2,3] です。

防御的に冷凍する必要があります。
var o1 = {score:[1,2]}
Object.freeze(o1);
Object.freeze(o1.score);
o1.score.push(3);
console.log(o1.score);
//変更しないでください。さらに抗議性エラーを発生させてしまいます。

3.講義参加条件

この講義を聞くには、以下の先行知識が必要です。
(どちらか一つを勉強してください。)

4.全再生時間

合計12の映像からなる1時間分の授業です。

5.レッスン著作権

このレッスンはCCライセンスに準拠しており、以下のリンクでもご覧いただけます。
https://opentutorials.org/module/4075良い知識を共有してくれる生活コーディングに感謝の言葉を伝えます。

こんな方に
おすすめです

学習対象は
誰でしょう?

  • データを不変に扱ったバグの可能性を低くしたい方

  • 高度なJS技術を実装する基礎を築きたい方

前提知識、
必要でしょうか?

  • JavaScript

  • NodeJS(選択)

こんにちは
です。

305,418

受講生

8,102

受講レビュー

1

回答

4.9

講座評価

44

講座

カリキュラム

全体

12件 ∙ (1時間 0分)

講座掲載日: 
最終更新日: 

受講レビュー

全体

95件

4.9

95件の受講レビュー

  • 장병훈님의 프로필 이미지
    장병훈

    受講レビュー 1

    平均評価 5.0

    5

    100% 受講後に作成

    이고잉 당신은...

    • 공감님의 프로필 이미지
      공감

      受講レビュー 27

      平均評価 5.0

      5

      33% 受講後に作成

      • leeebug님의 프로필 이미지
        leeebug

        受講レビュー 11

        平均評価 5.0

        5

        100% 受講後に作成

        • 지현승님의 프로필 이미지
          지현승

          受講レビュー 5

          平均評価 5.0

          5

          100% 受講後に作成

          생활코딩 최고입니다.

          • 최영원님의 프로필 이미지
            최영원

            受講レビュー 1

            平均評価 5.0

            5

            100% 受講後に作成

            재미있는 학습이 되었습니다 감사합니다

            無料

            egoing5162の他の講座

            知識共有者の他の講座を見てみましょう!

            似ている講座

            同じ分野の他の講座を見てみましょう!