uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 420
Obunachilar
Ma'lumot yo'q24 soatlar
+27 kunlar
-230 kunlar
Postlar arxiv
ToCode
1 419
# ื‘ื™ืฆื•ืขื™ื ื•ืฉืคื•ืช ืžื•ื“ืจื ื™ื•ืช ืืœื’ื•ืจื™ืชื Fisher-Yates ืœืขืจื‘ื•ื‘ ืžืขืจืš ืžืฆื™ืข ืœื‘ืฆืข ืืช ื”ืฆืขื“ื™ื ื”ื‘ืื™ื: 1. ื‘ื—ืจื• ืื™ื ื“ืงืก ืืงืจืื™ ื‘ืžืขืจืš. 2. ืžื—ืงื• ืืช ื”ืื™ื‘ืจ ื‘ืื™ื ื“ืงืก ืฉื‘ื—ืจืชื ื•ื›ืชื‘ื• ืื•ืชื• ื‘ืกื•ืฃ ื”ืจืฉื™ืžื”. 3. ื”ืžืฉื™ื›ื• ืขื“ ืฉืžื—ืงืชื ืืช ื›ืœ ื”ืื™ื‘ืจื™ื. ื–ื” ืืœื’ื•ืจื™ืชื ืืœื’ื ื˜ื™ ื•ืงืœ ืœืžื™ืžื•ืฉ ื‘ื›ืœ ืฉืคื”, ืœื“ื•ื’ืžื” ื‘ JavaScript:
function shuffle(arr) {
  let end = arr.length;
  while (end >= 0) {
    const nextIndex = Math.floor(Math.random() * end);
    arr.push(arr[nextIndex]);
    arr.splice(nextIndex, 1);
    end -= 1;
  }
  return arr;
}
ื”ื‘ืขื™ื” ืฉื›ืžืขื˜ ื‘ืœื™ ืœืฉื™ื ืœื‘ ื›ืชื‘ืชื™ ืงื•ื“ ื”ืจื‘ื” ืคื—ื•ืช ื™ืขื™ืœ ืžืžื” ืฉื”ื™ื” ืืคืฉืจ ืœื›ืชื•ื‘. ื”ืžื—ื™ืงื” ืขื slice ืžื›ืจื™ื—ื” ืืช ื”ืžื—ืฉื‘ ืœื”ืขืชื™ืง ืืช ื›ืœ ื”ืขืจื›ื™ื ื‘ืžืขืจืš ืžืงื•ื ืื—ื“ ืื—ื•ืจื”, ืžื” ืฉื’ื•ืจื ืœื”ืžื•ืŸ ืขื‘ื•ื“ื” ืžื™ื•ืชืจืช. ื‘ืžืงื•ื splice ื• push ืžื™ืžื•ืฉ ืžื•ื“ืจื ื™ ืฉืœ ืื•ืชื• ืืœื’ื•ืจื™ืชื ืžืฉืชืžืฉ ื‘ื”ื—ืœืคื”:
function shuffle(arr) {
  for (let i=arr.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * i);
    const item = arr[i];
    arr[i] = arr[j];
    arr[j] = item;
  }

  return arr;
}
ื›ืžื• ืฉื˜ื™ื™ืคืกืงืจื™ืคื˜ ืขื•ื–ืจ ืœื™ ืœื›ืชื•ื‘ ืงื•ื“ ืฉืœื ื˜ื•ืขื” ื‘ื˜ื™ืคื•ืกื™ื, ื™ื”ื™ื” ื ื—ืžื“ ืœืงื‘ืœ ืฉืคืช ืชื›ื ื•ืช ืื• ืชื•ืกืฃ ืœื“ืคื“ืคืŸ ืฉืขื•ื–ืจ ืœืฉื™ื ืœื‘ ืœื‘ืขื™ื•ืช ื‘ื™ืฆื•ืขื™ื ื•ืงื•ื“ ืœื ื™ืขื™ืœ. ืขื“ ืฉื™ืžืฆื™ืื• ืื—ื“, ืฉื•ื•ื” ืœืฉื™ื ืœื‘ ืœืขืœื•ืช ืฉืœ ืคืขื•ืœื•ืช ื‘ืกื™ืกื™ื•ืช ื‘ืงื•ื“ - ื•ืœื”ืชืจื’ืœ "ืœื”ืจื™ื—" ืืช ื”ืขืœื•ืช ื”ืืžื™ืชื™ืช ืฉืœ ืื•ืชืŸ ืคื•ื ืงืฆื™ื•ืช ื‘ืกื™ืกื™ื•ืช.

ToCode
1 419
# ื”ื•ื“ืขื•ืช ืฉื’ื™ืื” ืžื˜ืขื•ืช ืฉื’ื™ืื” ื‘ืชื•ื›ื ื” ื”ื“ืคื™ืกื” ืœื™ ืืช ื”ื”ื•ื“ืขื” ื”ื‘ืื” ืœืœื•ื’:
Permissions should be u=rwx (0700).
ื‘ื”ื“ืคืกืช ื”ื•ื“ืขืช ืฉื’ื™ืื” ืœืžืฉืชืžืฉื™ื ืฉื•ื•ื” ืœืฉื™ื ืœื‘ ืฉืื ื—ื ื• ื ื•ืชื ื™ื ืœื”ื ื”ื•ืจืื•ืช ืžื“ื•ื™ืงื•ืช ืื™ืš ืœืชืงืŸ ืืช ื”ืฉื’ื™ืื” ื•ืœื”ืžืฉื™ืš ื”ืœืื”. ืœื ื–ื” ื”ืžืฆื‘ ื‘ืฉื’ื™ืื” ื”ืžื•ื“ื‘ืงืช. ืื ืื ื™ ืœื•ืงื— ืงื•ื‘ืฅ ืฉื™ืฉ ืœื• ื”ืจืฉืื•ืช ืœื ืžืชืื™ืžื•ืช ืœืžืฉืœ:
$ ls -l b.txt
-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 16 12:39 b.txt
ื•ืžืจื™ืฅ ืืช ื”ืคืงื•ื“ื”:
$ chmod u=rwx b.txt
ื”ื”ืจืฉืื•ืช ืขื“ื™ื™ืŸ ื™ื”ื™ื• ืœื ืžืชืื™ืžื•ืช:
$ ls -l b.txt
-rwxrw-r-- 1 ubuntu ubuntu 0 Nov 16 12:39 b.txt
ืœืžืขืฉื” ืืคืฉืจ ืœื”ืกื™ืง ืžื”ื•ื“ืขืช ื”ืฉื’ื™ืื” ืฉืชื™ ืคืงื•ื“ื•ืช ืฉื•ื ื•ืช ืœื”ืจื™ืฅ - ื”ืื—ืช, chmod u=rwx, ืชืฉื ื” ืจืง ืืช ื”ื”ืจืฉืื•ืช ืœื‘ืขืœื™ื ืฉืœ ื”ืงื•ื‘ืฅ; ื”ืฉื ื™ื”, chmod 0700, ื‘ืืžืช ืชื•ืจื™ื“ ื’ื ืืช ื”ื”ืจืฉืื•ืช ืžื›ืœ ื”ืื—ืจื™ื. ื”ื•ื“ืขืช ืฉื’ื™ืื” ื˜ื•ื‘ื” ื™ื•ืชืจ ื”ื™ืชื” ืžืฆื™ื’ื” ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืฉืงื•ืœื•ืช, ืœืžืฉืœ ื”ื™ื” ืขื“ื™ืฃ ืœื›ืชื•ื‘:
Permissions should be a=,u=rwx (0700).
ืื• ืืคื™ืœื•:
Permissions should be u=rwx,g=,o= (0700).
ื”ื•ื“ืขื•ืช ืฉื’ื™ืื” ื˜ื•ื‘ื•ืช ืฉื•ื•ืช ื–ื”ื‘ ื•ื™ื›ื•ืœื•ืช ืœื—ืกื•ืš ืœืžืฉืชืžืฉื™ื ืฉืœื›ื ื–ืžืŸ ื•ื›ืื‘ ืจืืฉ. ืœืžืจื•ืช ืฉื‘ื›ืชื™ื‘ืช ืงื•ื“ ืื ื—ื ื• ืื•ื”ื‘ื™ื ืœื“ืžื™ื™ืŸ ืฉืฉื’ื™ืื•ืช ืœื ืงื•ืจื•ืช ืืฃ ืคืขื, ื”ืฉืงืขื” ื‘ื”ื•ื“ืขื•ืช ืฉื’ื™ืื” ื˜ื•ื‘ื•ืช ืชืžื™ื“ ืžืฉืชืœืžืช.

