uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

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

Ko'proq ko'rsatish
1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
-530 kunlar
Postlar arxiv
ToCode
1 419
ื”ื™ื•ื ืœืžื“ืชื™: nth-child ื•ืงืœืืก ื‘ CSS ื ื ื™ื— ืฉื™ืฆืจืชื ื˜ื‘ืœื” ืขื CSS Grid ื•ืขื›ืฉื™ื• ืืชื ืจื•ืฆื™ื ืœืฆื‘ื•ืข ืจืง ืฉื•ืจื” ืžืกื•ื™ืžืช - ืื• ื™ื•ืชืจ ื˜ื•ื‘, ืœื”ื“ื’ื™ืฉ ืืช ื”ื’ื‘ื•ืœ ืžืกื‘ื™ื‘ ืœืฉื•ืจื” ืžืกื•ื™ืžืช. ื‘ืขื•ืœื ื”ื™ืฉืŸ ืฉืœ table ื”ื™ื” ืžืกืคื™ืง ืœืžืฆื•ื ืืช ื” tr ืฉืžืชืื™ื ืœืฉื•ืจื” ื•ืœื”ื’ื“ื™ืจ ืœื• ื’ื‘ื•ืœ, ืื‘ืœ ื‘ื’ืจื™ื“ ื”ื˜ื‘ืœื” ืœื ื›ื•ืœืœืช ืืœืžื ื˜ tr. ื›ืœ ื” HTML ืฉืœื” ื”ื•ื ื‘ืกืš ื”ื›ืœ:
<div class='container'>
  <div>0</div>
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>
ืื– ื”ืฆืขื“ ื”ืจืืฉื•ืŸ ื”ื•ื ืœื–ื”ื•ืช ืืช ื” div-ื™ื ืฉืžืชืื™ืžื™ื ื‘ื›ืœืœ ืœืฉื•ืจื” ืฉืžืขื ื™ื™ื ืช ืื•ืชื ื•. ื‘ืฉื‘ื™ืœ ื”ืžืฉื—ืง ื ืกืžืŸ ืื•ืชื ื‘ืงืœืืก ื ืคืจื“:
<div class='container'>
  <div>0</div>
  <div>1</div>
  <div>2</div>
  <div class='selected-row'>3</div>
  <div class='selected-row'>4</div>
  <div class='selected-row'>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>
ืขื›ืฉื™ื• ืžื” ืœื’ื‘ื™ ื”ื”ื“ื’ืฉื” ืฉืœ ื”ืฉื•ืจื”? ื˜ื•ื‘ ืืคืฉืจ ืœื”ื’ื“ื™ืจ ื’ื‘ื•ืœ ืœื›ืœ ื”ืชืื™ื, ืื‘ืœ ืื– ื ืงื‘ืœ ื’ื ืืช ื”ื’ื‘ื•ืœ ื‘ื™ืŸ ื”ืชืื™ื ื•ื–ื” ืœื ืžื” ืฉืจืฆื™ื ื•. ืื ื™ ืจื•ืฆื” ืจืง ื’ื‘ื•ืœ ืžืกื‘ื™ื‘ ืœืฉื•ืจื”. ื˜ื•ื‘ ื˜ื•ื‘, ืื– ืืคืฉืจ ืœื”ื’ื“ื™ืจ ื’ื‘ื•ืœ ืขืœื™ื•ืŸ ื•ืชื—ืชื•ืŸ ืœื›ืœ ืชื ื‘ืฉื•ืจื”, ื•ื’ื‘ื•ืœ ืฉืžืืœื™ ื•ื™ืžื ื™ ืจืง ืœืชืื™ื ืฉื‘ืงืฆื”. ื”ื’ื‘ื•ืœ ืœืžืขืœื” ื•ืœืžื˜ื” ื”ื•ื ืงืœ:
.container .selected-row{
  border-top-color: red;
  border-bottom-color: red;
}
ื•ืฉื ื™ ื”ืชืื™ื ื‘ืงืฆื”? ืืคืฉืจ ื”ื™ื” ืœื“ืžื™ื™ืŸ ืœื”ืฉืชืžืฉ ืคื” ื‘ nth-child(1):
.container .selected-row:nth-child(1) {
  border-left-color: red;
}
ืื‘ืœ ื–ื” ืœื ืขื•ื‘ื“. ื” div ื”ืจืืฉื•ืŸ ืขื ื”ืงืœืืก selected-row ื”ื•ื ืœื ื”ื™ืœื“ ื”ืจืืฉื•ืŸ ื•ืœื›ืŸ ื›ืœื•ื ืœื ื ืฆื‘ืข. ืžื” ืขื•ืฉื™ื? ืžืกืชื‘ืจ ืฉื™ืฉ ืœ nth-child ื˜ืจื™ืง ื›ื“ื™ ืœืชืคื•ืก ืืช ื”ื™ืœื“ ื” n-ื™ ืฉืžืชืื™ื ืœืงืœืืก ืžืกื•ื™ื ื•ื–ื” ื ืจืื” ื›ื›ื”:
.container :nth-child(1 of .selected-row) {
  border-left-color: red;
}

.container :nth-child(3 of .selected-row) {
  border-right-color: red;
}
ื”ื“ื•ื’ืžื” ื›ืืŸ ืœืžื™ ืฉืจื•ืฆื” ืœืฉื—ืง ืขื ื–ื”: https://codepen.io/ynonp/pen/zYXQqmO

ToCode
1 419
ื›ืœ ืฉืืจ ื”ืงื•ื‘ืฅ ื ืฉืืจ ืœืœื ืฉื™ื ื•ื™. ื”ืฉื™ื ื•ื™ ื”ืฉื ื™ ื”ื•ื ื‘ืงื•ืžืคื•ื ื ื˜ืช ื”ืฆื™ื™ืจ, ื•ื‘ืขืฆื ื‘ื›ืœ ืงื•ืžืคื•ื ื ื˜ื” ืฉืฆืจื™ื›ื” ืœื”ืงืฉื™ื‘ ืœืกื™ื’ื ืœื™ื - ืขืœื™ื™ ืœื”ื•ืกื™ืฃ ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื” useSignals ืฉืœ signals-react. ื”ืงื•ืžืคื•ื ื ื˜ื” Painter ื‘ื’ื™ืจืกืช ืจื™ืืงื˜ ื ืจืื™ืช ืœื›ืŸ ื›ืš:
import { color, setColor, picture } from './state.js'
import { useSignals } from "@preact/signals-react/runtime";

export default function Painter() {  
  useSignals();
  const size = picture.value.size;
  console.count('render');
  return (
    <div style={{display: 'grid',
    gridTemplateColumns: \repeat(${size}, minmax(0, 1rem))\}}>
    {
    new Array(size).fill(0).map((_, i) => (
      new Array(size).fill(0).map((_, j) => (
        <div
          key={i * 8 + j}
          style={{background: color(i, j), height: '1rem', width: 'auto', border: '1px solid grey'}}
          onClick={() => setColor(i, j, 1)}
        ></div>
      ))
    ))
    }
    </div>
  )
}
ื‘ื’ื™ืจืกืช ืจื™ืืงื˜ ื™ืฉ ื›ืžื” ืžื’ื‘ืœื•ืช ื”ืžืจื›ื–ื™ืช ืฉื‘ื”ืŸ ื”ื™ื ืฉืื™ ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ืกื™ื’ื ืœ ื‘ืชื•ืจ ืขืจืš ื‘ืชื•ืš ื” JSX, ืžื” ืฉืื•ืžืจ ืฉืื ื™ืฉ ืฉื™ื ื•ื™ ื‘ืกื™ื’ื ืœ ืชืžื™ื“ ืฆืจื™ืš ืœืจื ื“ืจ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืงื•ืžืคื•ื ื ื˜ื”. ืงื•ื“ ื•ื–ื” ืžื” ืขื•ื“? ืื™ืŸ ืขื•ื“. ื›ืฉืœื•ื—ืฆื™ื ืขืœ ืคื™ืงืกืœ ื”ืกื™ื’ื ืœ ืžืชืขื“ื›ืŸ, ื”ืงื•ืžืคื•ื ื ื˜ื” ืžืจื•ื ื“ืจืช ืžื—ื“ืฉ ื•ื”ืฆื‘ืข ืขืœ ื”ืžืกืš ืžืชืขื“ื›ืŸ. ื”ืขืœื™ืชื™ ืืช ื”ื“ื•ื’ืžื” ื‘ื’ื™ืจืกืช preact ืœ Deno Deploy ืื– ืืชื ื™ื›ื•ืœื™ื ืœืฉื—ืง ืื™ืชื” ื›ืืŸ: https://painter.deno.dev ื•ื‘ื’ื™ืจืกืช ืจื™ืืงื˜ ืœืคืœื™ื™ืงื•ื“ ื›ืืŸ: https://playcode.io/1853176 ื•ื”ืงื•ื“ ื‘ื’ื™ื˜ื”ืื‘: https://github.com/ynonp/deno-painter-demo