ToCode
1 419
# ืœืžื” ืืช ืงื•ืจืืช "ื˜ืขื•ืช"? ื“ืจืš ืื—ืช ืœืฉืคืจ ืืช ื”ืงื•ื“ ืฉืœื ื• ื”ื™ื ืœื”ื‘ื™ืŸ ืžื” ื–ื” ืื•ืžืจ ืœื›ืชื•ื‘ ืงื•ื“ ื’ืจื•ืข, ืžื” ื–ื” ืื•ืžืจ "ื˜ืขื•ืช", ืื• ืžื”ื• ืงื•ื“ ื’ืจื•ืข ื‘ืฉื‘ื™ืœื›ื- 1. ื”ืื ืงื•ื“ ื’ืจื•ืข ื”ื•ื ืงื•ื“ ืฉืœื ืขื•ื‘ื“? ืื• ืฉื’ื ืงื•ื“ ืขื•ื‘ื“ ื™ื›ื•ืœ ืœื”ื™ื•ืช ื’ืจื•ืข? 2. ื”ืื ืงื•ื“ ื’ืจื•ืข ืงืฉื•ืจ ืœื‘ื™ืฆื•ืขื™ื ืคื—ื•ืช ื˜ื•ื‘ื™ื, ืื• ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืงื•ื“ ื™ื”ื™ื” ื’ื ืžื”ื™ืจ ื•ื’ื ืœื ื˜ื•ื‘? 3. ื”ืื ืงื•ื“ ื’ืจื•ืข ืงืฉื•ืจ ืœืžื” ืฉืžืกื‘ื™ื‘ื•? ื”ืื ืงื•ื“ ื™ื›ื•ืœ ืœื”ื™ื•ืช ื˜ื•ื‘ ืื ืื™ืŸ ืœื• ื‘ื“ื™ืงื•ืช? ืื ืื™ืŸ ืœื• ืชื™ืขื•ื“? 4. ื”ืื ืงื•ื“ ื’ืจื•ืข ื‘ื›ืœืœ ืงืฉื•ืจ ืœื™ื›ื•ืœืช ืœื”ืจื—ื™ื‘ ืื•ืชื•? ืื•ืœื™ ืงื•ื“ ื’ืจื•ืข ื–ื” ืงื•ื“ ืฉืงืฉื” ืœื”ื•ืกื™ืฃ ืืœื™ื• ืคื™ืฆ'ืจื™ื ืžืกื•ื™ืžื™ื? ื™ืฉ ืคื™ืฆ'ืจื™ื ืฉื‘ืฉื‘ื™ืœื ืชืฆื˜ืจื›ื• ืžืžืฉ ืœืฉื›ืชื‘ ื—ืœืงื™ื ื’ื“ื•ืœื™ื ืžื”ืงื•ื“? 5. ื”ืื ืงื•ื“ ื’ืจื•ืข ืงืฉื•ืจ ืœ Best Practices ื•ืœืกื’ื ื•ืŸ ื›ืชื™ื‘ื”? ืงื•ื“ ื’ืจื•ืข ื”ื•ื ืงื•ื“ ืฉืœื ื›ืชื•ื‘ ืœืคื™ ืกื˜ื ื“ืจื˜ื™ื ืžืกื•ื™ืžื™ื? ืื™ื–ื” ืกื˜ื ื“ืจื˜ื™ื ืืœื”? ืื™ื–ื” ืกื•ื’ ืงื•ื“ ืงืฉื” ืœื›ื ืœืงืจื•ื? 6. ื•ืื•ืœื™ ืื ื—ื ื• ืงื•ืจืื™ื "ื’ืจื•ืข" ืœืงื•ื“ ืฉืœื ืžื˜ืคืœ ื‘ืžืงืจื™ ืงืฆื”? ืงื•ื“ ืฉืœื ื™ื•ื“ืข ืœื”ืชืžื•ื“ื“ ืขื ืจืฉืช ืื™ื˜ื™ืช ืื• ืงื‘ืฆื™ื ืฉืœื ื ืžืฆืื™ื ืื™ืคื” ืฉื”ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช? ืงื•ื“ ืฉืžื›ื™ืœ ื‘ืขื™ื•ืช ืื‘ื˜ื—ื”? ืœื›ื•ืœื ื• ื™ืฉ ืื™ื ื˜ื•ืื™ืฆื™ื” ืœื’ื‘ื™ "ืงื•ื“ ื˜ื•ื‘", ืงื•ื“ ื˜ื•ื‘ ื–ื” ืงื•ื“ ืฉืื ื™ ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ืœื• ืคื™ืฆ'ืจื™ื ื‘ืงืœื•ืช ื‘ืœื™ ืœืฉื‘ื•ืจ ื“ื‘ืจื™ื ืื—ืจื™ื, ืฉืขื•ื‘ื“ ืžื”ืจ, ืฉืงืœ ืœื™ ืœืงืจื•ื ืื•ืชื• ื•ืœืชืงืŸ ื‘ื• ื‘ืื’ื™ื. ืื‘ืœ ื–ื” ื”ื›ืœ ื“ื™ื‘ื•ืจื™ื ื‘ืื•ื•ื™ืจ. ื‘ืฉื‘ื™ืœ ืœื”ืชืงื“ื ืœื›ื™ื•ื•ืŸ ืงื•ื“ ื˜ื•ื‘ ืขื“ื™ืฃ ืœื”ื™ื•ืช ืกืคืฆื™ืคื™ื™ื. ื‘ืคืขื ื”ื‘ืื” ืฉืืชื ืฆืจื™ื›ื™ื ืœื‘ื ื•ืช ืคื™ืฆ'ืจ ืฉืืœื• ืืช ืขืฆืžื›ื ืื™ื–ื” ื“ื‘ืจื™ื ื‘ืงื•ื“ ื™ื”ืคื›ื• ืื•ืชื• ืœืžืžืฉ ื’ืจื•ืข (ื‘ืขื™ื ื™ื›ื ื•ืœืžืขืจื›ืช ืฉืœื›ื)? ืื™ื–ื” ืกื•ื’ื™ ื‘ืขื™ื•ืช ืืชื ืžืžืฉ ืœื ืžื•ื›ื ื™ื ืœืจืื•ืช ื‘ืงื•ื“? ืื ืœื“ื•ื’ืžื” ืื ื™ ื›ื•ืชื‘ ืืคืœื™ืงืฆื™ื™ืช ืžื•ื‘ื™ื™ืœ ื•ืขื‘ื•ืจื™ ื•ืขื‘ื•ืจ ื”ืœืงื•ื—ื•ืช ืฉืœื™ ืื ื™ ื™ื•ื“ืข ืฉื”ื“ื‘ืจ ื”ื›ื™ ื’ืจื•ืข ืฉื™ื›ื•ืœ ืœืงืจื•ืช ื–ื” ืฉื”ืืคืœื™ืงืฆื™ื” ืชืชืจืกืง ื‘ืืžืฆืข, ืื– ืื ื™ ืžื•ื›ืŸ "ืœืฉืœื" ื‘ืงื•ื“ ื›ืคื•ืœ ืื• ืงืฆืช ื™ื•ืชืจ ืืจื•ืš ื•ื‘ืœื‘ื“ ืฉืื ื™ ืžืงืคื™ื“ ืœื˜ืคืœ ื‘ื›ืœ ืžืงืจื™ ื”ืงืฆื” ื•ืืคื™ืœื• ืžื•ื•ื“ื ื›ืžื” ืคืขืžื™ื ืฉื“ื‘ืจื™ื ื”ื ื›ืžื• ืฉืื ื™ ื—ื•ืฉื‘ ืฉื”ื. ืœืขื•ืžืช ื–ืืช ืื ืื ื™ ื‘ืคื™ืชื•ื— ืกื˜ืืจื˜-ืืค ื•ืขื“ื™ื™ืŸ ืœื ื‘ื˜ื•ื— ืžื” ื”ืœืงื•ื—ื•ืช ืฉืœื™ ืจื•ืฆื™ื, ืื ื™ ืื•ืœื™ ืžื•ื›ืŸ "ืœืฉืœื" ื‘ื”ืชืจืกืงื•ื™ื•ืช ืžื“ื™ ืคืขื ื‘ืฉื‘ื™ืœ ืฉื™ื”ื™ื” ืœื™ ืงืœ ืœื”ื•ืกื™ืฃ ื•ืœื”ื•ืจื™ื“ ืคื™ืฆ'ืจื™ื ื•ืœืขื“ื›ืŸ ืืช ื”ืžืžืฉืง ืžื”ื™ื•ื ืœืžื—ืจ. ืื™ ืืคืฉืจ ืœืงื‘ืœ ื”ื›ืœ, ื•ืืคื™ืœื• ื‘ืžืขืจื›ื•ืช ื’ื“ื•ืœื•ืช ื™ืฉ ื‘ืขื™ื•ืช. ืื‘ืœ ื›ืฉืื ื—ื ื• ื™ื•ื“ืขื™ื ืœื”ื’ื“ื™ืจ ื‘ืฆื•ืจื” ื‘ืจื•ืจื” ืืช ื”ืžื˜ืจื•ืช ืฉืœื ื• ืืคืฉืจ ืœื”ื’ืฉื™ื ืื•ืชืŸ. ืœืคื—ื•ืช ื‘ืงื•ื“.

ToCode
1 419
# ืฉืชื™ ื“ืจื›ื™ื ื˜ื•ื‘ื•ืช ื•ืื—ืช ืœื ืžืžืฉ ื›ื“ื™ ืœื”ื“ืคื™ืก ืื•ืจืš ืฉื•ืจื” ื‘ื™ื•ื ื™ืงืก ื™ืฉ ืœื›ื ืชื•ื›ื ื™ืช ืฉืžื™ื™ืฆืจืช ืคืœื˜ ื•ืืชื ืฆืจื™ื›ื™ื ืœื’ืœื•ืช ืžื” ื”ืื•ืจืš ืฉืœ ื›ืœ ืฉื•ืจื” ื‘ืคืœื˜ ื•ืœื”ื“ืคื™ืก ืืช ื”ืื•ืจืš ืœืคื ื™ ื”ืฉื•ืจื” ืขืฆืžื”. ืื™ืš ืขื•ืฉื™ื ืืช ื–ื”? ื”ื ื” ืฉืœื•ืฉื” ืจืขื™ื•ื ื•ืช: ## ื”ืคืฉื•ื˜: awk ื”ื›ืœื™ ื”ืจืืฉื•ืŸ ืฉืงื•ืคืฅ ืœืจืืฉ ื”ื•ื awk, ืฉืœืžืจื•ืช ืฉื”ื•ื ื™ื•ื“ืข ื•ืื•ื”ื‘ ืœื—ืชื•ืš ืืช ื”ืฉื•ืจื” ืœืžื™ืœื™ื, ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื• ื’ื ื‘ืฉื‘ื™ืœ ืœื‘ืฆืข ืคืขื•ืœื•ืช ืขืœ ื”ืฉื•ืจื” ื”ืžืœืื”. ื”ืคืงื•ื“ื” ืชื”ื™ื”:
ls -l | awk '{print length($0) " " $0 }'
## ื”ืงืจื™ืคื˜ื™: perl ืื—ืจื™ ืฉื›ืชื‘ืชื™ ืืช ื–ื” ื‘ awk ื ื™ืกื™ืชื™ ืœืžืฆื•ื ืขื•ื“ ื›ืœื™ื ืฉืชื•ืžื›ื™ื ื‘ืชื—ื‘ื™ืจ ื“ื•ืžื”. ืžืื•ื“ ืจืฆื™ืชื™ ืืช sed ืื‘ืœ ืœื ืžืฆืืชื™ ืื™ืš ืœื—ืฉื‘ ืฉื ืืช ืื•ืจืš ื”ืฉื•ืจื”. ืคืจืœ ื”ื™ืชื” ื”ื‘ื—ื™ืจื” ื”ื‘ืื”:
ls -l | perl -nl -e 'print(length($_) . " $_")'
ื–ื” ืงืฆืช ื™ื•ืชืจ ืืจื•ืš ืžื” awk ืื‘ืœ ืขื•ื‘ื“ ื•ืžืืคืฉืจ ื™ื•ืชืจ ื’ืžื™ืฉื•ืช ืื ื‘ืขืชื™ื“ ื ืฆื˜ืจืš. ื•ืืœื” ืžื›ื ืฉืžื—ืคืฉื™ื ื›ืœื™ ื™ื•ืชืจ ืžื•ื“ืจื ื™ ื™ื›ื•ืœื™ื ืชืžื™ื“ ืœื”ื—ืœื™ืฃ ืืช ื” perl ื‘ ruby:
ls -l | ruby -nl -e 'puts "#{$_.length} #{$_}"'
## ื”ืžืกื•ื‘ืš ืขื ื”ื˜ืขื•ืช: xargs ื”ื›ื™ื•ื•ืŸ ื”ืื—ืจื•ืŸ ื•ื”ืžืกื•ื‘ืš ื‘ื™ื•ืชืจ ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ xargs ื›ื“ื™ ืœืฉื‘ื•ืจ ืืช ื”ืคืœื˜ ืœืฉื•ืจื•ืช, ื•ืื– ืœื”ืคืขื™ืœ wc ืขืœ ื›ืœ ืฉื•ืจื”. ื–ื” ื ืจืื” ื›ื›ื”:
ls -l | xargs -I % sh -c 'echo $(echo -n "%" | wc -c) "%"'
ื›ืืŸ ืฆืจื™ืš ืœืฉื™ื ืœื‘ ืœืžืจื›ืื•ืช ืกื‘ื™ื‘ ื›ืœ ืกื™ืžื ื™ ื”ืื—ื•ื– ื›ื“ื™ ืฉ bash ืœื ื‘ื˜ืขื•ืช ื™ืžื—ืง ืœื ื• ืจื•ื•ื—ื™ื ื›ืคื•ืœื™ื, ื•ืืคื™ืœื• ืื—ืจื™ ื›ืœ ื”ืžืจื›ืื•ืช ืขื“ื™ื™ืŸ ื™ืฉ ื›ืืŸ ื˜ืขื•ืช, ืœืžืฉืœ ืื ื‘ืงืœื˜ ื™ืฉ ืฉื•ืจื” ืฉืžื›ื™ืœื” ืกื™ืžืŸ ื“ื•ืœืจ ืื– bash ื™ื ืกื” ืœืคืขื ื— ืืช ื”ืžื™ืœื” ืฉืžืชื—ื™ืœื” ื‘ื“ื•ืœืจ ื‘ืชื•ืจ ืžืฉืชื ื”. ื”ืœืงื— ืžื›ืœ ื”ืกื™ืคื•ืจ? ื›ืฉื™ืฉ ื“ืจืš ืคืฉื•ื˜ื” ืœืคืชื•ืจ ื‘ืขื™ื” ืขื“ื™ืฃ ืœื‘ื—ื•ืจ ื‘ื”. ืกื™ื›ื•ื™ ื˜ื•ื‘ ืฉื”ื™ื ื’ื ืชื”ื™ื” ื™ื•ืชืจ ื ื›ื•ื ื”.

ToCode
1 419
# ื”ืชื™ืงื•ืŸ ื”ืœื ื ื›ื•ืŸ (ืื•: ืœืžื” ื”ื•ื•ื‘ื™ื ืจ ื”ื•ืคื™ืข ื‘ืฉืขื” ื”ืœื ื ื›ื•ื ื”) ืจื‘ื™ื ืžื›ื ืฉืžื• ืœื‘ ืฉื”ื•ื•ื‘ื™ื ืจ ื‘ืืชืจ ื”ื•ืคื™ืข ื‘ืฉื ื™ ืžืงื•ืžื•ืช ืฉื•ื ื™ื ื‘ืฉืชื™ ืฉืขื•ืช ืฉื•ื ื•ืช: ื‘ื“ืฃ ืจืฉื™ืžืช ื”ื•ื•ื‘ื™ื ืจื™ื ื”ื•ื ื”ื•ืคื™ืข ื‘ืฉืขื” ื”ื ื›ื•ื ื” (ืขืฉืจ ื‘ื‘ื•ืงืจ), ืื‘ืœ ื‘ื“ืฃ ื”ืื™ืจื•ืข ืขืฆืžื• ื”ื•ื ื”ื•ืคื™ืข ื‘ืฉืขื” ืฉืžื•ื ื” ื‘ื‘ื•ืงืจ. ื‘ื•ืื• ื ืจืื” ืœืžื” ื–ื” ืงืจื” ื•ืžื” ืืคืฉืจ ืœืœืžื•ื“ ืžื–ื”. ## ืœืžื” ื–ื” ืงืจื”: ืื–ื•ืจื™ ื–ืžืŸ ื›ืฉืื ื—ื ื• ืฉื•ืžืจื™ื ืฉืขื” ื‘ื‘ืกื™ืก ื ืชื•ื ื™ื ื ื•ื— ืžืื•ื“ ืœืฉืžื•ืจ ืื•ืชื” "ืžื ื•ื˜ืจืœืช" ืžืื–ื•ืจ ื–ืžืŸ. ืœื“ื•ื’ืžื” ืขื‘ื•ืจ ื•ื•ื‘ื™ื ืจ ืœื ืžื•ื–ืจ ืœื“ืžื™ื™ืŸ ืฉืžื™ืฉื”ื• ืžืืจืฅ ืื—ืจืช ื™ืฆืคื” ื‘ืืชืจ ื•ื™ืจืฆื” ืœืจืื•ืช ืืช ื”ืฉืขื•ืช ื‘ืื–ื•ืจ ื”ื–ืžืŸ ืฉืœื•. ื‘ืฉืœื™ืคื” ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ืžื™ืจ ืืช ื”ืฉืขื” ืœืื–ื•ืจ ื”ื–ืžืŸ ืœืคื™ื• ืจื•ืฆื™ื ืœื”ืฆื™ื’, ื•ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืฉื”ื• ืฉืฉืžื•ืจ ื‘ื”ืขื“ืคื•ืช ื”ืžืฉืชืžืฉ ืื• ื‘ื—ื™ืจืช ืื–ื•ืจ ื–ืžืŸ ื’ืœื•ื‘ืืœื™ ืœืืชืจ ื›ืš ืฉื”ืฉืขื” ืฉืชื•ืฆื’ ืชื”ื™ื” ื–ื”ื” ืœื›ืœ ื”ืžืฉืชืžืฉื™ื. ื‘ื“ืฃ ืจืฉื™ืžืช ื”ื•ื•ื‘ื™ื ืจื™ื ื”ื•ืคื™ืข ื”ืงื•ื“ ื”ื‘ื ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ืฉืขื” ื”ืžืชืื™ืžื” ืฉืœ ื”ื•ื•ื‘ื™ื ืจ ื‘ืื–ื•ืจ ื”ื–ืžืŸ ืฉืœื ื•:
<% @workshops.each do |wi| %>
  <% ldate = wi.date.in_time_zone("Jerusalem") %>

  ...
  
  <%= ldate.strftime("%b") %>