ToCode
1 419
ื˜ื™ืค ืจื™ืืงื˜ - ืฉืžื™ืจืช ืกื˜ื™ื™ื˜ ื’ืœื•ื‘ืืœื™ ื‘ืกื™ื’ื ืœื™ื ืกื™ื’ื ืœื™ื ื”ื ื”ื™ื•ื ื”ืžื ื’ื ื•ืŸ ื”ื›ื™ ืคืฉื•ื˜ ืœื ื™ื”ื•ืœ ืกื˜ื™ื™ื˜ ื‘ืจื™ืืงื˜. ื”ื ื”ื’ื™ืขื• ืž preact ื•ืื•ืžื ื ืœื ืขื•ื‘ื“ื™ื ื™ืฉืจ ืžื”ืงื•ืคืกื” ื‘ื™ื™ืฉื•ื ืจื™ืืงื˜ ืื‘ืœ ืขื ื”ื—ื‘ื™ืœื” ื”ืžืชืื™ืžื” ืžืžืฉ ืคืฉื•ื˜ ืœืฉืœื‘ ืื•ืชื. ืžื” ื–ื” ืกื™ื’ื ืœ ืกื™ื’ื ืœ ื”ื•ื ืžื™ื“ืข ืฉื™ื•ื“ืข ืœื“ื•ื•ื— ืœืงื•ื“ ืฉืžืกืชื›ืœ ืขืœื™ื• ื›ืฉื”ื•ื ื”ืฉืชื ื”. ื–ื” ืื•ื‘ื™ืงื˜ ืฉื™ืฉ ืœื• ืžืืคื™ื™ืŸ value ืฉืžื—ื–ื™ืง ืืช ื”ืขืจืš. ื‘ืฉื‘ื™ืœ ืœืฉืคืจ ื‘ื™ืฆื•ืขื™ื ืืคืฉืจ ืœืฉื™ื ืกื™ื’ื ืœ ื‘ืชื•ืจ ืขืจืš ื‘ JSX ื•ืื– ืœื ืฆืจื™ืš ืœื™ื™ืฆืจ ืืช ื›ืœ ื” Virtual DOM ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื” ื•ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ preact ืžืขื“ื›ืŸ ืจืง ืืช ื”ืขืจืš ืฉืœ ื”ืกื™ื’ื ืœ, ืื• ืœืงื—ืช ืืช ื”ืขืจืš ืฉืœื• ื•ืื– ื”ืงื•ืžืคื•ื ื ื˜ื” ืชืจื•ื ื“ืจ ืžื—ื“ืฉ ื›ืฉื”ืขืจืš ืžืฉืชื ื”. ื–ืืช ื”ื“ื•ื’ืžื” ืžืชื•ืš ื”ืชื™ืขื•ื“ ืฉืœื”ื:
import { signal } from "@preact/signals";

// Create a signal that can be subscribed to:
const count = signal(0);

function Counter() {
  // Accessing .value in a component automatically re-renders when it changes:
  const value = count.value;

  const increment = () => {
    // A signal is updated by assigning to the \.value\ property:
    count.value++;
  }

  return (
    <div>
      <p>Count: {value}</p>
      <button onClick={increment}>click me</button>
    </div>
  );
}
ืืคืฉืจ ืœืจืื•ืช ืฉื”ืกื™ื’ื ืœ ืžื•ื’ื“ืจ ืžื—ื•ืฅ ืœืงื•ืžืคื•ื ื ื˜ื”, ื”ืงื•ืžืคื•ื ื ื˜ื” ืžืขื“ื›ื ืช ืื•ืชื• ื•ืžืฆื™ื’ื” ืื•ืชื•. ืขืœ ื”ืžืกืš ืื ื—ื ื• ื ืจืื” ืืช ื”ืขืจืš ื‘ืžื•ื ื” ื”ืœื—ื™ืฆื•ืช ื’ื“ืœ ื›ืœ ืคืขื ืฉืœื•ื—ืฆื™ื ืขืœ ื”ื›ืคืชื•ืจ, ื•ืื ื™ื”ื™ื• ื›ืžื” Counter-ื™ื ื‘ืื•ืชื• ืขืžื•ื“ ื›ื•ืœื ื™ื”ื™ื• ืžืกื•ื ื›ืจื ื™ื ื›ื™ ื”ื ืžืฉืชืžืฉื™ื ื‘ืื•ืชื• ืกื™ื’ื ืœ. ื›ืŸ ื–ื” ืขื“ ื›ื“ื™ ื›ืš ืคืฉื•ื˜ ื•ื›ื›ื” ื–ื” ืฆืจื™ืš ืœืขื‘ื•ื“, ื›ืžื• ืœืฉืžื•ืจ State ืžื—ื•ืฅ ืœืงื•ืžืคื•ื ื ื˜ื”. ื‘ื•ืื• ื ืžืฉื™ืš ืœื“ื•ื’ืžื” ื™ื•ืชืจ ืžื•ืจื›ื‘ืช ืฉืœ ืฆื™ื™ืจ, ืจืง ืฉื‘ืžืงื•ื ืœืฉืžื•ืจ ืืช ื”ืชืžื•ื ื” ื‘ืกื˜ื™ื™ื˜ ืฉืœ ืงื•ืžืคื•ื ื ื˜ื” ืื—ืช ื ืฉืžื•ืจ ืื•ืชื” ื‘ืกื™ื’ื ืœ. ื”ืกื™ื’ื ืœ ื•ื”ืคื•ื ืงืฆื™ื•ืช ืžืื•ื“ ื ื•ื— ืœืฉื™ื ืกื™ื’ื ืœ ื•ื›ืžื” ืคื•ื ืงืฆื™ื•ืช ืฉืžื˜ืคืœื•ืช ื‘ื• ื‘ืงื•ื‘ืฅ ืื—ื“ ื•ืœื—ืฉื•ื‘ ืขืœ ื–ื” ื›ืžื• Store ืฉืœ Flux. ื‘ื“ื•ื’ืžืช ื”ืฆื™ื™ืจ ืฉืœื™ ื–ื” ื™ื”ื™ื”:
// file: state.tsx

import { signal } from "@preact/signals";

const palette = [
  '#ffffff', // White
  '#000000', // Black
  '#9bbc0f', // Lime Green
  '#8bac0f', // Olive Green
  '#306230', // Dark Green
  '#0f380f', // Darker Green
  '#34a853', // Green
  '#31a354', // Slightly Darker Green
];

const initialState = () => ({
  size: 8,
  data: new Array(8).fill(0).map((_, i) =>
    new Array(8).fill(0).map((_, j) => (
      signal(0)
    )))
})

export const picture = signal(initialState())

export function color(row: number, column: number) {
  const n = picture.value.data[row][column].value
  return palette[n % palette.length]
}

export function setColor(row: number, column: number, color: number) {
  picture.value.data[row][column].value = color;
}

export function clear() {
  picture.value = initialState()
}
ื”ืงื•ื‘ืฅ ืžื™ื™ืฆื ืืช ื”ืกื™ื’ื ืœ ืฉืœ ื”ืชืžื•ื ื” ืฉืžื›ื™ืœ ืžืขืจืš ื›ืคื•ืœ ืฉืœ ืกื™ื’ื ืœื™ื ืœื›ืœ ื”ืคื™ืงืกืœื™ื. ื›ืฉืคื™ืงืกืœ ื™ืฉื ื” ืฆื‘ืข ืจืง ื”ืกื™ื’ื ืœ ืฉืžืชืื™ื ืœื• "ื™ื™ื“ืœืง" ื•ื™ืขื“ื›ืŸ ืืช ื”ืืœืžื ื˜ื™ื ืฉืžืงืฉื™ื‘ื™ื ืœื•. ืงื•ืžืคื•ื ื ื˜ืช ืฆื™ื™ืจ ืงื•ืžืคื•ื ื ื˜ืช ื”ืฆื™ื™ืจ ืคืฉื•ื˜ ืžืฆื™ื’ื” ืืช ื”ืชืžื•ื ื” ื•ืžื—ื‘ืจืช ื›ืœ ืคื™ืงืกืœ ืœืคื•ื ืงืฆื™ื™ืช setColor ืฉื”ื’ื“ืจืชื™ ื‘ืกื˜ื™ื™ื˜:
import { color, setColor, picture } from './state.tsx'

export default function Painter() {  
  const size = picture.value.size;

  return (
    <div className="grid" style={{gridTemplateColumns: \repeat(${size}, minmax(0, 1rem))\}}>
    {
    new Array(size).fill(0).map((_, i) => (
      new Array(size).fill(0).map((_, j) => (
        <div
          className="h-4 w-auto border"
          style={{background: color(i, j)}}
          onClick={() => setColor(i, j, 1)}
        ></div>
      ))
    ))
    }
    </div>
  )
}
ืงื•ืžืคื•ื ื ื˜ืช ื›ืคืชื•ืจ ืžื—ื™ืงื” ืงื•ืžืคื•ื ื ื˜ืช ื›ืคืชื•ืจ ื”ืžื—ื™ืงื” ืžืฆื™ื’ื” ื›ืคืชื•ืจ ื‘ื•ื“ื“ ืขื‘ื•ืจ ืžื—ื™ืงื” ืฉืžื—ื•ื‘ืจ ืœืคื•ื ืงืฆื™ื” clear ืฉื”ื’ื“ืจืชื™ ื‘ืกื˜ื™ื™ื˜:
import { clear } from './state.tsx';

export default function ControlPanel() {
  return (
    <div>
      <button onClick={clear}>Clear</button>
    </div>
  )
}
ืจื™ืืงื˜ ื‘ืฉื‘ื™ืœ ืœื”ืคืขื™ืœ ืืช ื”ืกื™ื’ื ืœื™ื ื”ืืœื” ื‘ืจื™ืืงื˜ ืฆืจื™ืš ืจืง ืืช ื”ื—ื‘ื™ืœื” ื”ืžืชืื™ืžื” ื•ืœืงืจื•ื ืœืขื•ื“ ืคื•ื ืงืฆื™ื”. ื‘ืจืžืช ื”ื—ื‘ื™ืœื•ืช ื™ืฉ ืœื”ืชืงื™ืŸ ืืช signals-react ื•ืœื”ืฉืชืžืฉ ื‘ื” ื‘ื™ื™ื‘ื•ื. ืœื“ื•ื’ืžื” ื‘ืงื•ื‘ืฅ state ืื ื™ ืืฉืชืžืฉ ื‘ืฉื•ืจืช ื”ื™ื™ื‘ื•ื ื”ื‘ืื”:
import { signal } from "@preact/signals-react";

ToCode
1 419
ืžื” ื‘ืขืฆื ืื ื—ื ื• ืคื•ื—ื“ื™ื ืœืื‘ื“? ื—ืœืง ืžื”ืคื—ื“ ืœืขื–ื•ื‘ ืขื‘ื•ื“ื” ื”ื•ื ื”ืชื”ื™ื™ื” "ื”ืื ืืฆืœื™ื— ืœืžืฆื•ื ืขื‘ื•ื“ื” ื˜ื•ื‘ื” ื›ืœ ื›ืš ืคืขื ื ื•ืกืคืช?". ื•ืคื—ื“ ื›ื–ื” ืชื•ืงืฃ ื’ื ืื ืฉื™ื ืฉื‘ื›ืœืœ ืœื ืื•ื”ื‘ื™ื ืืช ื”ืขื‘ื•ื“ื” ืฉืœื”ื. ืื ื—ื ื• ื ืงื˜ืจ ื›ืœ ื”ื™ื•ื ืื‘ืœ ื‘ืจื’ืข ืฉืžื™ืฉื”ื• ืžืฆื™ืข ืœืขื–ื•ื‘ ืคืชืื•ื ื ื™ื‘ื”ืœ ื•ื ื™ื–ื›ืจ ืฉื‘ืขืฆื ื™ืฉ ื’ื ื”ืจื‘ื” ื“ื‘ืจื™ื ื˜ื•ื‘ื™ื ืื™ืคื” ืฉืื ื—ื ื• ื ืžืฆืื™ื. ืฉื—ื‘ืœ ืœื”ืคืกื™ื“ ืืช ืžื” ืฉื›ื‘ืจ ื”ืฉื’ื ื•. ืื•ืœื™ ื‘ื’ืœืœ ื–ื” ืื ื—ื ื• ืžืขื“ื™ืคื™ื ืœืžืฆื•ื ืขื‘ื•ื“ื” ื—ื“ืฉื” ืœืคื ื™ ืฉืขื•ื–ื‘ื™ื ืืช ื”ืงื•ื“ืžืช. ืงื•ื“ื ื›ืœ ื ื˜ืคืœ ื‘ืคื—ื“, ืื—ืจื™ ื–ื” ืืคืฉืจ ืœืขื‘ื•ื“. ืื ื–ื” ืืคืฉืจื™ ืื ื™ ื‘ืขื“, ืื‘ืœ ืžื” ืขื•ืฉื™ื ื›ืฉื—ื™ืคื•ืฉ ืขื‘ื•ื“ื” ื˜ื•ื‘ื” ื™ื•ืชืจ ื“ื•ืจืฉ ื”ืฉืงืขื” ืฉืื™ืŸ ืœื ื• ืืช ื”ืžืฉืื‘ื™ื ืขื‘ื•ืจื” ื›ื™ ืื ื—ื ื• ื™ื•ืชืจ ืžื“ื™ ืขืกื•ืงื™ื ื‘ืขื‘ื•ื“ื” ืงื™ื™ืžืช? ื“ืจืš ืื—ืจืช ืœื”ืกืชื›ืœ ืขืœ ื”ื‘ืขื™ื” ื”ื™ื ืœืฉื ื•ืช ืืช ื”ืฉืืœื” - ื‘ืžืงื•ื ืœืฉืื•ืœ ืื™ืš ืื ื™ ืจื•ืฆื” ืœืฉืคืจ ืืช ื”ืžืฆื‘ ืื ื™ ืืฉืืœ "ืžื” ื‘ืขืฆื ืื ื™ ืคื•ื—ื“ ืœืื‘ื“ ืคื”?", ืžื” ื” Best Case ืฉื™ืงืจื” ืื ืืฉืืจ? ื›ืฉืงืฉื” ืืคื™ืœื• ืœื“ืžื™ื™ืŸ ืขืชื™ื“ ื‘ืžืกืœื•ืœ ื”ื ื•ื›ื—ื™ ื–ื” ืกื™ืžืŸ ื˜ื•ื‘ ืฉืฆืจื™ืš ืœื”ื™ืคืจื“.

ToCode
1 419
ืžื˜ืœื•ืช ื•ื”ื–ื“ืžื ื•ื™ื•ืช ื”ื ื” ืจืฉื™ืžืช ื”ื“ื‘ืจื™ื ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื‘ืฉื‘ื™ืœ ืœื”ืฆืœื™ื—. ืžื•ืœ- ื”ื ื” ืจืฉื™ืžื” ืฉืœ ื“ื‘ืจื™ื ืฉืชื•ื›ืœื™ ืœืขืฉื•ืช. ืื ื—ื ื• ืœื ื™ื•ื“ืขื™ื ืžื” ื”ืืคืฉืจื•ืช ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ื•ืžื” ื™ืงืจื” ืื ืชื‘ื—ืจื™ ื›ืœ ืืคืฉืจื•ืช. ื”ืจื‘ื” ืฉื ื™ื ื”ืžืฉืคื˜ ื”ืจืืฉื•ืŸ ื”ื™ื” ื”ื“ืจืš ืœื’ืจื•ื ืœืชืœืžื™ื“ื™ื ืœื”ืฉืงื™ืข ื‘ื‘ื™ืช ืกืคืจ. ืขื“ ืฉื™ื•ื ืื—ื“ ื’ื™ืœื™ื ื• ืฉื–ื” ื‘ืขืฆื ืœื ื ื›ื•ืŸ ืื• ืฉื”ื”ืฆืœื—ื” ื”ืคื›ื” ืคื—ื•ืช ืžืขื ื™ื™ื ืช. ื”ื™ื•ื ืจื‘ื™ื ืžืื™ืชื ื• ืขื“ื™ื™ืŸ ืžื—ืคืฉื™ื ื”ื‘ื˜ื—ื•ืช ื‘ืกื’ื ื•ืŸ ืฉืœ ื”ืžืฉืคื˜ ื”ืจืืฉื•ืŸ, ื•ืžืชืื›ื–ื‘ื™ื ื›ืœ ืคืขื ืžื—ื“ืฉ ืื—ืจื™ ืฉืกื™ื™ืžื ื• ืืช ื›ืœ ื”ืจืฉื™ืžื” ื•ืขื“ื™ื™ืŸ ืœื ื”ืฆืœื—ื ื•. ื”ืฉื™ื ื•ื™ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืขืฉื•ืช, ื›ืชืœืžื™ื“ื™ื ื•ื›ืžื•ืจื™ื, ื”ื•ื ื”ืžืขื‘ืจ ืœืžืฉืคื˜ ื”ืฉื ื™. ืขืœื™ื ื• ืœื—ืคืฉ ื”ื–ื“ืžื ื•ื™ื•ืช ื•ืœืขื•ื“ื“ ืื—ืจื™ื ืœื ืฆืœ ืื•ืชื, ืœื ื‘ื’ืœืœ ืฉื–ื• ื”ื“ืจืš ืœื”ืฆืœื—ื” (ืื ื—ื ื• ื›ื‘ืจ ืœื ื™ื•ื“ืขื™ื ืžื” ื”ื“ืจืš ืœื”ืฆืœื—ื”), ืืœื ื›ื™ ื–ืืช ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืงื“ื™ืžื”.

ToCode
1 419
ืื ืขืจืš ื—ื•ื–ืจ ื•ืืฃ ืื—ื“ ืœื ืžืกืชื›ืœ ืขืœื™ื•, ื”ื•ื ืขื“ื™ื™ืŸ ืžืฉืžื™ืข ืจืขืฉ? ืชืžื™ื“ ื›ืขืกืชื™ ืขืœ ืคื™ื™ืชื•ืŸ ื• JavaScript ื‘ื’ืœืœ ืฉื”ืŸ ื“ืจืฉื• ืžืžื ื™ ืœื›ืชื•ื‘ return ื‘ืฆื•ืจื” ืžืคื•ืจืฉืช. ื”ืงื•ื“ ื”ื–ื” ื‘ืคื™ื™ืชื•ืŸ ื™ื—ื–ื™ืจ None ืœืžืจื•ืช ืฉื‘ืจื•ืจ ืฉื–ื” ืœื ืžื” ืฉืจืฆื™ืชื™:
def twice(x): x * 2
ื‘ืจื•ื‘ื™ ื–ื” ืœื ื”ื™ื” ืงื•ืจื”. ื”ืคื•ื ืงืฆื™ื” ื”ื–ืืช ื‘ืจื•ื‘ื™ ืžื—ื–ื™ืจื” ื‘ื“ื™ื•ืง ืืช ืžื” ืฉืจืฆื™ืชื™ - ื›ืœื•ืžืจ ืืช ื”ืžืกืคืจ ืฉืงื™ื‘ืœื” ื›ืคื•ืœ 2:
def twice(x) = x * 2
ืื‘ืœ ืื– ืžื’ื™ืขื” ื”ื“ื•ื’ืžื” ื”ื‘ืื” ืฉืฉื•ื‘ ืžื–ื›ื™ืจื” ืฉืงื™ืฆื•ืจื™ ื“ืจืš ื‘ืชื›ื ื•ืช ื–ื” ื ื—ืžื“ ืื‘ืœ ืชืžื™ื“ ืขื“ื™ืฃ ืœื”ื‘ื™ืŸ ื‘ื“ื™ื•ืง ืžื” ืงื•ืจื” ืžืชื—ืช:
def fib_rb(n)
  a = 0
  b = 1
  n.times { a, b = b, a + b }
  a
end
ื‘ื“ื•ื’ืžื” ื”ื–ืืช ื”ื‘ืœื•ืง (ื”ืงื•ื“ ืฉืจืฅ n ืคืขืžื™ื ืžื•ืงืฃ ื‘ืกื•ื’ืจื™ื™ื ืžืกื•ืœืกืœื™ื) ื‘ืขืฆื ืขื•ืฉื” ืืช ื–ื”:
def fib_rb(n)
  a = 0
  b = 1
  n.times {
    a, b = b, a + b
    return [b, a + b]
  }
  a