ื”ืžืฉืชื ื” ldate ื”ื•ื ืงื™ืฆื•ืจ ืฉืœ ื”ืžื™ืœื” local_date ื•ืžื—ื–ื™ืง ืืช ื”ืชืืจื™ืš ื•ื”ืฉืขื” ื‘ืฆื™ืจื•ืฃ ืื–ื•ืจ ื–ืžืŸ. ## ืื– ืžื” ื”ื‘ืขื™ื”? ื”ืงื•ื“ ืฉืœืžืขืœื” ื”ื•ื ื›ื‘ืจ Code Smell ื•ืงืœ ืœืจืื•ืช ืืช ื–ื”: ื”ื•ื ืคื•ืชืจ ื‘ืขื™ื” ื’ืœื•ื‘ืืœื™ืช ื‘ืฆื•ืจื” ื ืงื•ื“ืชื™ืช. ื‘ืžืงื•ื ืœื”ื’ื“ื™ืจ ื‘ืžืงื•ื ืื—ื“ ืฉื›ืœ ื”ืฉืขื•ืช ื‘ืืชืจ ื™ื•ืชืืžื• ืœืื–ื•ืจ ื–ืžืŸ ื™ืจื•ืฉืœื™ื, ื”ืงื•ื“ ืžื˜ืคืœ ืจืง ื‘ืฉืขื” ื‘ื“ืฃ ืจืฉื™ืžืช ื”ื•ื•ื‘ื™ื ืจื™ื. ื›ื›ืœ ื”ื ืจืื” ื”ืงื•ื“ ื”ื’ื™ืข ืœืฉื ืื—ืจื™ ืฉืžื™ืฉื”ื• ื“ื™ื•ื•ื— ืฉื‘ื“ืฃ ืจืฉื™ืžืช ื”ื•ื•ื‘ื™ื ืจื™ื ื”ืฉืขื” ืœื ื ื›ื•ื ื”, ืžืชื•ืš ืจืฆื•ืŸ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื‘ืœื™ ืœืฉื‘ื•ืจ ื“ื‘ืจื™ื ืื—ืจื™ื. ืœื ืฆืจื™ืš ืœื”ืชืืžืฅ ื‘ื“ืžื™ื•ืŸ ื›ื“ื™ ืœื”ื‘ื™ืŸ ืžื” ืงืจื” ื”ืœืื”. ื‘ื“ืฃ ื”ื•ื•ื‘ื™ื ืจ ื”ื™ื” ืœื™ ืืช ื”ืงื•ื“ ื”ื‘ื:
<% wi = @workshop_instance %>
<% date = wi.date.strftime('%d/%m/%Y') %>
<% start_time = wi.date.strftime('%l:%M%P') %>
<% end_time = (wi.date + (wi.workshop&.duration || 0).hours).strftime('%l:%M%P') %>
ื•ื›ืš ืฉืขืช ื”ื”ืชื—ืœื” ืฉืœ ื”ื•ื•ื‘ื™ื ืจ ืœื ืงื™ื‘ืœื” ืืช ื”ื”ืชืืžื” ืœืื–ื•ืจ ื”ื–ืžืŸ ืฉื‘ื•ืฆืขื” ื‘ืจืฉื™ืžืช ื”ื•ื•ื‘ื™ื ืจื™ื. ## ื”ืชื™ืงื•ืŸ ื‘ืขื‘ื•ื“ื” ืขืœ ืžืขืจื›ืช ื—ืฉื•ื‘ ืœื”ื‘ื™ืŸ ืื™ื–ื” ืคืขื•ืœื•ืช ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื‘ืฆืข ื‘ืจืžื” ืžืงื•ืžื™ืช ื•ืื™ื–ื” ืคืขื•ืœื•ืช ืฆืจื™ื›ื•ืช ื‘ืืžืช ืœื”ืฉืคื™ืข ืขืœ ื›ืœ ื”ืžืขืจื›ืช. ื”ืชืืžืช ืื–ื•ืจ ื–ืžืŸ ืœืžืฉืชืžืฉ ืกืคืฆื™ืคื™ ืœืคื™ ื”ื’ื“ืจื•ืช ื”ืžืฉืชืžืฉ ืืžื•ืจื” ืœื”ื™ืขืฉื•ืช ื‘ืจืžื” ืžืงื•ืžื™ืช, ืื—ืจื™ ืฉืื ื—ื ื• ื™ื•ื“ืขื™ื ืžื™ ื”ืžืฉืชืžืฉ ื•ืžื” ืื–ื•ืจ ื”ื–ืžืŸ ื”ืžื•ืขื“ืฃ ืขืœื™ื• (ืื ื ื—ืœื™ื˜ ื™ื•ื ืื—ื“ ืœืžืžืฉ ืคื™ืฆ'ืจ ื›ื–ื”). ื”ืชืืžืช ืื–ื•ืจ ื–ืžืŸ ื›ืœืœื™ ืœื›ืœ ื”ืฉืขื•ืช ื‘ืืชืจ ืฆืจื™ื›ื” ืœื”ืชื‘ืฆืข ื‘ืžืงื•ื ืื—ื“, ื›ื“ื™ ืฉื›ืœ ืคืขื ืฉืžื™ืฉื”ื• ืžืฆื™ื’ ืฉืขื” ื”ื™ื ืชื•ืฆื’ ืœืคื™ ืื–ื•ืจ ื”ื–ืžืŸ ื”ืžื•ืขื“ืฃ. ื‘ืจื™ื™ืœืก ื”ื’ื“ืจื•ืช ื’ืœื•ื‘ืืœื™ื•ืช ื ืžืฆืื•ืช ื‘ืงื‘ืฆื™ื ื‘ืชื™ืงื™ื™ืช config ื•ืœื›ืŸ ืชื™ืงื•ืŸ ื”ืฉืขื•ืช ื‘ื›ืœ ื”ืืชืจ ื”ื™ื” ื‘ืกืš ื”ื›ืœ ืกื™ืคื•ืจ ืฉืœ ืœื”ื•ืกื™ืฃ ืืช ื”ืฉื•ืจื”:
config.time_zone = "Jerusalem"
ืœืงื•ื‘ืฅ config/application.rb. ื™ื•ืชืจ ื—ืฉื•ื‘ ืžื”ืชื™ืงื•ืŸ ื”ืกืคืฆื™ืคื™ ื”ื•ื ื”ืœืงื— - ื‘ืคื™ืชืจื•ืŸ ื‘ืขื™ื” ื ืงื•ื“ืชื™ืช ื”ื›ื™ ืงืœ ืœื‘ืจื•ื— ืž Refactoring ื•ืœืชืงืŸ ืืช ื”ื‘ืขื™ื” ื›ืš ืฉื›ืžืขื˜ ืœื ืชืฉืคื™ืข ืขืœ ืžืงื•ืžื•ืช ืื—ืจื™ื ื‘ืžืขืจื›ืช. ืื‘ืœ ื™ื•ืชืจ ื—ื›ื ืœืขืฆื•ืจ, ืœื—ืฉื•ื‘, ืœื”ื‘ื™ืŸ ืืช ื”ื‘ืขื™ื” ื•ืœืฉืื•ืœ ืืช ืขืฆืžื ื• ืื ื”ื‘ืขื™ื” ื”ื™ื ื‘ืืžืช ื ืงื•ื“ืชื™ืช ื‘ืขืžื•ื“ ืžืกื•ื™ื ืื• ื‘ืขื™ื” ื›ื•ืœืœืช ืฉื“ื•ืจืฉืช ืฉื™ื ื•ื™ ื”ื’ื“ืจื•ืช ืžืขืจื›ืชื™ ืื• ืืคื™ืœื• Refactoring.