end
ื•ืœืžื” ื–ื” ื—ืฉื•ื‘? ื›ื™ ื›ืฉืžื—ื–ื™ืจื™ื ืžืขืจืš ืื– ืฆืจื™ืš ืœื”ืงืฆื•ืช ืื•ืชื• ื•ืคืขื•ืœืช ื”ื”ืงืฆืื” ืขืฆืžื” ืœื•ืงื—ืช ื–ืžืŸ ื•ืžืงื•ื ื‘ื–ื™ื›ืจื•ืŸ. ื‘ื“ื•ื’ืžื” ื‘ืงื™ืฉื•ืจ ื’'ื•ืŸ ื”ื•ืจื˜ื•ืŸ ืžืฉืคืจ ืžืฉืžืขื•ืชื™ืช ืืช ื–ืžืŸ ื”ืจื™ืฆื” ืฉืœ ื”ืงื•ื“ ื‘ืืžืฆืขื•ืช ื”ืฉื™ื ื•ื™ ื”ื–ื”:
def fib_rb(n)
  a = 0
  b = 1
  n.times { a, b = b, a + b; nil }
  a
end
ืขื›ืฉื™ื• ืจื•ื‘ื™ ืœื ืฆืจื™ืš ืœื”ืงืฆื•ืช ืžืขืจืš ืจืง ื‘ืฉื‘ื™ืœ ืœื”ื—ื–ื™ืจ ืฉื ื™ ืขืจื›ื™ื ื•ื‘ืžืงื•ื ื–ื” ืžื—ื–ื™ืจ nil, ืžื” ืฉื‘ื›ืœืœ ืœื ืžืฉื ื” ื›ืœื•ื ื‘ืชื•ื›ื ื™ืช ื›ื™ ืžืžื™ืœื ืืฃ ืื—ื“ ืœื ืžืกืชื›ืœ ืขืœ ืขืจืš ื”ื”ื—ื–ืจ.

ToCode
1 419
ื˜ื™ืค ืจื™ืืงื˜: ืื™ืš ืœืชืคื•ืก ืœื—ื™ืฆื” ืžื—ื•ืฅ ืœืงื•ืžืคื•ื ื ื˜ื” ื—ื‘ืจ ืฉื•ืืœ - ื™ืฉ ืœื™ ืงื•ืžืคื•ื ื ื˜ื” ืฉืคื•ืชื—ืช ืชืคืจื™ื˜ ืงื•ืคืฅ. ืื™ืš ืื ื™ ืžืขืœื™ื ืืช ื”ืชืคืจื™ื˜ ื›ืฉืžืฉืชืžืฉ ืœื•ื—ืฅ ืขืœ ื”ืžืกืš ืžื—ื•ืฅ ืœืงื•ืžืคื•ื ื ื˜ื”? ื™ืฉ ืžืฉื”ื• ื›ืžื• onClick ืื‘ืœ ืขืœ ื›ืœ ืฉืืจ ื”ื“ื‘ืจื™ื? ืชืฉื•ื‘ื” - ื‘ืฉื‘ื™ืœ ืœืขื ื•ืช ืขืœ ื–ื” ืฆืจื™ืš ืœื”ื™ื–ื›ืจ ื‘ืื™ืš ืขื•ื‘ื“ื™ื ืื™ืจื•ืขื™ื ื‘ JavaScript. ื›ืœ ืคืขื ืฉื™ืฉ ืื™ื–ืฉื”ื• ืื™ืจื•ืข ืขืœ ื”ืžืกืš ื”ื“ืคื“ืคืŸ ืื•ื˜ื•ืžื˜ื™ืช ื ื•ืชืŸ ื”ื–ื“ืžื ื•ืช ืœืืœืžื ื˜ื™ื ืœื˜ืคืœ ื‘ืื™ืจื•ืข. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืฉืืœืžื ื˜ ื™ื›ื•ืœ ืœื˜ืคืœ ื‘ืื™ืจื•ืข ืฉืงื•ืจื” ืืฆืœื•, ื•ืื ื”ื•ื ืœื ืžื˜ืคืœ ืื– ื”ืื™ืจื•ืข ื”ื–ื” "ืžื‘ืขื‘ืข" ื”ืœืื” ืœืืœืžื ื˜ ืฉืžื›ื™ืœ ืื•ืชื• ื•ืื– ืœืืœืžื ื˜ ืฉืžื›ื™ืœ ืื•ืชื• ื•ื›ืš ื”ืœืื” ืขื“ ืœืืœืžื ื˜ ื”ื›ืœืœื™ ื‘ื™ื•ืชืจ ืขืœ ื”ืžืกืš ืฉื–ื” window. ืœื›ืŸ ื‘ืฉื‘ื™ืœ ืœืชืคื•ืก ืœื—ื™ืฆื” ืžื—ื•ืฅ ืœืืœืžื ื˜ ื›ืœ ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืขืฉื•ืช ื–ื” ืœื”ืงืฉื™ื‘ ืœืื™ืจื•ืข click ืขืœ ืื•ื‘ื™ืงื˜ window ื•ืฉื ื ืชืคื•ืก ืืช ื›ืœ ื”ืœื—ื™ืฆื•ืช. ืžืื—ืจ ื•ื’ื ืื™ืจื•ืขื™ื ื‘ืชื•ืš ื”ืืœืžื ื˜ ืžื‘ืขื‘ืขื™ื ืœืžืขืœื” ืœ window, ื ืฆื˜ืจืš ื“ืจืš ืœื–ื”ื•ืช ืฉืื™ืจื•ืข ืžืกื•ื™ื ื”ืชืงื™ื™ื ืžื—ื•ืฅ ืœืืœืžื ื˜ ืฉืžืขื ื™ื™ืŸ ืื•ืชื ื•. ื“ืจืš ืงืœื” ืœืคืชื•ืจ ืืช ื–ื” ื”ื™ื ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” stopPropagation ืฉืœ ืื•ื‘ื™ืงื˜ ืื™ืจื•ืข ื›ืฉืื ื—ื ื• ืžื˜ืคืœื™ื ื‘ืœื—ื™ืฆื•ืช ืฉืื ื—ื ื• ืœื ืจื•ืฆื™ื ืฉื™ื’ื™ืขื• ื”ืœืื” ืœ window. ืกืš ื”ื›ืœ ื”ืงื•ื“ ื ืจืื” ื›ืš:
import React, { useEffect, useState } from 'react';

const initialText = "Click outside the component to change this text"

export function App(props) {
  const [text, setText] = useState(initialText);

  useEffect(() => {
    const changeText = () => setText('Yay!');
    window.addEventListener('click', changeText);

    return () => {
      window.removeEventListener(changeText);
    }
  }, []);

  return (
    <div
      className='App'
      style={{background: 'red'}}
      onClick={(e) => e.stopPropagation()}
    >
      <h2>{text}</h2>
    </div>
  );
}
ืžื•ื–ืžื ื™ื ืœืฉื—ืง ืขื ื”ืงื•ื“ ืœื™ื™ื‘ ื‘ืงื•ื“ืคืœื™ื™ ื‘ืงื™ืฉื•ืจ: https://playcode.io/1848762