ToCode
1 419
# ื”ื–ืžื ื” ืœื•ื•ื‘ื™ื ืจ: ื˜ืขื•ื™ื•ืช ื ืคื•ืฆื•ืช ืขื ืจื™ืืงื˜ ืจื™ืืงื˜ ื”ื™ื ืจืง ืกืคืจื™ื™ืช ืชืฆื•ื’ื”. ืœืจื™ืืงื˜ ื™ืฉ ื‘ื™ืฆื•ืขื™ื ืžืฆื•ื™ื ื™ื. ืจื™ืืงื˜ ื”ืจื‘ื” ืคื—ื•ืช ืžืกื•ื‘ื›ืช ืž X/Y/Z ื•ืœื›ืŸ ืงื•ื“ ืจื™ืืงื˜ ืชืžื™ื“ ื™ื•ืฆื ื™ื•ืชืจ ื™ืขื™ืœ. ื”ืืžืช ื”ื™ื ืฉืœื ืžืฉื ื” ืžื”ื™ ืกืคืจื™ื™ืช ื”ืคื™ืชื•ื— ืฉืชื‘ื—ืจื• ืœืคืจื•ื™ืงื˜ ืฉืœื›ื, ืืชื ืฆืจื™ื›ื™ื ืœื”ื›ื™ืจ ืื•ืชื” ื•ืืช ื”ืฉื˜ื•ื™ื•ืช ืฉืœื” ื›ื“ื™ ืœื ืœื™ืคื•ืœ ื‘ื‘ื•ืจื•ืช ื›ืฉืขื•ื‘ืจื™ื ืž Tutorials ื•ื“ื•ื’ืžืื•ืช ืฉืœ ืงื•ืจืกื™ื ืœืงื•ื“ ืืžื™ืชื™. ื•ื‘ืจื™ืืงื˜ ื™ืฉ ืœื ืžืขื˜ ื‘ื•ืจื•ืช ื›ืืœื”. ื‘ื™ื•ื ื—ืžื™ืฉื™ ื”ืงืจื•ื‘ ื‘ืขืฉืจ ื‘ื‘ื•ืงืจ ืื ื™ ืื“ื’ื™ื ืžืกืคืจ ื‘ื•ืจื•ืช ื‘ืขื‘ื•ื“ื” ืขื ืจื™ืืงื˜ ื“ืจืš ืชื•ื›ื ื™ื•ืช ืจื™ืืงื˜ ืฉืžื›ื™ืœื•ืช ื‘ืื’ื™ื ืžืขื ื™ื™ื ื™ื, ื•ืœื›ืœ ืชื•ื›ื ื™ืช ื ืจืื” ืžื” ืžืงื•ืจ ื”ื‘ืขื™ื” ื•ืžื” ืืคืฉืจ ืœืœืžื•ื“ ืขืœ ืจื™ืืงื˜ ืžืชื•ืš ื”ื‘ื ื” ืฉืœ ื”ื‘ืขื™ื”. ื”ื•ื•ื‘ื™ื ืจ ืžื™ื•ืขื“ ืœืื ืฉื™ื ืฉืžื›ื™ืจื™ื ื•ื›ืชื‘ื• ืจื™ืืงื˜ ื•ืจื•ืฆื™ื ืœื”ื›ื™ืจ ืืช ื”ื‘ื•ืจื•ืช ืฉืœื• ื›ื“ื™ ืœื ืœื™ืคื•ืœ ื‘ื”ื ื‘ืงื•ื“ ืืžื™ืชื™. ื‘ื™ืŸ ื”ื ื•ืฉืื™ื ืฉืื“ื‘ืจ ืขืœื™ื”ื ื™ื”ื™ื•: 1. ื˜ืขื•ื™ื•ืช ื ืคื•ืฆื•ืช ื‘ Data Flow ื‘ื™ืŸ ืงื•ืžืคื•ื ื ื˜ื•ืช. 2. ื˜ืขื•ื™ื•ืช ื ืคื•ืฆื•ืช ื‘ื ื•ืฉื Immutable Data. 3. ื˜ืขื•ื™ื•ืช ื ืคื•ืฆื•ืช ื‘ืฉื™ืžื•ืฉ ื‘ Hooks, ื‘ืžื™ื•ื—ื“ ื‘ืžืขืจืš ื”ืชืœื•ื™ื•ืช ื• useEffect. 4. ืื™ืš ืœื‘ื—ื•ืจ ืงื•ืžืคื•ื ื ื˜ื•ืช ื‘ืฆื•ืจื” ื™ื•ืชืจ ื™ืขื™ืœื”. 5. ื–ืžืŸ ืœืฉืืœื•ืช ืฉืœื›ื. ื”ื›ื ืชื™ ื”ืจื‘ื” ื“ื•ื’ืžืื•ืช ืื– ืชื‘ื•ืื• ืขืจื ื™ื™ื ื•ื ืชืจืื” ื‘ื—ืžื™ืฉื™, ืื” ื›ืžืขื˜ ืฉื›ื—ืชื™ - ืงื™ืฉื•ืจ ืœื”ืจืฉืžื”: https://www.tocode.co.il/workshops/121.