ToCode
1 419
ื˜ืจื ื–ืืงืฆื™ื•ืช ืฉืœื™ื—ืช ื”ืคื•ืกื˜ ืืชืžื•ืœ ืœื˜ืœื’ืจื ืขื‘ื“ื” ื—ืœืงื™ืช, ื•ื–ื” ืžืขื ื™ื™ืŸ. ื‘ื™ื•ื ืจื’ื™ืœ ื™ืฉ ืชื•ื›ื ื™ืช ืคื™ื™ืชื•ืŸ ืฉืฉื•ื‘ืจืช ืืช ื”ืคื•ืกื˜ ืœื”ื•ื“ืขื•ืช ืฉื™ื™ื›ื ืกื• ื‘ื˜ืœื’ืจื (ื™ืฉ ืœื”ื ืžื’ื‘ืœื” ืฉืœ ืžื™ืœื™ื) ื•ื’ื ืžื•ืกื™ืคื” Escape Characters ืื™ืคื” ืฉืฆืจื™ืš. ื‘ื’ืœืœ ืฉื˜ืœื’ืจื ื ื•ื“ื ื™ืงื™ื ืœื ืชืžื™ื“ ื”ืงื•ื“ ืฉืœื™ ืžื•ืกื™ืฃ ืืช ื” Escape Characters ื‘ืžืงื•ืžื•ืช ื”ื ื›ื•ื ื™ื ื•ืœื›ืŸ ืฉืœื™ื—ื” ืฉืœ ื”ื•ื“ืขื•ืช ืœืคืขืžื™ื ื ื›ืฉืœืช. ื•ืžื” ืงื•ืจื” ื›ืฉื™ืฉ ืคื•ืกื˜ ืืจื•ืš ื•ื‘ืขื™ื” ื‘ื”ื•ืกืคืช ื” Escape Characters ื‘ื”ื•ื“ืขื” ื”ืฉื ื™ื™ื”? ื”ืฉืœื™ืฉื™ืช? ืื•ืœื™ ื”ื•ื“ืขื” ื‘ืืžืฆืข? ืืชื ื›ื‘ืจ ืžื‘ื™ื ื™ื ืœืืŸ ื–ื” ื”ื•ืœืš, ื”ืคืจืกื•ื ืœื˜ืœื’ืจื ื™ื™ืฉืœื— ื—ืœืงื™ืช ื•ื ืงื‘ืœ ืคื•ืกื˜ ื—ืชื•ืš. ื›ืฉื”ืงื•ื“ ื˜ื•ื‘ ื‘ืขื™ื•ืช ื›ืืœื” ืงื•ืจื•ืช ืžืขื˜ ืžืื•ื“, ืื‘ืœ ื›ืฉื”ืŸ ืงื•ืจื•ืช ืงืฉื” ืœื”ืชืžื•ื“ื“ ืื™ืชืŸ. ื‘ื•ืื• ื ื—ืฉื•ื‘ ืขืœ ื”ื˜ืœื’ืจื ื•ืคื™ืชืจื•ื ื•ืช ืืคืฉืจื™ื™ื ืœืืชื’ืจ: 1. ืฆืขื“ ืจืืฉื•ืŸ ื™ื”ื™ื” ืœื™ืฆื•ืจ ืงื‘ื•ืฆืช "ื‘ื“ื™ืงื”", ืœืฉืœื•ื— ืืœื™ื” ืืช ื›ืœ ื”ื—ืœืงื™ื ืฉืœ ื”ืคื•ืกื˜ ื•ืจืง ืื ื”ื›ืœ ืขื‘ืจ ืœืฉืœื•ื— ืืช ืื•ืชื ื—ืœืงื™ื ืœืงื‘ื•ืฆื” ื”ืืžื™ืชื™ืช. ืื‘ืœ ื–ื” ืœื ืžืกืคื™ืง ื˜ื•ื‘ ื›ื™ ืื•ืœื™ ื™ืฉ ืžืฉื”ื• ืฉื•ื ื” ื‘ื”ื’ื“ืจื•ืช ื‘ื™ืŸ ืงื‘ื•ืฆืช ื”ื‘ื“ื™ืงื” ืœืงื‘ื•ืฆื” ื”ืืžื™ืชื™ืช ืฉื™ื’ืจื•ื ืœื”ื•ื“ืขื•ืช ืœืขื‘ื•ืจ ืœืงื‘ื•ืฆืช ื”ื‘ื“ื™ืงื” ื•ืœื”ื™ื›ืฉืœ ื‘ืฉืœื™ื—ื” ืœืงื‘ื•ืฆื” ื”ืืžื™ืชื™ืช. 2. ืคื™ืชืจื•ืŸ ืงืฆืช ื™ื•ืชืจ ื˜ื•ื‘ ื™ื”ื™ื” ื‘ื“ื™ืงื” ืื—ืจื™ ืฉืœื™ื—ืช ื›ืœ ื”ื•ื“ืขื” ืœืจืื•ืช ืื ื”ืฉืœื™ื—ื” ื ื›ืฉืœื”, ื•ืื ื›ืŸ ืœืžื—ื•ืง ืืช ื›ืœ ื”ื”ื•ื“ืขื•ืช ื‘ืจืฆืฃ. ื’ื ื–ื” ืœื ืžืกืคื™ืง ื˜ื•ื‘ ื›ื™ ืื•ืœื™ ื”ืชื•ื›ื ื™ืช ืขืฆืžื” ื”ืชืจืกืงื” ื•ืœื›ืŸ ืื™ืŸ ืžื™ ืฉื™ืžื—ืง ืืช ื”ืจืฆืฃ. 3. ืคื™ืชืจื•ืŸ ืขื•ื“ ืงืฆืช ื™ื•ืชืจ ื˜ื•ื‘ ื™ื”ื™ื” ืœื”ืจื™ืฅ ืืช ืชื•ื›ื ื™ืช ื”ืฉืœื™ื—ื” ื›ืœ ื—ืžืฉ ื“ืงื•ืช ื‘ืžืงื•ื ื›ืœ ืคืขื ื‘ื™ื•ื. ื”ืชื•ื›ื ื™ืช ืชื‘ื“ื•ืง ืื ื”ืคื•ืกื˜ ื”ืžืœื ื ืฉืœื— ืœื˜ืœื’ืจื. ืื ื›ืœื•ื ืœื ื ืฉืœื— ื”ื™ื ืชื ืกื” ืœืฉืœื•ื—, ื•ืื ื”ื™ื ืžื•ืฆืืช ื—ืœืง ืžื”ืคื•ืกื˜ ื‘ืงื‘ื•ืฆื” ื”ื™ื ืชืžื—ืง ืืช ืžื” ืฉืžืฆืื”. 4. ื‘ืฉื‘ื™ืœ ืœื ืœื”ื™ื›ื ืก ืœืœื•ืค ืื•ืชื” ืชื•ื›ื ื™ืช ืฉืจืฆื” ืคืขื ื‘ื—ืžืฉ ื“ืงื•ืช ืชืฆื˜ืจืš ืœืกืžืŸ ื‘ืื™ื–ืฉื”ื• ื‘ืกื™ืก ื ืชื•ื ื™ื ืฉืฉืœื™ื—ื” ื ื›ืฉืœื” ื•ืฉื”ื™ื ืžื—ืงื” ืืช ื›ืœ ื”ืฉืืจื™ื•ืช (ืื• ืฉื”ืฉืœื™ื—ื” ื”ืฆืœื™ื—ื”). ื›ืฉื”ืชื•ื›ื ื™ืช ืขื•ืœื” ื”ื™ื ืชื•ื›ืœ ืœื‘ื“ื•ืง ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ืื™ื–ื” ืกื˜ื˜ื•ืก ื”ื™ื ืกื™ื™ืžื” ืคืขื ืงื•ื“ืžืช ื•ื›ืš ื”ื™ื ืชื“ืข ืื ื“ืจื•ืฉื” ืขื•ื“ ืขื‘ื•ื“ื”. ืคื™ืชื•ื— ืชื•ื›ื ื”, ื›ืœ ืชื•ื›ื ื”, ื“ื•ืจืฉ ืื™ื–ื•ืŸ ื‘ื™ืŸ ื”ืจืฆื•ืŸ ืฉืœื ื• ืœื‘ื ื•ืช ืืช ื”ืงื•ื“ ื”ื›ื™ ืืžื™ืŸ ื•ื˜ื•ื‘ ืฉืืคืฉืจ ืœื‘ื™ืŸ ื”ืžืฆื™ืื•ืช ื•ื”ืžืฉืื‘ื™ื ืฉื™ืฉ ืœื ื• (ื›ื•ืœืœ ืžืฉืื‘ื™ื ืฉืœ ืชื—ื–ื•ืงื” ื•ื‘ืื’ื™ื ื‘ืงื•ื“ ื™ื•ืชืจ ืžื•ืจื›ื‘). ื‘ืžืงืจื” ืฉืœ ืคื™ืจืกื•ื ืœื˜ืœื’ืจื ื”ื™ื™ืชื™ ืขื•ืฆืจ ื‘ืกืขื™ืฃ 2 ื›ื“ื™ ืœืงื‘ืœ ืงื•ื“ ื˜ื•ื‘ ื™ื•ืชืจ ืžื”ืงื•ื“ ืฉื™ืฉ ืœื™ ื”ื™ื•ื ืฉื, ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ื™ื“ืจื•ืฉ ื™ื•ืชืจ ืžืฉืื‘ื™ื.

ToCode
1 419
ื˜ืจื ื–ืืงืฆื™ื•ืช ืฉืœื™ื—ืช ื”ืคื•ืกื˜ ืืชืžื•ืœ ืœื˜ืœื’ืจื ืขื‘ื“ื” ื—ืœืงื™ืช, ื•ื–ื” ืžืขื ื™ื™ืŸ. ื‘ื™ื•ื ืจื’ื™ืœ ื™ืฉ ืชื•ื›ื ื™ืช ืคื™ื™ืชื•ืŸ ืฉืฉื•ื‘ืจืช ืืช ื”ืคื•ืกื˜ ืœื”ื•ื“ืขื•ืช ืฉื™ื™ื›ื ืกื• ื‘ื˜ืœื’ืจื (ื™ืฉ ืœื”ื ืžื’ื‘ืœื” ืฉืœ ืžื™ืœื™ื) ื•ื’ื ืžื•ืกื™ืคื” Escape Characters ืื™ืคื” ืฉืฆืจื™ืš. ื‘ื’ืœืœ ืฉื˜ืœื’ืจื ื ื•ื“ื ื™ืงื™ื ืœื ืชืžื™ื“ ื”ืงื•ื“ ืฉืœื™ ืžื•ืกื™ืฃ ืืช ื” Escape Characters ื‘ืžืงื•ืžื•ืช ื”ื ื›ื•ื ื™ื ื•ืœื›ืŸ ืฉืœื™ื—ื” ืฉืœ ื”ื•ื“ืขื•ืช ืœืคืขืžื™ื ื ื›ืฉืœืช. ื•ืžื” ืงื•ืจื” ื›ืฉื™ืฉ ืคื•ืกื˜ ืืจื•ืš ื•ื‘ืขื™ื” ื‘ื”ื•ืกืคืช ื” Escape Characters ื‘ื”ื•ื“ืขื” ื”ืฉื ื™ื™ื”? ื”ืฉืœื™ืฉื™ืช? ืื•ืœื™ ื”ื•ื“ืขื” ื‘ืืžืฆืข? ืืชื ื›ื‘ืจ ืžื‘ื™ื ื™ื ืœืืŸ ื–ื” ื”ื•ืœืš, ื”ืคืจืกื•ื ืœื˜ืœื’ืจื ื™ื™ืฉืœื— ื—ืœืงื™ืช ื•ื ืงื‘ืœ ืคื•ืกื˜ ื—ืชื•ืš. ื›ืฉื”ืงื•ื“ ื˜ื•ื‘ ื‘ืขื™ื•ืช ื›ืืœื” ืงื•ืจื•ืช ืžืขื˜ ืžืื•ื“, ืื‘ืœ ื›ืฉื”ืŸ ืงื•ืจื•ืช ืงืฉื” ืœื”ืชืžื•ื“ื“ ืื™ืชืŸ. ื‘ื•ืื• ื ื—ืฉื•ื‘ ืขืœ ื”ื˜ืœื’ืจื ื•ืคื™ืชืจื•ื ื•ืช ืืคืฉืจื™ื™ื ืœืืชื’ืจ: 1. ืฆืขื“ ืจืืฉื•ืŸ ื™ื”ื™ื” ืœื™ืฆื•ืจ ืงื‘ื•ืฆืช "ื‘ื“ื™ืงื”", ืœืฉืœื•ื— ืืœื™ื” ืืช ื›ืœ ื”ื—ืœืงื™ื ืฉืœ ื”ืคื•ืกื˜ ื•ืจืง ืื ื”ื›ืœ ืขื‘ืจ ืœืฉืœื•ื— ืืช ืื•ืชื ื—ืœืงื™ื ืœืงื‘ื•ืฆื” ื”ืืžื™ืชื™ืช. ืื‘ืœ ื–ื” ืœื ืžืกืคื™ืง ื˜ื•ื‘ ื›ื™ ืื•ืœื™ ื™ืฉ ืžืฉื”ื• ืฉื•ื ื” ื‘ื”ื’ื“ืจื•ืช ื‘ื™ืŸ ืงื‘ื•ืฆืช ื”ื‘ื“ื™ืงื” ืœืงื‘ื•ืฆื” ื”ืืžื™ืชื™ืช ืฉื™ื’ืจื•ื ืœื”ื•ื“ืขื•ืช ืœืขื‘ื•ืจ ืœืงื‘ื•ืฆืช ื”ื‘ื“ื™ืงื” ื•ืœื”ื™ื›ืฉืœ ื‘ืฉืœื™ื—ื” ืœืงื‘ื•ืฆื” ื”ืืžื™ืชื™ืช. 2. ืคื™ืชืจื•ืŸ ืงืฆืช ื™ื•ืชืจ ื˜ื•ื‘ ื™ื”ื™ื” ื‘ื“ื™ืงื” ืื—ืจื™ ืฉืœื™ื—ืช ื›ืœ ื”ื•ื“ืขื” ืœืจืื•ืช ืื ื”ืฉืœื™ื—ื” ื ื›ืฉืœื”, ื•ืื ื›ืŸ ืœืžื—ื•ืง ืืช ื›ืœ ื”ื”ื•ื“ืขื•ืช ื‘ืจืฆืฃ. ื’ื ื–ื” ืœื ืžืกืคื™ืง ื˜ื•ื‘ ื›ื™ ืื•ืœื™ ื”ืชื•ื›ื ื™ืช ืขืฆืžื” ื”ืชืจืกืงื” ื•ืœื›ืŸ ืื™ืŸ ืžื™ ืฉื™ืžื—ืง ืืช ื”ืจืฆืฃ. 3. ืคื™ืชืจื•ืŸ ืขื•ื“ ืงืฆืช ื™ื•ืชืจ ื˜ื•ื‘ ื™ื”ื™ื” ืœื”ืจื™ืฅ ืืช ืชื•ื›ื ื™ืช ื”ืฉืœื™ื—ื” ื›ืœ ื—ืžืฉ ื“ืงื•ืช ื‘ืžืงื•ื ื›ืœ ืคืขื ื‘ื™ื•ื. ื”ืชื•ื›ื ื™ืช ืชื‘ื“ื•ืง ืื ื”ืคื•ืกื˜ ื”ืžืœื ื ืฉืœื— ืœื˜ืœื’ืจื. ืื ื›ืœื•ื ืœื ื ืฉืœื— ื”ื™ื ืชื ืกื” ืœืฉืœื•ื—, ื•ืื ื”ื™ื ืžื•ืฆืืช ื—ืœืง ืžื”ืคื•ืกื˜ ื‘ืงื‘ื•ืฆื” ื”ื™ื ืชืžื—ืง ืืช ืžื” ืฉืžืฆืื”. 4. ื‘ืฉื‘ื™ืœ ืœื ืœื”ื™ื›ื ืก ืœืœื•ืค ืื•ืชื” ืชื•ื›ื ื™ืช ืฉืจืฆื” ืคืขื ื‘ื—ืžืฉ ื“ืงื•ืช ืชืฆื˜ืจืš ืœืกืžืŸ ื‘ืื™ื–ืฉื”ื• ื‘ืกื™ืก ื ืชื•ื ื™ื ืฉืฉืœื™ื—ื” ื ื›ืฉืœื” ื•ืฉื”ื™ื ืžื—ืงื” ืืช ื›ืœ ื”ืฉืืจื™ื•ืช (ืื• ืฉื”ืฉืœื™ื—ื” ื”ืฆืœื™ื—ื”). ื›ืฉื”ืชื•ื›ื ื™ืช ืขื•ืœื” ื”ื™ื ืชื•ื›ืœ ืœื‘ื“ื•ืง ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ืื™ื–ื” ืกื˜ื˜ื•ืก ื”ื™ื ืกื™ื™ืžื” ืคืขื ืงื•ื“ืžืช ื•ื›ืš ื”ื™ื ืชื“ืข ืื ื“ืจื•ืฉื” ืขื•ื“ ืขื‘ื•ื“ื”. ืคื™ืชื•ื— ืชื•ื›ื ื”, ื›ืœ ืชื•ื›ื ื”, ื“ื•ืจืฉ ืื™ื–ื•ืŸ ื‘ื™ืŸ ื”ืจืฆื•ืŸ ืฉืœื ื• ืœื‘ื ื•ืช ืืช ื”ืงื•ื“ ื”ื›ื™ ืืžื™ืŸ ื•ื˜ื•ื‘ ืฉืืคืฉืจ ืœื‘ื™ืŸ ื”ืžืฆื™ืื•ืช ื•ื”ืžืฉืื‘ื™ื ืฉื™ืฉ ืœื ื• (ื›ื•ืœืœ ืžืฉืื‘ื™ื ืฉืœ ืชื—ื–ื•ืงื” ื•ื‘ืื’ื™ื ื‘ืงื•ื“ ื™ื•ืชืจ ืžื•ืจื›ื‘). ื‘ืžืงืจื” ืฉืœ ืคื™ืจืกื•ื ืœื˜ืœื’ืจื ื”ื™ื™ืชื™ ืขื•ืฆืจ ื‘ืกืขื™ืฃ 2 ื›ื“ื™ ืœืงื‘ืœ ืงื•ื“ ื˜ื•ื‘ ื™ื•ืชืจ ืžื”ืงื•ื“ ืฉื™ืฉ ืœื™ ื”ื™ื•ื ืฉื, ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ื™ื“ืจื•ืฉ ื™ื•ืชืจ ืžืฉืื‘ื™ื.