ToCode
1 419
# ืงื•ื“ ื˜ื•ื‘, ืงื•ื“ ืขื•ื‘ื“ ืืœื” ืฉื ื™ ืฆื™ืจื™ื ืฉื•ื ื™ื. ื‘ืฆื™ื•ืจ ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืžืขืจื›ืช ืฆื™ืจื™ื, ืฆื™ืจ ื” x ืžืชืื™ื ืœืงื•ื“ ืขื•ื‘ื“ ืื• ืœื ืขื•ื‘ื“ (ื•ื›ืŸ ื–ื• ืกืงืืœื”, ื›ื™ ืชืžื™ื“ ื™ืฉ ื‘ืื’ื™ื ืื• ืคืฉืจื•ืช ื‘ื‘ื™ืฆื•ืขื™ื ืื• ืžื” ืœื), ื•ืฆื™ืจ y ืžืชืื™ื ืœืงื•ื“ ื˜ื•ื‘ ืื• ืœื ื˜ื•ื‘. ื‘ื›ืชื™ื‘ืช ืงื•ื“ ื—ื“ืฉ ื›ื•ืœื ื—ื•ืœืžื™ื ืขืœ ื”ืจื‘ืข ื”ื™ืžื ื™-ืขืœื™ื•ืŸ ืฉืœ ื”ืžืคื”, ื—ื™ื•ื‘ื™ ื‘ืฆื™ืจ ื”"ืขื•ื‘ื“" ื•ื—ื™ื•ื‘ื™ ื‘ืฆื™ืจ ื”"ื˜ื•ื‘", ืื‘ืœ ื‘ืจื•ื‘ ื”ืžืงืจื™ื ืื ื—ื ื• ืœื ืžื‘ื™ื ื™ื ืืช ื”ื“ืจื™ืฉื•ืช ืžืกืคื™ืง ื˜ื•ื‘ ื•ื ื•ื—ืชื™ื ืื™ืคืฉื”ื• ืœื™ื“ ื”ืืคืก. ื”ื—ืœืง ื”ื™ื•ืชืจ ืžืขื ื™ื™ืŸ ื‘ืขื‘ื•ื“ื” ื”ื•ื ืขื“ื›ื•ืŸ ืงื•ื“ ืงื™ื™ื. ืคื” ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืจื•ื‘ ื”ืžืชื›ื ืชื™ื ื”ื™ื ืœื”ืชืžืงื“ ื‘"ืขื•ื‘ื“", ื•ืœื ืกื•ืช ืœืฉื ื•ืช ื›ืžื” ืฉืคื—ื•ืช ื›ื“ื™ ืœืชืงืŸ ืืช ื”ื‘ืื’ ืื• ืœืžืžืฉ ืืช ื”ืคื™ืฆ'ืจ. ืจื™ืคืงื˜ื•ืจ ืฉื™ื”ืคื•ืš ืืช ื”ืงื•ื“ ืœื™ื•ืชืจ ื˜ื•ื‘ ื‘ื“ืจืš ื›ืœืœ ืœื ื‘ื ื‘ื—ืฉื‘ื•ืŸ ื›ื™ ื”ื•ื ืžื—ื•ืฅ ืœืกืงื•ืค ืฉืœ ืื•ืชื• ืคื™ืฆ'ืจ ืื• ื‘ืื’. ืื‘ืœ ืื ื ื—ื–ื•ืจ ืœืžืขืจื›ืช ื”ืฆื™ืจื™ื ืฉืœื ื•, ืชื”ืœื™ืš ื›ื–ื” ืžื‘ื˜ื™ื— ืฉืœืื•ืจืš ื–ืžืŸ ื™ื”ื™ื” ืœื ื• ืงื•ื“ ืจืข. ืื ื—ื ื• ืžืชืงื“ืžื™ื ื‘ืฆื™ืจ ืื—ื“ ื•ื ื•ืชื ื™ื ืœืžื–ืœ ืœืขืฉื•ืช ืืช ืฉืœื• ื‘ืฆื™ืจ ื”ืฉื ื™. ืจื•ื‘ ื”ืงื•ื“ ื”ื’ืจื•ืข ืฉืื ื—ื ื• ื›ื•ืชื‘ื™ื ืœื ื ื›ืชื‘ ื‘ืฉื‘ื•ืข ื”ืจืืฉื•ืŸ ืฉืœ ื”ืคืจื•ื™ืงื˜, ืืœื ื”ื•ื ื ื•ืฆืจ ื‘ืื‘ื•ืœื•ืฆื™ื” ื›ืฉืื ื—ื ื• ืœื•ืงื—ื™ื ืื‘ืกื˜ืจืงืฆื™ื” ืœื ื ื›ื•ื ื” ื•ืžืžืฉื™ื›ื™ื ืœื‘ื ื•ืช ืขืœื™ื” ืขื•ื“ ื•ืขื•ื“ ืžื ื’ื ื•ื ื™ื, ื‘ืžืงื•ื ืœืชืงืŸ ืืช ื”ื™ืกื•ื“ื•ืช. ื›ืœ ื‘ื ื™ื” ื›ื–ืืช ืžื•ืจื™ื“ื” ืื•ืชื ื• ืขื•ื“ ื›ืžื” ื ืงื•ื“ื•ืช ื‘ืฆื™ืจ ื”"ื˜ื•ื‘". ื”ืคื™ืชืจื•ืŸ ื”ื™ื—ื™ื“ ืœื“ืขืชื™ ื”ื•ื ืœื™ื™ืฆืจ ื ื”ืœื™ ืขื‘ื•ื“ื” ืฉืžื—ื™ื™ื‘ื™ื ืื•ืชื ื• ืœืฉืคืจ ื›ืœ ืงื•ื“ ืฉืื ื—ื ื• ื ื•ื’ืขื™ื ื‘ื• ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”. ื“ื•ื’ืžืื•ืช ืœื›ืืœื” ื ื”ืœื™ื ื™ื”ื™ื•- 1. ื—ื•ื‘ื” ืœื™ื™ืฆืจ ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ืœื›ืœ ื‘ืื’ ืฉืžืชืงื ื™ื. 2. ืœื”ืฉืื™ืจ ืžืงื•ื ืœืžืชื›ื ืชื™ื ืœื”ื•ืกื™ืฃ ืžืฉื™ืžื•ืช ืจื™ืคืงื˜ื•ืจื™ื ื’ ืœ Jira ื›ื‘ืจ ื‘ืกืคืจื™ื ื˜ ื”ื‘ื, ื•ืœืขื•ื“ื“ ืžืชื›ื ืชื™ื ืœื™ื™ืฆืจ ืœืขืฆืžื ื›ืืœื” ืžืฉื™ืžื•ืช. 3. ืฉื™ืžื•ืฉ ื‘ Git Hooks ื›ื“ื™ ืœื•ื•ื“ื ื”ื•ื“ืขื•ืช ืงื•ืžื™ื˜ ืžืคื•ืจื˜ื•ืช ื‘ื’ื™ื˜. 4. ื”ื›ื ืกืช ืฉื™ื“ืจื•ื’ื™ ืชืœื•ื™ื•ืช ื•ืชืฉืชื™ืช ื‘ืชื•ืจ ืžืฉื™ืžื” ื—ื•ื–ืจืช ื‘ Jira, ืคืขื ื‘ X ืกืคืจื™ื ื˜ื™ื. ื™ืฉ ืœื›ื ืจืขื™ื•ื ื•ืช ื ื•ืกืคื™ื ืœื ื”ืœื™ ืขื‘ื•ื“ื” ืฉืžืฉืคืจื™ื ืืช ืื™ื›ื•ืช ื”ืงื•ื“ ืœืื•ืจืš ื–ืžืŸ? ืขื›ืฉื™ื• ื”ื—ื–ืจืชื™ ืืช ื”ืชื’ื•ื‘ื•ืช ืื– ืืคืฉืจ ืœืฉืชืฃ ื›ืืŸ ืื• ื‘ื˜ืœื’ืจื.

ToCode
1 419
return draft.map(d => d.id === newNoteId ? data.data : d )
  }));
ื•ืื ื”ื™ืชื” ืฉื’ื™ืื” ื•ื”ืฉืจืช ืœื ื”ืฆืœื™ื— ืœืฉืžื•ืจ ืืช ื”ืคืชืง? ื‘ืฉื‘ื™ืœ ื–ื” ื™ืฉ ืœื™ ื‘ืœื•ืง catch:
} catch (err) {
 patchResult.undo();
}
ืคืงื•ื“ืช undo ืชื‘ื˜ืœ ืืช ื”ืขื“ื›ื•ืŸ ื•ืชื—ื–ื™ืจ ืืช ืจืฉื™ืžืช ื”ืคืชืงื™ื ื‘ Cache ืœืขืจืš ืฉืœื” ืœืคื ื™ ื”ื›ื™ืฉืœื•ืŸ. ื .ื‘. ื”ืงื•ื“ ืœื ืžื˜ืคืœ ื‘ืžืฆื‘ ืฉืœ ื›ืžื” ืคืชืงื™ื ืฉื ื•ืฆืจื™ื ื™ื—ื“, ื—ืœืงื ืžืฆืœื™ื—ื™ื ื•ื—ืœืงื ื ื›ืฉืœื™ื. ื‘ืžืฆื‘ ื›ื–ื” ืคืชืง ืฉื ื›ืฉืœ ืขืฉื•ื™ ืœื”ื—ื–ื™ืจ ืืช ืจืฉื™ืžืช ื”ืคืชืงื™ื ื™ื•ืชืจ ืžื“ื™ ืื—ื•ืจื”, ืœืžืฆื‘ ืฉืœื ืžืจืื” ืืช ื”ืคืชืงื™ื ืฉื”ืฆืœื™ื—ื•, ื›ื™ ื” patchResult ืฉืœ ื”ืคืชืง ืฉื ื›ืฉืœ ื ื•ืฆืจ ืœืคื ื™ ืฉืคืชืงื™ื ืื—ืจื™ื ื”ืฆืœื™ื—ื•. ื‘ืฉื‘ื™ืœ ืœื”ืชืžื•ื“ื“ ืขื ืžืฆื‘ ื›ื–ื” ื ืฆื˜ืจืš ืœืขื“ื›ืŸ ืืช ื”ืงื•ื“ ื‘ catch ืœื”ื™ื•ืช ื™ื•ืชืจ ืกืคืฆื™ืคื™ ื•ืžืžืฉ ืœืžื—ื•ืง ืืช ื”ืคืชืง ื”ื—ื“ืฉ ืœืคื™ ื” id ืฉืœื• ื‘ืื•ืคืŸ ื”ื‘ื:
} catch (err) {
 dispatch(
   notesApi.util.updateQueryData('getNotes', undefined, (draft) => {
     return draft.filter(note => note.id !== newNoteId);
   }));
  }
ืงื•ื“ ื›ื–ื” ืžืืคืฉืจ ืœ undo ืœื”ื™ื•ืช ื™ื•ืชืจ ืกืคืฆื™ืคื™ ื•ืžืžืฉ ืœืžื—ื•ืง ืืช ื”ืคืชืง ื”ื—ื“ืฉ ืฉื ื™ืกื™ื ื• ืœื”ื›ื ื™ืก ื‘ืžืงื•ื ืœื”ื—ื–ื™ืจ ืืช ื”ืžืฆื‘ ืœืžื” ืฉื”ื™ื” ื›ืฉื™ืฆืจื ื• ืืช ื” patch.