ToCode
1 419
ื™ื•ื 17 ืฉืœ Advent Of Code 2023 - ื”ื™ื•ื ื‘ื• ืกืงืืœื” ืขื‘ื“ื” ื ื’ื“ื™ ืื ื™ ืœื ื™ื•ื“ืข ืื ื–ื” ื”ืงื•ื“ ืฉืœื™ ืื• ืžืฉื”ื• ืžื•ื‘ื ื” ื‘ืฉืคื”, ืื‘ืœ ื”ืชืจื’ื™ืœ ืฉืœ ื™ื•ื 17 ื”ื™ื” ื”ื›ื™ ืžืืชื’ืจ ืขื“ ื›ื”. ื‘ืคืขื ื”ืจืืฉื•ื ื” ื‘ืกื™ื“ืจื” ื”ืจื’ืฉืชื™ ืฉืžื‘ื ื™ ื”ื ืชื•ื ื™ื ื” Immutable ืฉืœ ืกืงืืœื” ืฉื›ืœ ื›ืš ื›ื™ืฃ ืœืขื‘ื•ื“ ืื™ืชื ืœื ืžืฆืœื™ื—ื™ื ืœืกืคืง ืืช ื”ื‘ื™ืฆื•ืขื™ื ื”ื ื“ืจืฉื™ื ื•ืขื‘ืจืชื™ ืœื”ืฉืชืžืฉ ื‘ Mutable Collections. ื‘ื•ืื• ื ืจืื” ืืช ื”ืชืจื’ื™ืœ ื•ื”ืคื™ืชืจื•ืŸ ื•ื›ืžื• ืชืžื™ื“ ืชืจื’ื™ืฉื• ื‘ื ื•ื— ืœื”ืฆื™ืข ืคื™ืชืจื•ื ื•ืช ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืื• ื™ืขื™ืœื™ื ื™ื•ืชืจ ืœืžืงืจื” ืฉืคืกืคืกืชื™ ืžืฉื”ื•. ื”ืืชื’ืจ - ื—ื™ืคื•ืฉ ืžืกืœื•ืœ ืงืฆืจ ื‘ื™ื•ืชืจ ื‘ื’ืจืฃ ื”ืืชื’ืจ ืฉืœ ื™ื•ื 17 ื”ื•ื ืžื™ืžื•ืฉ ื›ืžืขื˜ ืงืœืืกื™ ืฉืœ ืืœื’ื•ืจื™ืชื ืžืฆื™ืืช ื”ืžืกืœื•ืœ ื”ืงืฆืจ ื‘ื™ื•ืชืจ ื‘ื’ืจืฃ. ื”ืžืกืœื•ืœ ืฉืœื ื• ื‘ื ื•ื™ ื‘ืฆื•ืจืช ื’ืจื™ื“ ืฉืœ ืžืกืคืจื™ื ืœื“ื•ื’ืžื”:
2413432311323
3215453535623
3255245654254
3446585845452
4546657867536
1438598798454
4457876987766
3637877979653
4654967986887
4564679986453
1224686865563
2546548887735
4322674655533
ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืžื”ื ืงื•ื“ื” ื”ืฉืžืืœื™ืช ืขืœื™ื•ื ื” ื•ืฆืจื™ื›ื™ื ืœื”ื’ื™ืข ืœืคื™ื ื” ื”ื™ืžื ื™ืช ืชื—ืชื•ื ื” ืฉืœ ื”ืœื•ื—, ื•ืœืžืฆื•ื ืืช ื”ืžืกืœื•ืœ ืฉืกื›ื•ื ื”ืžืกืคืจื™ื ืขืœื™ื• ื”ื•ื ื”ื ืžื•ืš ื‘ื™ื•ืชืจ (ืœื ืกื•ืคืจื™ื ืืช ื”-2 ืฉืœ ื ืงื•ื“ืช ื”ื”ืชื—ืœื”, ืืœื ืื ื›ืŸ ื ืขื‘ื•ืจ ื‘ื” ืคืขื ืฉื ื™ื™ื”). ื™ืฉ ื’ื ื˜ื•ื•ื™ืกื˜ ื›ื™ ืืกื•ืจ ืฉื™ื”ื™ื• ื‘ืžืกืœื•ืœ ื™ื•ืชืจ ืž-3 ืฆืขื“ื™ื ื‘ืื•ืชื• ื›ื™ื•ื•ืŸ. ื‘ืฉื‘ื™ืœ ืœืžืฆื•ื ืžืกืœื•ืœ ืงืฆืจ ื‘ื™ื•ืชืจ ืื ื—ื ื• ื™ื•ืฆืื™ื ืžื ืงื•ื“ืช ื”ื”ืชื—ืœื” ื•ืžืกืžื ื™ื ืืช ื›ืœ ื”ื ืงื•ื“ื•ืช ืืœื™ื”ืŸ ืืคืฉืจ ืœื”ื’ื™ืข, ื•ืœื›ืœ ื ืงื•ื“ื” ืฉื•ืžืจื™ื ืžื” ื”"ื ื™ืงื•ื“" ืฉืœ ืื•ืชื” ื ืงื•ื“ื”. ืฉืžื™ื ืืช ื ืงื•ื“ืช ื”ื”ืชื—ืœื” ื‘ืฆื“ ื•ืžื›ืœ ื”ื ืงื•ื“ื•ืช ืฉื ืฉืืจื• ืžื•ืฆืื™ื ืืช ื–ื• ืขื ื”ื ื™ืงื•ื“ ื”ื ืžื•ืš ื‘ื™ื•ืชืจ ื•ืžืžืฉื™ื›ื™ื ืžืžื ื” ืืช ื”ืžืกืœื•ืœ ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื ืงื•ื“ื•ืช ืืœื™ื”ืŸ ืืคืฉืจ ืœื”ื’ื™ืข ืžื ืงื•ื“ื” ื–ื•, ื•ืื– ื’ื ืืช ื”ื ืงื•ื“ื” ื”ืฉื ื™ื™ื” ืฉืžื™ื ื‘ืฆื“ ื•ืฉื•ื‘ ื•ืžื•ืฆืื™ื ืืช ื”ื ืงื•ื“ื” ืขื ื”ื ื™ืงื•ื“ ื”ื›ื™ ื ืžื•ืš ื•ืžืžืฉื™ื›ื™ื ืžืžื ื” ืืช ื”ืžืกืœื•ืœ. ื›ืš ืžืžืฉื™ื›ื™ื ืขื“ ืฉืžื’ื™ืขื™ื ืœืกื•ืฃ. ื”ื ื™ืงื•ื“ ื‘ืชืจื’ื™ืœ ื”ื–ื” ืžื•ืจื›ื‘ ืžืกื›ื•ื ืฉืœ ืฉื ื™ ื“ื‘ืจื™ื: ื”ืžืจื—ืง ืžื”ื™ืขื“ ื•ืกื›ื•ื ื”ืžืกืคืจื™ื ืฉื”ื•ื‘ื™ืœ ืื•ืชื ื• ืœื ืงื•ื“ื”. ื›ืฉืœื•ืงื—ื™ื ื›ืœ ืคืขื ืืช ื”ื ืงื•ื“ื” ืขื ื”ื ื™ืงื•ื“ ื”ื›ื™ ื ืžื•ืš ื•ืžืžืฉื™ื›ื™ื ืžืžื ื” ืื ื—ื ื• ืžื‘ื˜ื™ื—ื™ื ืฉื ืชืงื“ื ื‘ื›ื™ื•ื•ืŸ ื”ื ื›ื•ืŸ ื•ื‘ืžืกืœื•ืœ ืขื ื”ืกื›ื•ื ื”ื ืžื•ืš ื‘ื™ื•ืชืจ. ืคื™ืชืจื•ืŸ ื‘ืกืงืืœื” ืœื ืžืฉื ื” ื›ืžื” ื ื™ืกื™ืชื™ ืœื›ืชื•ื‘ ืืช ืจืงื•ืจืกื™ื™ืช ื”ื–ื ื‘ ื‘ืฆื•ืจื” ื™ืขื™ืœื”, ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื—ื™ืคื•ืฉ ื”ื ืงื•ื“ื” ื”ื‘ืื” ืžืชื•ืš ืื•ืกืฃ ื›ืœ ื”ื ืงื•ื“ื•ืช ื”ืคื•ื˜ื ืฆื™ืืœื™ื•ืช ืœืงื— ื™ื•ืชืจ ืžื“ื™ ื–ืžืŸ - ื•ืจืง ื’ื“ืœ ื›ื›ืœ ืฉืืกืคืชื™ ื™ื•ืชืจ ืืคืฉืจื•ื™ื•ืช. ืžื” ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ื›ืืŸ ื”ื™ื” scala.collection.mutable.PriorityQueue ืฉื”ื•ื ื—ืœืง ืžืžื‘ื ื™ ื”ื ืชื•ื ื™ื ื” Mutable ืฉืœ ืกืงืืœื”. ื ืงื•ื“ื” ื ื•ืกืคืช ื—ืฉื•ื‘ื” ืžื”ืคื™ืชืจื•ืŸ ื”ื™ื ื”ื”ืชืžื•ื“ื“ื•ืช ืขื ื”ืžื’ื‘ืœื” ืฉืœ ืฉืœื•ืฉื” ืฆืขื“ื™ื ืžืงืกื™ืžืœื™ื™ื ืœืื•ืชื• ื›ื™ื•ื•ืŸ. ื‘ืฉื‘ื™ืœ ื–ื” ื”ื’ื“ืจืชื™ ืœื›ืœ ืฆื•ืžืช ื’ื ืืช ื”ื›ื™ื•ื•ืŸ ื‘ื• ื”ื’ืขืชื™ ืืœื™ื•, ื•ื›ืš ื”ืชื™ื—ืกืชื™ ืœืื•ืชื• ืฆื•ืžืช ื‘ืฆื•ืจื” ืฉื•ื ื” ืื ื”ื’ืขืชื™ ืืœื™ื• ื‘ืฆื•ืจื” ืื ื›ื™ืช ืื• ืื•ืคืงื™ืช. ืื™ืš ืขื•ื‘ื“ ื”ืงื•ื“? ืงื•ื“ื ื›ืœ ืžื’ื“ื™ืจื™ื ืืช ื”ืฆื•ืžืช ืขื ื”ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” ืืช ื›ืœ ื”ืฉื›ื ื™ื:
  case class Node(pos: (Int, Int),
                  direction: Direction,
                  count: Int,
                  map: Map[(Int, Int), Int]) {

    def move(newPosition: (Int, Int), newDirection: Direction): Option[Node] =
      if (((count == 3) && newDirection == direction) || (!map.contains(newPosition))) {
        None
      } else {
        Some(Node(
          pos=newPosition,
          direction=newDirection,
          count=if ((newDirection == direction) || (direction == Direction.Start)) count + 1 else 1,
          map=map))
      }

    def movePart2(newPosition: (Int, Int), newDirection: Direction): Option[Node] =
      if (!map.contains(newPosition)) {
        return None
      }

      if ((newDirection == direction) && (count >= 10)) {
        return None
      }

      if ((newDirection != direction) && (direction != Direction.Start) && (count < 4)) {
        return None
      }

      Some(Node(
        pos = newPosition,
        direction = newDirection,
        count = if ((newDirection == direction) || (direction == Direction.Start)) count + 1 else 1,
        map = map))


    def up: Option[Node] = if (direction == Direction.Down) {
      None
    } else {
      move(newPosition=(pos._1 - 1, pos._2), newDirection=Direction.Up)
    }

    def down: Option[Node] = if (direction == Direction.Up) {
      None
    } else {
      move(newPosition=(pos._1 + 1, pos._2), newDirection=Direction.Down)
    }

    def left: Option[Node] = if (direction == Direction.Right) {
      None
    } else {
      move(newPosition=(pos._1, pos._2 - 1), newDirection=Direction.Left)
    }

ToCode
1 419
ื ืฉื™ื ืœื‘ ืฉ esbuild ืœื ื‘ื•ื“ืง ื”ื’ื“ืจื•ืช ื˜ื™ืคื•ืกื™ื ื•ืœื›ืŸ ื‘ื ื•ืกืฃ ืืœื™ื• ื ืฆื˜ืจืš ืœื”ื’ื“ื™ืจ ืงื•ื‘ืฅ tsconfig.json ืœืคืจื•ื™ืงื˜ ื›ื“ื™ ืœื”ืจื™ืฅ ืืช ื” TypeScript Compiler, ืชื•ืš ืฉืื ื—ื ื• ื–ื•ื›ืจื™ื ืฉ tsc ื™ื‘ื ื” ืจืง ื’ื™ืจืกื” ืฉืœ ื”ืคืจื•ื™ืงื˜ ืฉืžื•ืชืืžืช ืœ node (ื•ื›ืŸ ื–ื” ื”ื™ื” ืžื•ืฉืœื ืื ื”ื™ืชื” ื“ืจืš ืœืฉื›ื ืข ืืช tsc ืœื‘ื ื•ืช ื’ื™ืจืกื” ืฉืžืชืื™ืžื” ืœ deno. ืขื“ ื›ืžื” ืฉืื ื™ ื™ื•ื“ืข ืื™ืŸ). ื‘ื•ืื• ื ืจืื” ืืช ื–ื” ื‘ืงื•ื“. ื‘ืชื™ืงื™ื™ืช ื”ื“ื•ื’ืžื” ืื ื™ ืžืฉื ื” ืืช ื”ืกื™ื•ืžื•ืช ืฉืœ ืฉื ื™ ืงื‘ืฆื™ ื”ืงื•ื“ ืœ ts, ืžื•ืกื™ืฃ ืงื•ื‘ืฅ tsconfig.json ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "commonjs",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node",
    "strict": true,
    "skipLibCheck": true,
    "outDir": "./distNode"
  }
}
ืžืฉื ื” ืืช ืฉื•ืจืช ื” import ืœ:
import { text } from './helper';
ื•ืžืจื™ืฅ tsc ื›ื“ื™ ืœืจืื•ืช ืฉื”ื›ืœ ืžืชืงืžืคืœ. ืื—ืจื™ ื–ื” ืื ื™ ืžืจื™ืฅ ืืช ืฉืชื™ ืคืงื•ื“ื•ืช ื” esbuild ืฉื”ืจืื™ืชื™:
$ esbuild --bundle main.ts --packages=external --outdir=distNode --format=cjs
$ esbuild --bundle main.ts --packages=external --outdir=distDeno --format=esm
ื•ื ื•ืฆืจื• ืœื™ ืฉื ื™ ืคืจื•ื™ืงื˜ื™ื ื‘ืฉืชื™ ืชื™ืงื™ื•ืช ื”ื™ืขื“. ืื ื™ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ื›ืœ ืื—ื“ ืžื”ื ืขื ื”ื›ืœื™ ืฉืžืชืื™ื ืœื•:
$ deno run -A distDeno/main.js
 _________________
< I'm a moooodule >
 -----------------
        \   ^__^
         \  (oO)\_______
            (__)\       )\/\
             U  ||----w |
                ||     ||
$ node distNode/main.js
 _________________
< I'm a moooodule >
 -----------------
        \   ^__^
         \  (oO)\_______
            (__)\       )\/\
             U  ||----w |
                ||     ||
ื‘ืฉื‘ื™ืœ ืœื‘ื“ื•ืง ืฉื”ื›ืœ ืžืชืงืžืคืœ ื’ื ืขื ื“ื™ื ื• ื ื•ื›ืœ ืœื”ืคืขื™ืœ:
$ deno check --unstable-sloppy-imports *.ts
ื›ืืฉืจ ื”ืžืชื’ --unstable-sloppy-imports ื’ื•ืจื ืœื“ื™ื ื• ืœืขื‘ื•ื“ ื’ื ืขื import-ื™ื ืœืœื ืกื™ื•ืžืช, ื›ืžื• ืืœื” ื‘ืงื‘ืฆื™ ื”ืžืงื•ืจ ืฉืœ ื”ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืฉืœื ื•. ืื‘ืœ ื–ื” ืžืชื’ ืขื‘ื•ื“ื” ืœื ืžื•ืžืœืฅ ื•ืืžื•ืจ ืœืจื“ืช ื‘ื’ื™ืจืกื” 2 ืฉืœ ื“ื™ื ื•. ื‘ืขื™ื ื™ื™ ืฉื™ื˜ื” ื–ื• ืคื—ื•ืช ื˜ื•ื‘ื” ื’ื ื‘ื’ืœืœ ืฉื”ื™ื ืžืกื•ืจื‘ืœืช ื™ื•ืชืจ ื•ื’ื ื‘ื’ืœืœ ืฉืื™ืŸ ื‘ืืžืช ื˜ืขื ืœื‘ื ื•ืช ืืช ืื•ืชื• ืคืจื•ื™ืงื˜ ื’ื ืœ node ื•ื’ื ืœ deno. ื›ื™ื•ื•ืŸ ืขื‘ื•ื“ื” ืžื•ืžืœืฅ ืื ื—ื ื• ื ืžืฆืื™ื ื”ื™ื•ื ื‘ืฆื•ืžืช ื“ืจื›ื™ื ืžื‘ื—ื™ื ืช ื”ืขืชื™ื“ ืฉืœ ืกื‘ื™ื‘ื•ืช ืœื”ืจืฆืช JavaScript ืžื—ื•ืฅ ืœื“ืคื“ืคืŸ. ืขื“ ืœื ืžื–ืžืŸ node.js ื”ื™ืชื” ื”ืื•ืคืฆื™ื” ื”ื™ื—ื™ื“ื” ืฉืœื ื•, ืื‘ืœ ื”ื™ื•ื ื™ืฉ ื›ื‘ืจ ืฉืœื•ืฉ ืกื‘ื™ื‘ื•ืช ื˜ื•ื‘ื•ืช ืœื”ืจืฆื” - deno ,node, ื• bun ืฉื”ื•ื ื ื™ืกื™ื•ืŸ ืœื™ื™ืฆืจ ืกื‘ื™ื‘ื” ืืคื™ืœื• ื™ื•ืชืจ ืžื”ื™ืจื” ืž deno ื•ื™ื•ืชืจ ืชื•ืืžืช ืœ node.js. ืื ื™ ืœื ื™ื•ื“ืข ืื™ืš ื”ืชื—ืจื•ืช ื”ื–ืืช ืชื™ื’ืžืจ, ื•ืื ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื™ื”ื™ื” ืžื ืฆื— ืื• ืฉืื ืฉื™ื ื™ืฉืชืžืฉื• ื‘ืฉืœื•ืฉืช ื”ื›ืœื™ื ืœืคื™ ืกื•ื’ ื”ืคืจื•ื™ืงื˜. ื›ืจื’ืข ื™ืฉ ื—ื‘ื™ืœื•ืช ืฉืขื•ื‘ื“ื•ืช ื˜ื•ื‘ ื™ื•ืชืจ ื‘ื“ื™ื ื•, ื•ื—ื‘ื™ืœื•ืช ืื—ืจื•ืช ืฉืขื•ื‘ื“ื•ืช ื˜ื•ื‘ ื™ื•ืชืจ ื‘ node, ื•ื—ื‘ื™ืœื•ืช ืฉืขื•ื‘ื“ื•ืช ื“ื™ ื˜ื•ื‘ ื‘ืฉืชื™ ื”ืกื‘ื™ื‘ื•ืช. ืืงืกืคืจืก ืขื•ื‘ื“ืช ืกื‘ื™ืจ ื‘ืฉืชื™ ื”ืกื‘ื™ื‘ื•ืช ืื‘ืœ ืขื“ื™ื™ืŸ ืคื™ืฆ'ืจื™ื ืžืกื•ื™ืžื™ื ืฉืœื” ืขื•ื‘ื“ื™ื ืจืง ื‘ node. ืœื“ื™ื ื• ื™ืฉ ืคืจื™ื™ืžื•ื•ืจืง ืžืชื—ืจื” ื•ืกืคืฆื™ืคื™ ืœื“ื™ื ื• ื‘ืฉื Oak. ื ืงืกื˜ ืขื•ื‘ื“ืช ืจืง ื‘ node ืื‘ืœ ืœื“ื™ื ื• ื™ืฉ ืคืจื™ื™ืžื•ื•ืจืง ืžืชื—ืจื” ื‘ืฉื fresh. ืขื•ื“ ื“ื•ื’ืžื” ื”ื™ื ื—ื‘ื™ืœื•ืช ื”ื—ื™ื‘ื•ืจ ืœื‘ืกื™ืก ื ืชื•ื ื™ื. ื“ืจื™ื™ื‘ืจื™ื ืฉืœ ื‘ืกื™ืก ื ืชื•ื ื™ื ืœื ืขื•ื‘ื“ื™ื ื‘ืฆื•ืจื” ื—ืœืงื” ื‘ื™ืŸ ืฉืชื™ ื”ืกื‘ื™ื‘ื•ืช ื•ื™ืฉ ื”ืจื‘ื” ืกืคืจื™ื•ืช ืœื’ื™ืฉื” ืœื‘ืกื™ืก ื ืชื•ื ื™ื ืฉืžื•ื’ื‘ืœื•ืช ืจืง ืœ node.js. ืื ื™ ืื•ื”ื‘ ืœืขื‘ื•ื“ ืขื ืกืคืจื™ื” ื‘ืฉื kysely ืฉื›ืŸ ืขื•ื‘ื“ืช ืขืœ ืฉืชื™ ื”ืกื‘ื™ื‘ื•ืช (ื™ืฉ ื’ื ืืช drizzle ืฉืขื•ื‘ื“ืช ื‘ื›ืœ ืžืงื•ื), ืื‘ืœ ื”ืจื‘ื” ืกืคืจื™ื•ืช ืžื•ื‘ื™ืœื•ืช ื‘ืžื™ื•ื—ื“ ืกืคืจื™ื•ืช ORM ืœื ืชื•ืžื›ื•ืช ื‘ื“ื™ื ื•. ืื ื™ ืžืงื•ื•ื” ืœืจืื•ืช ืืช ื”ืืงื•ืกื™ืกื˜ื ืฉืœ ื“ื™ื ื• ืžืžืฉื™ืš ืœื’ื“ื•ืœ ื•ื™ื•ื ืื—ื“ ืœืงื‘ืœ ืžืขืจื›ืช ืฉืžื›ื™ืœื” ืžืกืคื™ืง ืžื•ื“ื•ืœื™ื ื•ืชื™ืขื•ื“ ื›ื“ื™ ืฉืืคืฉืจ ื™ื”ื™ื” ืœืขื‘ื•ื“ ืื™ืชื” ื‘ืงืœื•ืช ื‘ืœื™ ืงืฉืจ ืœ node.js. ื›ืจื’ืข ื“ื™ื ื• ืžืชืื™ื ื™ื•ืชืจ ืœื”ืจืคืชืงื ื™ื ืื• ืœืคื™ืชื•ื— ื™ื™ืฉื•ืžื™ื ืกืคืฆื™ืคื™ื™ื. ืฉื™ืจื•ืช Deno Deploy ืฉืœื”ื ื”ื•ื ืžืฆื•ื™ืŸ ื•ืœื›ืŸ ื›ืŸ ื”ื™ื™ืชื™ ื‘ื•ื ื” ืื™ืชื• ื”ื™ื•ื ืžืขืจื›ืช ื•ื•ื‘ ืชื•ืš ืฉื™ืžื•ืฉ ื‘ Web Frameworks ืฉืœื”ื, ืื‘ืœ ื”ื—ื™ื‘ื•ืจ ืœืžื•ื“ื•ืœื™ื ืž npm ืขื“ื™ื™ืŸ ืœื ืขื•ื‘ื“ ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช ื•ื‘ืขื™ื•ืช ืชืื™ืžื•ืช ืฉื ื™ื›ื•ืœื•ืช ืœืชืกื›ืœ.