ToCode
1 419
# ืขื“ื›ื•ื ื™ื ืื•ืคื˜ื™ืžื™ื™ื ื‘ Redux Toolkit Query ื”ืžื•ืฉื’ "ืขื“ื›ื•ืŸ ืื•ืคื˜ื™ืžื™" ืžืชืืจ ืขื“ื›ื•ืŸ ืฉื‘ื• ืื ื—ื ื• ื‘ื˜ื•ื—ื™ื ืฉื”ื›ืœ ื™ืขื‘ื•ื“, ื•ืœื›ืŸ ืื ื—ื ื• ืžืขื“ื›ื ื™ื ืืช ืžืžืฉืง ื”ืžืฉืชืžืฉ ื‘ืžื™ื“ืข ื”ื—ื“ืฉ ืขื•ื“ ืœืคื ื™ ืฉืงื™ื‘ืœื ื• ืื™ืฉื•ืจ ืžื”ืฉืจืช ืฉืื›ืŸ ื”ืžื™ื“ืข ืชืงื™ืŸ, ื•ืจืง ืื ื”ืฉืจืช ื™ื“ื•ื•ื— ืขืœ ืฉื’ื™ืื” ืื– ื ื‘ื˜ืœ ืืช ื”ืขื“ื›ื•ืŸ ืฉืขืฉื™ื ื•. ืขื“ื›ื•ืŸ ืื•ืคื˜ื™ืžื™ ืžืฆื™ืข ื—ื•ื•ื™ืช ืžืฉืชืžืฉ ื™ื•ืชืจ ื˜ื•ื‘ื” ื›ื™ ืžืฉืชืžืฉื™ื ืœื ืฆืจื™ื›ื™ื ืœื—ื›ื•ืช ืฉืฉืจืช ื™ืืฉืจ ืžืฉื”ื• ืฉืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉื‘ 90% ืžื”ืžืงืจื™ื ืžืฆืœื™ื—. ืœ RTK Query ื™ืฉ ื“ืจืš ืžื•ื‘ื ื™ืช ื•ืžืื•ื“ ื ื•ื—ื” ืœืžืžืฉ ืขื“ื›ื•ื ื™ื ืื•ืคื˜ื™ืžื™ื™ื ื‘ื–ื›ื•ืช ืฉื™ืœื•ื‘ ืฉืœ ืžืกืคืจ ืžื ื’ื ื•ื ื™ื ืฉืœ ื”ืกืคืจื™ื”: 1. ืกืคืจื™ื™ืช RTK Query ืžื—ื–ื™ืงื” ืืช ื›ืœ ื”ืชื•ืฆืื•ืช ืฉืœ ื›ืœ ื”ืฉืื™ืœืชื•ืช ื‘ื–ื™ื›ืจื•ืŸ, ื•ืžืืคืฉืจืช ืœื ื• ืœืขื“ื›ืŸ ืืช ื”ืฉืื™ืœืชื•ืช ื”ืฉืžื•ืจื•ืช. 2. ื”ืกืคืจื™ื” ืžืฉื•ืœื‘ืช ืขื Immer ื•ืžืืคืฉืจืช ืœื ื• "ืœื–ื›ื•ืจ" ืืช ื”ืžืฆื‘ ืœืคื ื™ ื”ืขื“ื›ื•ืŸ ื•ืœื‘ื˜ืœ ืื•ืชื• ื‘ืคืงื•ื“ื” ืื—ืช ืžื•ื‘ื ื™ืช. 3. ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ื›ืœ ืงื•ื“ ื” UI ืฉืžืฆื™ื’ ืชื•ืฆืื•ืช ืฉืœ ืฉืื™ืœืชื•ืช ืžื—ื•ื‘ืจ ืœืื•ืชื• ื–ื™ื›ืจื•ืŸ ืžื˜ืžื•ืŸ ื•ืžืชืขื“ื›ืŸ ื›ืฉืื ื—ื ื• ืžืขื“ื›ื ื™ื ืืช ืชื•ืฆืื•ืช ื”ืฉืื™ืœืชื•ืช, ื’ื ืื ื”ืขื“ื›ื•ืŸ ื”ื•ื ืคื™ืงื˜ื™ื‘ื™ (ื›ืœื•ืžืจ ืขื“ื›ื•ืŸ ืื•ืคื˜ื™ืžื™). ื›ื›ื” ื–ื” ื ืจืื” ื‘ืงื•ื“:
    createNote: builder.mutation({
      query: (noteText) => ({
        url: `/notes`,
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ text: noteText }),
      }),      
      async onQueryStarted(noteText, { dispatch, queryFulfilled }) {
        let newNoteId = nanoid();

        const patchResult = dispatch(
          notesApi.util.updateQueryData('getNotes', undefined, (draft) => {
            return [...draft, { text: noteText, id: newNoteId }];
          }));
        try {
          const data = await queryFulfilled
          dispatch(
            notesApi.util.updateQueryData('getNotes', undefined, (draft) => {        
              return draft.map(d => d.id === newNoteId ? data.data : d )
            }));
       } catch (err) {
        console.log(`error`);
        patchResult.undo();
       }
      }
    })
ื”ืงื•ื“ ืžื’ื“ื™ืจ ืคืขื•ืœื” ื—ื“ืฉื” ื‘ืฉื createNote, ืขื‘ื•ืจ ืืคืœื™ืงืฆื™ื” ืฉืฉื•ืžืจืช ืจืฉื™ืžื” ืฉืœ ืคืชืงื™ื. ื‘ืฉื‘ื™ืœ ื”ื”ื’ื“ืจื” ืื ื™ ืžืคืขื™ืœ ืืช builder.mutation ื•ืžืขื‘ื™ืจ ืœื• ืื•ื‘ื™ืงื˜ ืขื ืฉื ื™ ืžืคืชื—ื•ืช: 1. ื”ืžืคืชื— query ื™ื•ืฆืจ ืืช ืงื•ื“ ื‘ืงืฉืช ื” POST ืฉืื ื™ ืฉื•ืœื— ืœืฉืจืช ื›ื“ื™ ืœื™ืฆื•ืจ ืคืชืง ื—ื“ืฉ. ืœืคืชืง ื—ื“ืฉ ื™ืฉ ื‘ืกืš ื”ื›ืœ ืืช ื”ื˜ืงืกื˜ ื‘ืคืชืง. 2. ื”ืžืคืชื— onQueryStarted ืžื—ื–ื™ืง ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืื—ืจืื™ืช ืขืœ ื”ืขื“ื›ื•ื ื™ื ื”ืื•ืคื˜ื™ืžื™ื™ื. ืื•ืชื” ืคื•ื ืงืฆื™ื” ืžืงื‘ืœืช ืืช ื”ื˜ืงืกื˜ ืฉืœ ื”ืคืชืง ืฉื‘ื’ืœืœื• ื”ืชื—ืœื ื• ืืช ื”ืคืขื•ืœื”, ื•ืื•ื‘ื™ืงื˜ API ืžืžื ื• ืื ื™ ืžืฉืชืžืฉ ื‘ืžืคืชื—ื•ืช dispatch ื• queryFulfilled. ืื ื™ ื™ื•ื“ืข ืฉืœื›ืœ ืคืชืง ื™ืฉ ืžื–ื”ื”, ืื‘ืœ ืื™ืŸ ืœื™ ืขื“ื™ื™ืŸ ืืช ื”ืžื–ื”ื” ื›ื™ ื”ืฉืจืช ืขื•ื“ ืœื ื™ืฆืจ ืื•ืชื•, ืื‘ืœ ืื ื™ ืื•ืคื˜ื™ืžื™ ืื ื™ ื™ื•ื“ืข ืฉื”ืฉืจืช ืขื•ื“ ืžืขื˜ ื™ืงื‘ืœ ืืช ื”ืคืชืง ื•ื™ื™ืฆื•ืจ ืœื™ ืขื‘ื•ืจื• ืžื–ื”ื”, ืื– ื‘ื™ื ืชื™ื™ื ืื ื™ ืžื’ืจื™ืœ ืžื–ื”ื” ืžืฉืœื™ ืขื nanoid ื•ืžืฉืชืžืฉ ื‘ื• ื‘ืชื•ืจ ื” id ืฉืœ ื”ืคืชืง. ืขื›ืฉื™ื• ืื ื™ ืžืžืฉื™ืš ืœื”ื™ื•ืช ืื•ืคื˜ื™ืžื™ ื•ืžืคืขื™ืœ ืืช ื”ืงื•ื“:
const patchResult = dispatch(
  notesApi.util.updateQueryData('getNotes', undefined, (draft) => {
    return [...draft, { text: noteText, id: newNoteId }];
}));
ื”ืงื•ื“ ืขื•ืฉื” ืฉื ื™ ื“ื‘ืจื™ื: ื”ื•ื ื’ื ืžืขื“ื›ืŸ ืืช ืขืจืš ื”ื”ื—ื–ืจ ืฉืœ ื”ื ืชื™ื‘ getNotes, ืฉื–ื” ื”ื ืชื™ื‘ ืฉืžื—ื–ื™ืจ ืืช ืจืฉื™ืžืช ื›ืœ ื”ืคืชืงื™ื ืขืœ ื”ืฉืจืช. ื”ืขื“ื›ื•ืŸ ืœื•ืงื— ืืช ื”ืขืจืš ื”ื™ืฉืŸ (ืžื–ื•ื”ื” ื›ืืŸ ื‘ืฉื ื”ืžืฉืชื ื” draft) ื•ืžื•ืกื™ืฃ ืœื• ืืช ื”ืคืชืง ื”ื—ื“ืฉ ื›ืžื• ืฉืื ื™ ื—ื•ืฉื‘ ืฉื”ื•ืœืš ืœื”ื’ื™ืข ืžื”ืฉืจืช. ื–ื” ืžืกืคื™ืง ื‘ืฉื‘ื™ืœ ืœืขื“ื›ืŸ ืืช ื›ืœ ืžืžืฉืง ื”ืžืฉืชืžืฉ ื‘ืจืฉื™ืžื” ื”ื—ื“ืฉื”. ื”ื“ื‘ืจ ื”ืฉื ื™ ืฉื”ืงื•ื“ ืขื•ืฉื” ื”ื•ื ืœื”ื—ื–ื™ืจ ืื•ื‘ื™ืงื˜ ื˜ืœืื™. ืื•ื‘ื™ืงื˜ ื”ื˜ืœืื™ ืฉืžื•ื—ื–ืจ ืž dispatch ืžื›ื™ืœ ืืช ืจืฉื™ืžืช ื›ืœ ื”ืฉื™ื ื•ื™ื™ื ื‘ื™ืŸ ื”ืชื•ืฆืื” ืฉื”ื™ืชื” ืฉืžื•ืจื” ื‘ืžื˜ืžื•ืŸ ืœื‘ื™ืŸ ื”ืชื•ืฆืื” ื”ื—ื“ืฉื” ืฉืื ื™ ืฉืžืจืชื™ ื‘ืžื˜ืžื•ืŸ, ื•ืžืืคืฉืจ ืœื—ื–ื•ืจ ืื—ื•ืจื” ืœืชื•ืฆืื” ื”ืงื•ื“ืžืช ืขื ืคื•ื ืงืฆื™ื™ืช undo ืฉืœื•. ื‘ื ืงื•ื“ื” ื”ื–ืืช ืžื‘ื—ื™ื ืช ื”ืžืฉืชืžืฉ ื›ืœ ื”ืžืžืฉืง ืžืจืื” ืืช ื”ืžืฆื‘ ื›ืื™ืœื• ื”ืคืชืง ื ื•ืฆืจ ื•ื ืฉืžืจ ื›ื‘ืจ ื‘ืฉืจืช. ื”ืžืฉืชืžืฉ ืžืžืฉื™ืš ืœืขื‘ื•ื“ ืขื ื”ืžืขืจื›ืช ืจื’ื™ืœ ืœื’ืžืจื™. ืื‘ืœ ืžืื—ื•ืจื™ ื”ืงืœืขื™ื ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉืฉืœื—ื ื• ืขื“ื›ื•ืŸ ืœืฉืจืช ื•ืฉืื ื—ื ื• ืืžื•ืจื™ื ืœืงื‘ืœ ืžืžื ื• ืชืฉื•ื‘ื”, ื•ืœื›ืŸ ืžื—ื›ื™ื ืฉืชืฉื•ื‘ืช ื”ืฉืจืช ืชื’ื™ืข:
const data = await queryFulfilled
ื”ืฉืจืช ืขื•ื ื” ืœื™ ืขื ื”ืคืจื˜ื™ื ืฉืœ ื”ืคืชืง ื”ื—ื“ืฉ ืฉื ื•ืฆืจ, ื•ื‘ื ืงื•ื“ื” ื”ื–ืืช ืื ื™ ืฉื•ื‘ ืฆืจื™ืš ืœืขื“ื›ืŸ ืืช ืจืฉื™ืžืช ื”ืคืชืงื™ื ื”ืฉืžื•ืจื” ืฉืœื™: ืื•ืœื™ ื”ืฉืจืช ื”ื—ืœื™ืฃ ื—ืœืง ืžื”ืžื™ืœื™ื ื‘ืคืชืง, ืื•ืœื™ (ื‘ื˜ื•ื—) ื”ืฉืจืช ื ืชืŸ ืœืคืชืง ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ ืžืฉืœื•, ืื•ืœื™ ื”ื•ื ื”ื•ืกื™ืฃ ืฉื“ื•ืช - ื‘ื›ืœ ืžืงืจื” ืื ื™ ืจื•ืฆื” ืœื”ื—ืœื™ืฃ ืืช ื”ืคืชืง ืฉืื ื™ ื—ืฉื‘ืชื™ ืฉื”ืฉืจืช ื™ื™ืฆื•ืจ ื‘ืคืชืง ื”ืืžื™ืชื™ ืฉื”ืฉืจืช ื™ืฆืจ, ื•ื–ื• ืžื˜ืจืช ืคืงื•ื“ืช ื”ืขื“ื›ื•ืŸ ื‘ืฉื•ืจื” ื”ื‘ืื”:
dispatch(
  notesApi.util.updateQueryData('getNotes', undefined, (draft) => {

ToCode
1 419
# ื˜ื™ืค ืจื™ื“ืืงืก - ื”ืฉืชืžืฉื• ื‘ preloadedState ื›ื“ื™ ืœื‘ื“ื•ืง ื™ื•ืชืจ ื‘ืงืœื•ืช ื‘ื“ื•ื’ืžืช ื”ื”ืชื—ืœื” ืžื”ื™ืจื” ืฉืœ Redux Tolkit ื”ื ื™ื•ืฆืจื™ื ื•ื™ืžื™ื™ืฆืื™ื ืืช ืžื—ืกืŸ ื”ืžื™ื“ืข ื‘ืื•ืชื” ืฉื•ืจื” ื‘ืื•ืคืŸ ื”ื‘ื:
import { configureStore } from '@reduxjs/toolkit'
import counterReducer from '../features/counter/counterSlice'

export const store = configureStore({
  reducer: {
    counter: counterReducer,
  },
})
ืฉื™ื ื•ื™ ืงื˜ืŸ ื•ื”ืงื•ื“ ื”ื–ื” ื”ื•ืคืš ืœื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœื‘ื“ื™ืงื”. ื‘ืžืงื•ื ืœื™ืฆื•ืจ ื•ืœื™ื™ืฆื ืืช ื” store ืื ื™ ื›ื•ืชื‘ ืคื•ื ืงืฆื™ื” ืฉื™ื•ืฆืจืช store ื—ื“ืฉ, ื•ื’ื ื™ื•ื“ืขืช ืœืงื‘ืœ preloadedState:
export function createStore(initialState) {
  return configureStore(Object.assign({}, {
    reducer: {
      counter: counterReducer,
    },
  },
  initialState ? { preloadedState: initialState } : {}));
}
ื•ื›ื›ื” ืื ื™ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื” store ื‘ื›ืœ state ืจืืฉื•ื ื™ ืฉืืจืฆื”:
test('inc from 10 to 11', () => {
  const store = createStore({ counter: { value: 10 }});
  store.dispatch(increment());
  expect(store.getState().counter).toEqual({ value: 11 });
});
ื™ื•ืชืจ ืžื–ื”, ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ createStore ื›ืžื” ืคืขืžื™ื, ืœืžืฉืœ ื‘ื”ืคืขืœื” ืื—ืช ืœื ืœื”ืขื‘ื™ืจ ืคืจืžื˜ืจื™ื ื•ื›ื›ื” ืœืงื‘ืœ ืืช ื” State ื”ืจืืฉื•ื ื™ ื”ืžืœื, ืœื”ื•ืฆื™ื ืื•ืชื• ืžื” store, ืœืฉื ื•ืช ืจืง ืืช ื”ืขืจื›ื™ื ืฉืฆืจื™ื›ื™ื ืœื‘ื“ื™ืงื” ื•ืื– ืœื”ืคืขื™ืœ createStore ืฉื•ื‘ ืขื ื”ืกื˜ื™ื™ื˜ ืฉื™ืฆืจืชื.